49 lines
2.0 KiB
Rust
49 lines
2.0 KiB
Rust
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(_))));
|
|
}
|