use std::fs;
use closure_app::core::sync::sync_dirs;
use tempfile::TempDir;

#[test]
fn test_sync_bidirectional() {
    let src = TempDir::new().unwrap();
    let dst = TempDir::new().unwrap();

    fs::write(src.path().join("a.txt"), "src-a").unwrap();
    std::thread::sleep(std::time::Duration::from_millis(50));
    fs::write(dst.path().join("a.txt"), "dst-a").unwrap();

    fs::write(dst.path().join("b.txt"), "dst-b").unwrap();
    std::thread::sleep(std::time::Duration::from_millis(50));
    fs::write(src.path().join("b.txt"), "src-b").unwrap();

    fs::write(src.path().join("c.txt"), "src-c").unwrap();
    fs::write(dst.path().join("d.txt"), "dst-d").unwrap();

    sync_dirs(src.path(), dst.path()).unwrap();

    assert_eq!(fs::read_to_string(src.path().join("a.txt")).unwrap(), "dst-a");
    assert_eq!(fs::read_to_string(dst.path().join("a.txt")).unwrap(), "dst-a");

    assert_eq!(fs::read_to_string(src.path().join("b.txt")).unwrap(), "src-b");
    assert_eq!(fs::read_to_string(dst.path().join("b.txt")).unwrap(), "src-b");

    assert_eq!(fs::read_to_string(dst.path().join("c.txt")).unwrap(), "src-c");
    assert_eq!(fs::read_to_string(src.path().join("d.txt")).unwrap(), "dst-d");
}
