diff --git a/crates/application/src/movie_resolver.rs b/crates/application/src/movie_resolver.rs index 0391c05..8b69c78 100644 --- a/crates/application/src/movie_resolver.rs +++ b/crates/application/src/movie_resolver.rs @@ -253,6 +253,10 @@ mod tests { async fn delete_movie(&self, _: &MovieId) -> Result<(), DomainError> { panic!("unexpected") } + async fn query_activity_feed(&self, _: &domain::models::collections::PageParams) -> Result, DomainError> { panic!("unexpected") } + async fn get_user_stats(&self, _: &domain::value_objects::UserId) -> Result { panic!("unexpected") } + async fn get_user_history(&self, _: &domain::value_objects::UserId) -> Result, DomainError> { panic!("unexpected") } + async fn get_user_trends(&self, _: &domain::value_objects::UserId) -> Result { panic!("unexpected") } } #[async_trait] @@ -300,6 +304,10 @@ mod tests { async fn delete_movie(&self, _: &MovieId) -> Result<(), DomainError> { panic!("unexpected") } + async fn query_activity_feed(&self, _: &domain::models::collections::PageParams) -> Result, DomainError> { panic!("unexpected") } + async fn get_user_stats(&self, _: &domain::value_objects::UserId) -> Result { panic!("unexpected") } + async fn get_user_history(&self, _: &domain::value_objects::UserId) -> Result, DomainError> { panic!("unexpected") } + async fn get_user_trends(&self, _: &domain::value_objects::UserId) -> Result { panic!("unexpected") } } #[async_trait] @@ -347,6 +355,10 @@ mod tests { async fn delete_movie(&self, _: &MovieId) -> Result<(), DomainError> { panic!("unexpected") } + async fn query_activity_feed(&self, _: &domain::models::collections::PageParams) -> Result, DomainError> { panic!("unexpected") } + async fn get_user_stats(&self, _: &domain::value_objects::UserId) -> Result { panic!("unexpected") } + async fn get_user_history(&self, _: &domain::value_objects::UserId) -> Result, DomainError> { panic!("unexpected") } + async fn get_user_trends(&self, _: &domain::value_objects::UserId) -> Result { panic!("unexpected") } } struct MetaReturnsMovie(Movie); diff --git a/crates/presentation/src/event_handlers.rs b/crates/presentation/src/event_handlers.rs index 7104064..5179081 100644 --- a/crates/presentation/src/event_handlers.rs +++ b/crates/presentation/src/event_handlers.rs @@ -102,6 +102,10 @@ mod tests { async fn get_review_by_id(&self, _: &ReviewId) -> Result, DomainError> { panic!("unexpected") } async fn delete_review(&self, _: &ReviewId) -> Result<(), DomainError> { panic!("unexpected") } async fn delete_movie(&self, _: &MovieId) -> Result<(), DomainError> { panic!("unexpected") } + async fn query_activity_feed(&self, _: &domain::models::collections::PageParams) -> Result, DomainError> { panic!("unexpected") } + async fn get_user_stats(&self, _: &UserId) -> Result { panic!("unexpected") } + async fn get_user_history(&self, _: &UserId) -> Result, DomainError> { panic!("unexpected") } + async fn get_user_trends(&self, _: &UserId) -> Result { panic!("unexpected") } } #[async_trait] @@ -138,6 +142,7 @@ mod tests { async fn find_by_email(&self, _: &Email) -> Result, DomainError> { panic!("unexpected") } async fn save(&self, _: &User) -> Result<(), DomainError> { panic!("unexpected") } async fn find_by_id(&self, _: &domain::value_objects::UserId) -> Result, DomainError> { panic!("unexpected") } + async fn list_with_stats(&self) -> Result, DomainError> { panic!("unexpected") } } #[async_trait] diff --git a/crates/presentation/src/extractors.rs b/crates/presentation/src/extractors.rs index 6c1beb5..ba391e4 100644 --- a/crates/presentation/src/extractors.rs +++ b/crates/presentation/src/extractors.rs @@ -134,6 +134,10 @@ mod tests { async fn get_review_by_id(&self, _: &domain::value_objects::ReviewId) -> Result, domain::errors::DomainError> { panic!() } async fn delete_review(&self, _: &domain::value_objects::ReviewId) -> Result<(), domain::errors::DomainError> { panic!() } async fn delete_movie(&self, _: &domain::value_objects::MovieId) -> Result<(), domain::errors::DomainError> { panic!() } + async fn query_activity_feed(&self, _: &domain::models::collections::PageParams) -> Result, domain::errors::DomainError> { panic!() } + async fn get_user_stats(&self, _: &domain::value_objects::UserId) -> Result { panic!() } + async fn get_user_history(&self, _: &domain::value_objects::UserId) -> Result, domain::errors::DomainError> { panic!() } + async fn get_user_trends(&self, _: &domain::value_objects::UserId) -> Result { panic!() } } struct PanicRenderer; @@ -142,6 +146,9 @@ mod tests { fn render_login_page(&self, _: application::ports::LoginPageData<'_>) -> Result { panic!() } fn render_register_page(&self, _: application::ports::RegisterPageData<'_>) -> Result { panic!() } fn render_new_review_page(&self, _: application::ports::NewReviewPageData<'_>) -> Result { panic!() } + fn render_activity_feed_page(&self, _: application::ports::ActivityFeedPageData) -> Result { panic!() } + fn render_users_page(&self, _: application::ports::UsersPageData) -> Result { panic!() } + fn render_profile_page(&self, _: application::ports::ProfilePageData) -> Result { panic!() } } struct PanicRssRenderer; @@ -156,7 +163,7 @@ mod tests { #[async_trait::async_trait] impl domain::ports::EventPublisher for PanicEvent { async fn publish(&self, _: &domain::events::DomainEvent) -> Result<(), domain::errors::DomainError> { panic!() } } #[async_trait::async_trait] impl domain::ports::PasswordHasher for PanicHasher { async fn hash(&self, _: &str) -> Result { panic!() } async fn verify(&self, _: &str, _: &domain::value_objects::PasswordHash) -> Result { panic!() } } #[async_trait::async_trait] impl domain::ports::AuthService for PanicAuth { async fn generate_token(&self, _: &domain::value_objects::UserId) -> Result { panic!() } async fn validate_token(&self, _: &str) -> Result { panic!() } } - #[async_trait::async_trait] impl domain::ports::UserRepository for PanicUserRepo { async fn find_by_email(&self, _: &domain::value_objects::Email) -> Result, domain::errors::DomainError> { panic!() } async fn save(&self, _: &domain::models::User) -> Result<(), domain::errors::DomainError> { panic!() } async fn find_by_id(&self, _: &domain::value_objects::UserId) -> Result, domain::errors::DomainError> { panic!() } } + #[async_trait::async_trait] impl domain::ports::UserRepository for PanicUserRepo { async fn find_by_email(&self, _: &domain::value_objects::Email) -> Result, domain::errors::DomainError> { panic!() } async fn save(&self, _: &domain::models::User) -> Result<(), domain::errors::DomainError> { panic!() } async fn find_by_id(&self, _: &domain::value_objects::UserId) -> Result, domain::errors::DomainError> { panic!() } async fn list_with_stats(&self) -> Result, domain::errors::DomainError> { panic!() } } let state = crate::state::AppState { app_ctx: AppContext { @@ -237,6 +244,10 @@ mod tests { async fn get_review_by_id(&self, _: &domain::value_objects::ReviewId) -> Result, domain::errors::DomainError> { panic!() } async fn delete_review(&self, _: &domain::value_objects::ReviewId) -> Result<(), domain::errors::DomainError> { panic!() } async fn delete_movie(&self, _: &domain::value_objects::MovieId) -> Result<(), domain::errors::DomainError> { panic!() } + async fn query_activity_feed(&self, _: &domain::models::collections::PageParams) -> Result, domain::errors::DomainError> { panic!() } + async fn get_user_stats(&self, _: &domain::value_objects::UserId) -> Result { panic!() } + async fn get_user_history(&self, _: &domain::value_objects::UserId) -> Result, domain::errors::DomainError> { panic!() } + async fn get_user_trends(&self, _: &domain::value_objects::UserId) -> Result { panic!() } } struct PanicMeta2; struct PanicFetcher2; struct PanicStorage2; struct PanicEvent2; struct PanicHasher2; struct PanicUserRepo2; #[async_trait::async_trait] impl domain::ports::MetadataClient for PanicMeta2 { async fn fetch_movie_metadata(&self, _: &domain::ports::MetadataSearchCriteria) -> Result { panic!() } async fn get_poster_url(&self, _: &domain::value_objects::ExternalMetadataId) -> Result, domain::errors::DomainError> { panic!() } } @@ -245,13 +256,16 @@ mod tests { #[async_trait::async_trait] impl domain::ports::EventPublisher for PanicEvent2 { async fn publish(&self, _: &domain::events::DomainEvent) -> Result<(), domain::errors::DomainError> { panic!() } } #[async_trait::async_trait] impl domain::ports::PasswordHasher for PanicHasher2 { async fn hash(&self, _: &str) -> Result { panic!() } async fn verify(&self, _: &str, _: &domain::value_objects::PasswordHash) -> Result { panic!() } } #[async_trait::async_trait] impl domain::ports::AuthService for PanicAuth2 { async fn generate_token(&self, _: &domain::value_objects::UserId) -> Result { panic!() } async fn validate_token(&self, _: &str) -> Result { panic!() } } - #[async_trait::async_trait] impl domain::ports::UserRepository for PanicUserRepo2 { async fn find_by_email(&self, _: &domain::value_objects::Email) -> Result, domain::errors::DomainError> { panic!() } async fn save(&self, _: &domain::models::User) -> Result<(), domain::errors::DomainError> { panic!() } async fn find_by_id(&self, _: &domain::value_objects::UserId) -> Result, domain::errors::DomainError> { panic!() } } + #[async_trait::async_trait] impl domain::ports::UserRepository for PanicUserRepo2 { async fn find_by_email(&self, _: &domain::value_objects::Email) -> Result, domain::errors::DomainError> { panic!() } async fn save(&self, _: &domain::models::User) -> Result<(), domain::errors::DomainError> { panic!() } async fn find_by_id(&self, _: &domain::value_objects::UserId) -> Result, domain::errors::DomainError> { panic!() } async fn list_with_stats(&self) -> Result, domain::errors::DomainError> { panic!() } } struct PanicRenderer2; impl crate::ports::HtmlRenderer for PanicRenderer2 { fn render_diary_page(&self, _: &domain::models::collections::Paginated, _: application::ports::HtmlPageContext) -> Result { panic!() } fn render_login_page(&self, _: application::ports::LoginPageData<'_>) -> Result { panic!() } fn render_register_page(&self, _: application::ports::RegisterPageData<'_>) -> Result { panic!() } fn render_new_review_page(&self, _: application::ports::NewReviewPageData<'_>) -> Result { panic!() } + fn render_activity_feed_page(&self, _: application::ports::ActivityFeedPageData) -> Result { panic!() } + fn render_users_page(&self, _: application::ports::UsersPageData) -> Result { panic!() } + fn render_profile_page(&self, _: application::ports::ProfilePageData) -> Result { panic!() } } struct PanicRssRenderer2; impl crate::ports::RssFeedRenderer for PanicRssRenderer2 { @@ -291,6 +305,10 @@ mod tests { async fn get_review_by_id(&self, _: &domain::value_objects::ReviewId) -> Result, domain::errors::DomainError> { panic!() } async fn delete_review(&self, _: &domain::value_objects::ReviewId) -> Result<(), domain::errors::DomainError> { panic!() } async fn delete_movie(&self, _: &domain::value_objects::MovieId) -> Result<(), domain::errors::DomainError> { panic!() } + async fn query_activity_feed(&self, _: &domain::models::collections::PageParams) -> Result, domain::errors::DomainError> { panic!() } + async fn get_user_stats(&self, _: &domain::value_objects::UserId) -> Result { panic!() } + async fn get_user_history(&self, _: &domain::value_objects::UserId) -> Result, domain::errors::DomainError> { panic!() } + async fn get_user_trends(&self, _: &domain::value_objects::UserId) -> Result { panic!() } } struct PanicMeta3; struct PanicFetcher3; struct PanicStorage3; struct PanicEvent3; struct PanicHasher3; struct PanicUserRepo3; #[async_trait::async_trait] impl domain::ports::MetadataClient for PanicMeta3 { async fn fetch_movie_metadata(&self, _: &domain::ports::MetadataSearchCriteria) -> Result { panic!() } async fn get_poster_url(&self, _: &domain::value_objects::ExternalMetadataId) -> Result, domain::errors::DomainError> { panic!() } } @@ -298,13 +316,16 @@ mod tests { #[async_trait::async_trait] impl domain::ports::PosterStorage for PanicStorage3 { async fn store_poster(&self, _: &domain::value_objects::MovieId, _: &[u8]) -> Result { panic!() } async fn get_poster(&self, _: &domain::value_objects::PosterPath) -> Result, domain::errors::DomainError> { panic!() } } #[async_trait::async_trait] impl domain::ports::EventPublisher for PanicEvent3 { async fn publish(&self, _: &domain::events::DomainEvent) -> Result<(), domain::errors::DomainError> { panic!() } } #[async_trait::async_trait] impl domain::ports::PasswordHasher for PanicHasher3 { async fn hash(&self, _: &str) -> Result { panic!() } async fn verify(&self, _: &str, _: &domain::value_objects::PasswordHash) -> Result { panic!() } } - #[async_trait::async_trait] impl domain::ports::UserRepository for PanicUserRepo3 { async fn find_by_email(&self, _: &domain::value_objects::Email) -> Result, domain::errors::DomainError> { panic!() } async fn save(&self, _: &domain::models::User) -> Result<(), domain::errors::DomainError> { panic!() } async fn find_by_id(&self, _: &domain::value_objects::UserId) -> Result, domain::errors::DomainError> { panic!() } } + #[async_trait::async_trait] impl domain::ports::UserRepository for PanicUserRepo3 { async fn find_by_email(&self, _: &domain::value_objects::Email) -> Result, domain::errors::DomainError> { panic!() } async fn save(&self, _: &domain::models::User) -> Result<(), domain::errors::DomainError> { panic!() } async fn find_by_id(&self, _: &domain::value_objects::UserId) -> Result, domain::errors::DomainError> { panic!() } async fn list_with_stats(&self) -> Result, domain::errors::DomainError> { panic!() } } struct PanicRenderer3; impl crate::ports::HtmlRenderer for PanicRenderer3 { fn render_diary_page(&self, _: &domain::models::collections::Paginated, _: application::ports::HtmlPageContext) -> Result { panic!() } fn render_login_page(&self, _: application::ports::LoginPageData<'_>) -> Result { panic!() } fn render_register_page(&self, _: application::ports::RegisterPageData<'_>) -> Result { panic!() } fn render_new_review_page(&self, _: application::ports::NewReviewPageData<'_>) -> Result { panic!() } + fn render_activity_feed_page(&self, _: application::ports::ActivityFeedPageData) -> Result { panic!() } + fn render_users_page(&self, _: application::ports::UsersPageData) -> Result { panic!() } + fn render_profile_page(&self, _: application::ports::ProfilePageData) -> Result { panic!() } } struct PanicRssRenderer3; impl crate::ports::RssFeedRenderer for PanicRssRenderer3 { diff --git a/crates/presentation/tests/api_test.rs b/crates/presentation/tests/api_test.rs index 27e06c4..f72a80f 100644 --- a/crates/presentation/tests/api_test.rs +++ b/crates/presentation/tests/api_test.rs @@ -85,6 +85,7 @@ impl UserRepository for NobodyUserRepo { async fn find_by_email(&self, _: &Email) -> Result, DomainError> { Ok(None) } async fn save(&self, _: &User) -> Result<(), DomainError> { panic!() } async fn find_by_id(&self, _: &UserId) -> Result, DomainError> { panic!() } + async fn list_with_stats(&self) -> Result, DomainError> { panic!() } } async fn test_app() -> Router {