Verify event linking and participant-aware speaker naming round-trip (T6.6)
This commit is contained in:
@@ -0,0 +1,98 @@
|
|||||||
|
use whispassist_lib::models::{AttendeeInfo, CalendarEvent, ImportedEvent};
|
||||||
|
use whispassist_lib::storage::{NewMeeting, SqliteStore, Store};
|
||||||
|
|
||||||
|
fn fresh_store_env() {
|
||||||
|
std::env::set_var(
|
||||||
|
"LOCALAPPDATA",
|
||||||
|
std::env::temp_dir().join(format!("wa-linktest-{}", uuid::Uuid::new_v4())),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn attach_meeting_to_event_and_map_speaker_to_participant_round_trip() {
|
||||||
|
fresh_store_env();
|
||||||
|
let store = SqliteStore::connect().await.unwrap();
|
||||||
|
|
||||||
|
// Import one event with one attendee (Alice).
|
||||||
|
let imported = store
|
||||||
|
.import_calendar_events(vec![ImportedEvent {
|
||||||
|
event: CalendarEvent {
|
||||||
|
id: uuid::Uuid::new_v4().to_string(),
|
||||||
|
source: "pst".to_string(),
|
||||||
|
subject: Some("Sprint planning".to_string()),
|
||||||
|
organizer: Some("Jordan Lee".to_string()),
|
||||||
|
starts_at: Some(1_782_896_400),
|
||||||
|
ends_at: Some(1_782_900_000),
|
||||||
|
description: None,
|
||||||
|
raw_uid: Some("evt-1".to_string()),
|
||||||
|
},
|
||||||
|
attendees: vec![AttendeeInfo {
|
||||||
|
name: "Alice".to_string(),
|
||||||
|
email: Some("alice@example.com".to_string()),
|
||||||
|
role: Some("required".to_string()),
|
||||||
|
}],
|
||||||
|
}])
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(imported, 1);
|
||||||
|
|
||||||
|
// list_calendar_events surfaces it.
|
||||||
|
let events = store.list_calendar_events(None, None).await.unwrap();
|
||||||
|
assert_eq!(events.len(), 1);
|
||||||
|
let event_id = events[0].id.clone();
|
||||||
|
assert_eq!(events[0].subject.as_deref(), Some("Sprint planning"));
|
||||||
|
|
||||||
|
// get_calendar_event returns the attendee.
|
||||||
|
let detail = store.get_calendar_event(&event_id).await.unwrap();
|
||||||
|
assert_eq!(detail.participants.len(), 1);
|
||||||
|
assert_eq!(detail.participants[0].name, "Alice");
|
||||||
|
let alice_id = detail.participants[0].id.clone();
|
||||||
|
|
||||||
|
// attach_meeting_to_event errs on an unknown event id.
|
||||||
|
let meeting_id = store
|
||||||
|
.create_meeting(NewMeeting {
|
||||||
|
title: "Test meeting".to_string(),
|
||||||
|
calendar_event_id: None,
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert!(store
|
||||||
|
.attach_meeting_to_event(&meeting_id, "no-such-event")
|
||||||
|
.await
|
||||||
|
.is_err());
|
||||||
|
|
||||||
|
// ... and succeeds + is reflected in get_meeting for a real one.
|
||||||
|
store
|
||||||
|
.attach_meeting_to_event(&meeting_id, &event_id)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
let meeting = store.get_meeting(&meeting_id).await.unwrap();
|
||||||
|
assert_eq!(
|
||||||
|
meeting.calendar_event_id.as_deref(),
|
||||||
|
Some(event_id.as_str())
|
||||||
|
);
|
||||||
|
|
||||||
|
// map_speaker_to_participant sets both display_name and participant_id.
|
||||||
|
store
|
||||||
|
.map_speaker_to_participant(&meeting_id, "S1", &alice_id)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
let meeting = store.get_meeting(&meeting_id).await.unwrap();
|
||||||
|
let s1 = meeting.speakers.iter().find(|s| s.label == "S1").unwrap();
|
||||||
|
assert_eq!(s1.display_name.as_deref(), Some("Alice"));
|
||||||
|
assert_eq!(s1.participant_id.as_deref(), Some(alice_id.as_str()));
|
||||||
|
|
||||||
|
// A later free-text rename must NOT silently unlink the participant.
|
||||||
|
store
|
||||||
|
.rename_speaker(&meeting_id, "S1", "Bob")
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
let meeting = store.get_meeting(&meeting_id).await.unwrap();
|
||||||
|
let s1 = meeting.speakers.iter().find(|s| s.label == "S1").unwrap();
|
||||||
|
assert_eq!(s1.display_name.as_deref(), Some("Bob"));
|
||||||
|
assert_eq!(
|
||||||
|
s1.participant_id.as_deref(),
|
||||||
|
Some(alice_id.as_str()),
|
||||||
|
"rename_speaker must preserve an existing participant_id link"
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user