app: add core use cases (RegisterUser, CreateAlbum) with TDD
This commit is contained in:
1
crates/application/tests/use_cases/identity/mod.rs
Normal file
1
crates/application/tests/use_cases/identity/mod.rs
Normal file
@@ -0,0 +1 @@
|
||||
mod register_user;
|
||||
48
crates/application/tests/use_cases/identity/register_user.rs
Normal file
48
crates/application/tests/use_cases/identity/register_user.rs
Normal file
@@ -0,0 +1,48 @@
|
||||
use std::sync::Arc;
|
||||
use application::testing::{InMemoryUserRepository, StubPasswordHasher};
|
||||
use application::use_cases::RegisterUser;
|
||||
use domain::errors::DomainError;
|
||||
|
||||
#[tokio::test]
|
||||
async fn registers_new_user() {
|
||||
let repo = Arc::new(InMemoryUserRepository::new());
|
||||
let uc = RegisterUser::new(repo.clone(), Arc::new(StubPasswordHasher));
|
||||
let user = uc.execute("testuser", "test@example.com", "password123").await.unwrap();
|
||||
assert_eq!(user.username, "testuser");
|
||||
assert_eq!(user.email.as_str(), "test@example.com");
|
||||
assert_eq!(repo.all().await.len(), 1);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn rejects_duplicate_email() {
|
||||
let repo = Arc::new(InMemoryUserRepository::new());
|
||||
let uc = RegisterUser::new(repo.clone(), Arc::new(StubPasswordHasher));
|
||||
uc.execute("user1", "test@example.com", "password123").await.unwrap();
|
||||
let result = uc.execute("user2", "test@example.com", "different1").await;
|
||||
assert!(matches!(result, Err(DomainError::Conflict(_))));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn rejects_duplicate_username() {
|
||||
let repo = Arc::new(InMemoryUserRepository::new());
|
||||
let uc = RegisterUser::new(repo.clone(), Arc::new(StubPasswordHasher));
|
||||
uc.execute("sameuser", "a@example.com", "password123").await.unwrap();
|
||||
let result = uc.execute("sameuser", "b@example.com", "password123").await;
|
||||
assert!(matches!(result, Err(DomainError::Conflict(_))));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn rejects_short_password() {
|
||||
let repo = Arc::new(InMemoryUserRepository::new());
|
||||
let uc = RegisterUser::new(repo, Arc::new(StubPasswordHasher));
|
||||
let result = uc.execute("user", "test@example.com", "short").await;
|
||||
assert!(matches!(result, Err(DomainError::Validation(_))));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn rejects_empty_username() {
|
||||
let repo = Arc::new(InMemoryUserRepository::new());
|
||||
let uc = RegisterUser::new(repo, Arc::new(StubPasswordHasher));
|
||||
let result = uc.execute("", "test@example.com", "password123").await;
|
||||
assert!(matches!(result, Err(DomainError::Validation(_))));
|
||||
}
|
||||
Reference in New Issue
Block a user