From 28c93a62487545428ba9314bd3e639f35e48d2c0 Mon Sep 17 00:00:00 2001 From: daladim Date: Sat, 3 Apr 2021 00:25:55 +0200 Subject: [PATCH] [tests] Adding actual scenarii --- tests/scenarii.rs | 286 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 286 insertions(+) diff --git a/tests/scenarii.rs b/tests/scenarii.rs index 2b12d32..3542f0e 100644 --- a/tests/scenarii.rs +++ b/tests/scenarii.rs @@ -74,7 +74,293 @@ pub struct ItemScenario { pub fn basic_scenarii() -> Vec { let mut tasks = Vec::new(); + let main_cal = CalendarId::from("https://some.calend.ar/main/".parse().unwrap()); + tasks.push( + ItemScenario { + id: ItemId::random(), + before_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task A"), + completed: false, + }), + local_changes_to_apply: Vec::new(), + remote_changes_to_apply: Vec::new(), + after_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task A"), + completed: false, + }), + } + ); + + tasks.push( + ItemScenario { + id: ItemId::random(), + before_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task B"), + completed: false, + }), + local_changes_to_apply: Vec::new(), + remote_changes_to_apply: vec![ChangeToApply::Remove], + after_sync: LocatedState::None, + } + ); + + tasks.push( + ItemScenario { + id: ItemId::random(), + before_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task C"), + completed: false, + }), + local_changes_to_apply: vec![ChangeToApply::Remove], + remote_changes_to_apply: Vec::new(), + after_sync: LocatedState::None, + } + ); + + tasks.push( + ItemScenario { + id: ItemId::random(), + before_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task D"), + completed: false, + }), + local_changes_to_apply: vec![ChangeToApply::Rename(String::from("Task D, locally renamed"))], + remote_changes_to_apply: Vec::new(), + after_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task D, locally renamed"), + completed: false, + }), + } + ); + + tasks.push( + ItemScenario { + id: ItemId::random(), + before_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task E"), + completed: false, + }), + local_changes_to_apply: Vec::new(), + remote_changes_to_apply: vec![ChangeToApply::Rename(String::from("Task E, remotely renamed"))], + after_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task E, remotely renamed"), + completed: false, + }), + } + ); + + tasks.push( + ItemScenario { + id: ItemId::random(), + before_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task F"), + completed: false, + }), + local_changes_to_apply: vec![ChangeToApply::Rename(String::from("Task F, locally renamed"))], + remote_changes_to_apply: vec![ChangeToApply::Rename(String::from("Task F, remotely renamed"))], + // Conflict: the server wins + after_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task F, remotely renamed"), + completed: false, + }), + } + ); + + tasks.push( + ItemScenario { + id: ItemId::random(), + before_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task G"), + completed: false, + }), + local_changes_to_apply: Vec::new(), + remote_changes_to_apply: vec![ChangeToApply::SetCompletion(true)], + after_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task G"), + completed: true, + }), + } + ); + + tasks.push( + ItemScenario { + id: ItemId::random(), + before_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task H"), + completed: false, + }), + local_changes_to_apply: vec![ChangeToApply::SetCompletion(true)], + remote_changes_to_apply: Vec::new(), + after_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task H"), + completed: true, + }), + } + ); + + tasks.push( + ItemScenario { + id: ItemId::random(), + before_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task I"), + completed: false, + }), + local_changes_to_apply: vec![ChangeToApply::SetCompletion(true)], + remote_changes_to_apply: vec![ChangeToApply::Rename(String::from("Task I, remotely renamed"))], + // Conflict, the server wins + after_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task I, remotely renamed"), + completed: false, + }), + } + ); + + tasks.push( + ItemScenario { + id: ItemId::random(), + before_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task J"), + completed: false, + }), + local_changes_to_apply: vec![ChangeToApply::SetCompletion(true)], + remote_changes_to_apply: vec![ChangeToApply::Remove], + after_sync: LocatedState::None, + } + ); + + tasks.push( + ItemScenario { + id: ItemId::random(), + before_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task K"), + completed: false, + }), + local_changes_to_apply: vec![ChangeToApply::Remove], + remote_changes_to_apply: vec![ChangeToApply::SetCompletion(true)], + after_sync: LocatedState::None, + } + ); + + tasks.push( + ItemScenario { + id: ItemId::random(), + before_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task L"), + completed: false, + }), + local_changes_to_apply: vec![ChangeToApply::Remove], + remote_changes_to_apply: vec![ChangeToApply::Remove], + after_sync: LocatedState::None, + } + ); + + tasks.push( + ItemScenario { + id: ItemId::random(), + before_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task M"), + completed: true, + }), + local_changes_to_apply: vec![ChangeToApply::SetCompletion(false)], + remote_changes_to_apply: Vec::new(), + after_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task M"), + completed: false, + }), + } + ); + + tasks.push( + ItemScenario { + id: ItemId::random(), + before_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task N"), + completed: true, + }), + local_changes_to_apply: Vec::new(), + remote_changes_to_apply: vec![ChangeToApply::SetCompletion(false)], + after_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task N"), + completed: false, + }), + } + ); + + tasks.push( + ItemScenario { + id: ItemId::random(), + before_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task O"), + completed: true, + }), + local_changes_to_apply: vec![ChangeToApply::SetCompletion(false)], + remote_changes_to_apply: vec![ChangeToApply::SetCompletion(false)], + after_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task O"), + completed: false, + }), + } + ); + + let id_p = ItemId::random(); + tasks.push( + ItemScenario { + id: id_p.clone(), + before_sync: LocatedState::None, + local_changes_to_apply: vec![ChangeToApply::Create(main_cal.clone(), Item::Task( + Task::new(String::from("Task P, created locally"), id_p, SyncStatus::NotSynced, false ) + ))], + remote_changes_to_apply: Vec::new(), + after_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task P, created locally"), + completed: false, + }), + } + ); + + let id_q = ItemId::random(); + tasks.push( + ItemScenario { + id: id_q.clone(), + before_sync: LocatedState::None, + local_changes_to_apply: Vec::new(), + remote_changes_to_apply: vec![ChangeToApply::Create(main_cal.clone(), Item::Task( + Task::new(String::from("Task Q, created on the server"), id_q, SyncStatus::random_synced(), false ) + ))], + after_sync: LocatedState::BothSynced( ItemState{ + calendar: main_cal.clone(), + name: String::from("Task Q, created on the server"), + completed: false, + }), + } + ); tasks }