Files
k-mood/crates/application/tests/user/register_test.rs
Gabriel Kaszewski 95739892de
Some checks failed
CI / ci (push) Failing after 1m48s
init
2026-08-25 23:24:36 +02:00

80 lines
2.3 KiB
Rust

use std::sync::Arc;
use domain::testing::{FakePasswordHasher, InMemoryStore};
use domain::user::Username;
use application::user::commands::RegisterCommand;
use application::user::use_cases::register;
fn deps() -> (Arc<InMemoryStore>, register::Deps) {
let store = Arc::new(InMemoryStore::new());
let deps = register::Deps {
user_command: store.clone(),
user_query: store.clone(),
activity_command: store.clone(),
password_hasher: Arc::new(FakePasswordHasher),
events: store.clone(),
preset: config::PresetConfig::default(),
};
(store, deps)
}
#[tokio::test]
async fn registers_user_and_seeds_activities() {
let (store, deps) = deps();
let cmd = RegisterCommand {
username: Username::new("alice").unwrap(),
email: domain::user::Email::new("alice@example.com").unwrap(),
password: "secret123".into(),
};
let user = register::execute(cmd, &deps).await.unwrap();
assert_eq!(user.username().value(), "alice");
assert!(store.activity_count() > 0);
assert_eq!(store.published_events().len(), 1);
}
#[tokio::test]
async fn rejects_duplicate_username() {
let (_, deps) = deps();
let cmd1 = RegisterCommand {
username: Username::new("alice").unwrap(),
email: domain::user::Email::new("alice@example.com").unwrap(),
password: "secret".into(),
};
register::execute(cmd1, &deps).await.unwrap();
let cmd2 = RegisterCommand {
username: Username::new("alice").unwrap(),
email: domain::user::Email::new("alice2@example.com").unwrap(),
password: "secret".into(),
};
let result = register::execute(cmd2, &deps).await;
assert!(result.is_err());
}
#[tokio::test]
async fn rejects_duplicate_email() {
let (_, deps) = deps();
let cmd1 = RegisterCommand {
username: Username::new("alice").unwrap(),
email: domain::user::Email::new("alice@example.com").unwrap(),
password: "secret".into(),
};
register::execute(cmd1, &deps).await.unwrap();
let cmd2 = RegisterCommand {
username: Username::new("bob").unwrap(),
email: domain::user::Email::new("alice@example.com").unwrap(),
password: "secret".into(),
};
let result = register::execute(cmd2, &deps).await;
assert!(result.is_err());
}