Files
k-mood/crates/application/tests/entry/replace_activity_test.rs
Gabriel Kaszewski 23d052278a
All checks were successful
CI / ci (push) Successful in 19m38s
changes
2026-08-26 20:58:14 +02:00

83 lines
2.5 KiB
Rust

use std::sync::Arc;
use domain::activity::ActivityId;
use domain::entry::Mood;
use domain::ports::{ActivityCommandPort, MoodEntryCommandPort, MoodEntryQueryPort};
use domain::testing::{InMemoryStore, test_activity, test_entry, test_user};
use application::entry::use_cases::replace_activity;
#[tokio::test]
async fn replaces_activity_on_entries() {
let store = Arc::new(InMemoryStore::new());
let user = test_user("alice");
let old = test_activity(user.id().clone(), "gaming");
let new = test_activity(user.id().clone(), "video games");
ActivityCommandPort::save(&*store, &old).await.unwrap();
ActivityCommandPort::save(&*store, &new).await.unwrap();
let entry = test_entry(user.id().clone(), Mood::Good);
MoodEntryCommandPort::save(&*store, &entry).await.unwrap();
store.assign_activities(entry.id(), vec![old.id().clone()]);
let deps = replace_activity::Deps {
entry_command: store.clone(),
activity_query: store.clone(),
};
replace_activity::execute(user.id().clone(), old.id().clone(), new.id().clone(), &deps)
.await
.unwrap();
let now_tagged_new = store.find_by_activity(user.id(), new.id()).await.unwrap();
let still_tagged_old = store.find_by_activity(user.id(), old.id()).await.unwrap();
assert_eq!(now_tagged_new.len(), 1);
assert!(still_tagged_old.is_empty());
}
#[tokio::test]
async fn rejects_nonexistent_target_activity() {
let store = Arc::new(InMemoryStore::new());
let user = test_user("alice");
let deps = replace_activity::Deps {
entry_command: store.clone(),
activity_query: store.clone(),
};
let result = replace_activity::execute(
user.id().clone(),
ActivityId::generate(),
ActivityId::generate(),
&deps,
)
.await;
assert!(result.is_err());
}
#[tokio::test]
async fn rejects_target_owned_by_different_user() {
let store = Arc::new(InMemoryStore::new());
let alice = test_user("alice");
let bob = test_user("bob");
let bobs_activity = test_activity(bob.id().clone(), "gaming");
ActivityCommandPort::save(&*store, &bobs_activity)
.await
.unwrap();
let deps = replace_activity::Deps {
entry_command: store.clone(),
activity_query: store.clone(),
};
let result = replace_activity::execute(
alice.id().clone(),
ActivityId::generate(),
bobs_activity.id().clone(),
&deps,
)
.await;
assert!(result.is_err());
}