73 lines
2.0 KiB
Rust
73 lines
2.0 KiB
Rust
use application::organization::{
|
|
CreateAlbumCommand, CreateAlbumHandler, GetAlbumHandler, GetAlbumQuery,
|
|
};
|
|
use application::testing::InMemoryAlbumRepository;
|
|
use domain::errors::DomainError;
|
|
use domain::value_objects::SystemId;
|
|
use std::sync::Arc;
|
|
|
|
#[tokio::test]
|
|
async fn returns_album() {
|
|
let repo = Arc::new(InMemoryAlbumRepository::new());
|
|
let creator = SystemId::new();
|
|
|
|
let create_handler = CreateAlbumHandler::new(repo.clone());
|
|
let album = create_handler
|
|
.execute(CreateAlbumCommand {
|
|
title: "My Album".into(),
|
|
creator_id: creator,
|
|
})
|
|
.await
|
|
.unwrap();
|
|
|
|
let query_handler = GetAlbumHandler::new(repo);
|
|
let found = query_handler
|
|
.execute(GetAlbumQuery {
|
|
album_id: album.album_id,
|
|
user_id: creator,
|
|
})
|
|
.await
|
|
.unwrap();
|
|
|
|
assert_eq!(found.album_id, album.album_id);
|
|
assert_eq!(found.title, "My Album");
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn rejects_nonexistent() {
|
|
let repo = Arc::new(InMemoryAlbumRepository::new());
|
|
let handler = GetAlbumHandler::new(repo);
|
|
let result = handler
|
|
.execute(GetAlbumQuery {
|
|
album_id: SystemId::new(),
|
|
user_id: SystemId::new(),
|
|
})
|
|
.await;
|
|
assert!(matches!(result, Err(DomainError::NotFound(_))));
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn rejects_forbidden_access() {
|
|
let repo = Arc::new(InMemoryAlbumRepository::new());
|
|
let creator = SystemId::new();
|
|
|
|
let create_handler = CreateAlbumHandler::new(repo.clone());
|
|
let album = create_handler
|
|
.execute(CreateAlbumCommand {
|
|
title: "Private Album".into(),
|
|
creator_id: creator,
|
|
})
|
|
.await
|
|
.unwrap();
|
|
|
|
let query_handler = GetAlbumHandler::new(repo);
|
|
let other_user = SystemId::new();
|
|
let result = query_handler
|
|
.execute(GetAlbumQuery {
|
|
album_id: album.album_id,
|
|
user_id: other_user,
|
|
})
|
|
.await;
|
|
assert!(matches!(result, Err(DomainError::Forbidden(_))));
|
|
}
|