fix: NewRemoteReview param struct, atomic review+orphan movie delete

This commit is contained in:
2026-10-26 01:19:09 +01:00
parent 9a4d0c1714
commit 7f9c252d35
18 changed files with 261 additions and 116 deletions

View File

@@ -517,3 +517,61 @@ async fn saving_a_watch_event_records_its_events() {
assert_eq!(store.rows_in("watch_events"), 1);
assert_eq!(store.recorded_events().len(), 1);
}
#[tokio::test]
async fn deleting_the_last_review_removes_the_movie_and_records_both_events() {
let store = InMemoryStore::new();
let (movie, user_id) = seed_movie_with_dependents(&store, true).await;
let review = store
.get_all_reviews_for_user(&user_id)
.await
.unwrap()
.remove(0);
store
.delete_review_and_orphaned_movie(
review.id(),
movie.id(),
&[domain::events::DomainEvent::ReviewDeleted {
review_id: review.id().clone(),
user_id: user_id.clone(),
}],
&[movie_deleted(&movie)],
)
.await
.unwrap();
assert_eq!(store.review_count(), 0);
assert_eq!(store.movie_count(), 0);
assert_eq!(store.recorded_events().len(), 2);
}
#[tokio::test]
async fn deleting_a_review_while_another_remains_keeps_the_movie_and_records_one_event() {
let store = InMemoryStore::new();
let (movie, user_id) = seed_movie_with_dependents(&store, true).await;
let review = store
.get_all_reviews_for_user(&user_id)
.await
.unwrap()
.remove(0);
let other = test_review(movie.id(), &UserId::generate(), 3);
store.save_review(&other, &[]).await.unwrap();
store
.delete_review_and_orphaned_movie(
review.id(),
movie.id(),
&[domain::events::DomainEvent::ReviewDeleted {
review_id: review.id().clone(),
user_id: user_id.clone(),
}],
&[movie_deleted(&movie)],
)
.await
.unwrap();
assert_eq!(store.review_count(), 1);
assert_eq!(store.movie_count(), 1);
assert_eq!(store.recorded_events().len(), 1);
}