diff --git a/pttodoer/src/main.rs b/pttodoer/src/main.rs index cf0210f..08ae15c 100644 --- a/pttodoer/src/main.rs +++ b/pttodoer/src/main.rs @@ -244,24 +244,32 @@ mod test_db { use super::*; #[test] - fn conflicting_save_fails() { + fn conflicting_save_handled() { + use std::ops::Add; + let d = TempDir::new(&TS::now().to_string()).expect("failed to create a temp dir"); let d = d.path().display().to_string(); - + let p = format!("{}/f", &d); { - let p = format!("{}/f", &d); - eprintln!("p={}", p); - let mut f = std::fs::File::create(p).expect("failed to create a file in cwd"); + let mut f = std::fs::File::create(p.clone()).expect("failed to create a file in cwd"); f.write_all(b"- x").expect("failed to create a file"); } let mut db = DB::new(d.clone()).expect("failed to open tempd"); assert_eq!(1, db.tasks_and_metadatas[0].tasks.len()); - db.tasks_and_metadatas[0].tasks.0.push(Task::new()); - let stale_db = db.clone(); - db.save(false).expect("failed to save db with new task"); - assert_eq!(false, stale_db.save(false).is_ok()); + std::fs::File::open(p) + .expect("failed to open file to change modtime") + .set_modified(std::time::SystemTime::now().add(std::time::Duration::new(10, 0))) + .expect("failed to change modtime"); + + db.tasks_and_metadatas[0].tasks.0.push(Task::new()); + db.save(false).expect("save as conflicting update shouldve saved as a different file"); + + let db = DB::new(d.clone()).expect("failed to open tempd again"); + assert_eq!(2, db.tasks_and_metadatas.len()); + assert_eq!(1, db.tasks_and_metadatas[0].tasks.len()); + assert_eq!(2, db.tasks_and_metadatas[1].tasks.len()); }