harden(db): case-insensitive email unique index + dup-email test; list_users pagination TODO; from_db note

This commit is contained in:
2026-06-02 14:42:04 +02:00
parent f8ec2d7cf1
commit bea9b6b39a
4 changed files with 43 additions and 4 deletions
+26
View File
@@ -98,3 +98,29 @@ async fn list_users_is_ordered_by_email(pool: PgPool) {
let emails: Vec<&str> = users.iter().map(|u| u.email.as_str()).collect();
assert_eq!(emails, vec!["amy@example.com", "zoe@example.com"]);
}
#[sqlx::test]
async fn duplicate_email_is_rejected(pool: PgPool) {
let db = Db::from_pool(pool);
let mut tx = db.pool().begin().await.unwrap();
users::create_user(
&mut tx,
AuditActor::System,
&new_user("anna@example.com", Role::Admin),
)
.await
.unwrap();
// Same normalized email again — the lower(email) unique index must reject it.
let err = users::create_user(
&mut tx,
AuditActor::System,
&new_user("anna@example.com", Role::Editor),
)
.await
.unwrap_err();
assert!(
matches!(err, sqlx::Error::Database(_)),
"expected a unique-violation database error, got {err:?}"
);
}