add test for syncing deletes and creates

This commit is contained in:
Dustin J. Mitchell 2019-12-29 13:37:50 -05:00
parent 41acb1fa1e
commit 04f6b1d421
2 changed files with 54 additions and 1 deletions

View file

@ -12,4 +12,4 @@
- need to be sure that create / delete operations don't get reversed
* cli tools
* prop testing for DB modifications
- 'strict' mode to fail on application of any nonsense operations
- generate a non-failing sequence of operations with syncs interspersed

View file

@ -61,3 +61,56 @@ fn test_sync() {
db1.sync("me", &mut server);
assert_eq!(db1.tasks(), db2.tasks());
}
#[test]
fn test_sync_create_delete() {
let mut server = Server::new();
let mut db1 = DB::new();
db1.sync("me", &mut server);
let mut db2 = DB::new();
db2.sync("me", &mut server);
// create and update a task..
let uuid = Uuid::new_v4();
db1.apply(Operation::Create { uuid }).unwrap();
db1.apply(Operation::Update {
uuid: uuid,
property: "title".into(),
value: Some("my first task".into()),
timestamp: Utc::now(),
})
.unwrap();
// and synchronize those around
db1.sync("me", &mut server);
db2.sync("me", &mut server);
db1.sync("me", &mut server);
assert_eq!(db1.tasks(), db2.tasks());
// delete and re-create the task on db1
db1.apply(Operation::Delete { uuid }).unwrap();
db1.apply(Operation::Create { uuid }).unwrap();
db1.apply(Operation::Update {
uuid: uuid,
property: "title".into(),
value: Some("my second task".into()),
timestamp: Utc::now(),
})
.unwrap();
// and on db2, update a property of the task
db2.apply(Operation::Update {
uuid: uuid,
property: "project".into(),
value: Some("personal".into()),
timestamp: Utc::now(),
})
.unwrap();
db1.sync("me", &mut server);
db2.sync("me", &mut server);
db1.sync("me", &mut server);
assert_eq!(db1.tasks(), db2.tasks());
}