50 lines
1.5 KiB
Rust
50 lines
1.5 KiB
Rust
use super::*;
|
|
use crate::user::PgUserRepository;
|
|
use chrono::Utc;
|
|
use domain::ports::UserWriter;
|
|
use domain::{models::user::User, value_objects::*};
|
|
|
|
async fn seed_user(pool: &sqlx::PgPool) -> User {
|
|
let repo = PgUserRepository::new(pool.clone());
|
|
let u = User::new_local(
|
|
UserId::new(),
|
|
Username::new("alice").unwrap(),
|
|
Email::new("alice@ex.com").unwrap(),
|
|
PasswordHash("h".into()),
|
|
);
|
|
repo.save(&u).await.unwrap();
|
|
u
|
|
}
|
|
|
|
#[sqlx::test(migrations = "./migrations")]
|
|
async fn save_and_find_by_hash(pool: sqlx::PgPool) {
|
|
let user = seed_user(&pool).await;
|
|
let repo = PgApiKeyRepository::new(pool);
|
|
let key = ApiKey {
|
|
id: ApiKeyId::new(),
|
|
user_id: user.id.clone(),
|
|
key_hash: "abc123".into(),
|
|
name: "test".into(),
|
|
created_at: Utc::now(),
|
|
};
|
|
repo.save(&key).await.unwrap();
|
|
let found = repo.find_by_hash("abc123").await.unwrap().unwrap();
|
|
assert_eq!(found.name, "test");
|
|
}
|
|
|
|
#[sqlx::test(migrations = "./migrations")]
|
|
async fn delete_key(pool: sqlx::PgPool) {
|
|
let user = seed_user(&pool).await;
|
|
let repo = PgApiKeyRepository::new(pool);
|
|
let key = ApiKey {
|
|
id: ApiKeyId::new(),
|
|
user_id: user.id.clone(),
|
|
key_hash: "def456".into(),
|
|
name: "key2".into(),
|
|
created_at: Utc::now(),
|
|
};
|
|
repo.save(&key).await.unwrap();
|
|
repo.delete(&key.id, &user.id).await.unwrap();
|
|
assert!(repo.find_by_hash("def456").await.unwrap().is_none());
|
|
}
|