malvin 0.2.5

Non-interactive research and coding agent
use crate::artifacts::{
    MalvinChecksBackup, backup_workspace_malvin_checks_if_present,
    restore_workspace_malvin_checks_backup,
};
use crate::test_utils::with_isolated_home;

#[test]
fn poisoned_disk_snapshot_does_not_change_restored_workspace_content() {
    with_isolated_home(|work| {
        std::fs::create_dir_all(work.join(".malvin")).unwrap();
        std::fs::write(work.join(".malvin/gates"), "make lint\n").unwrap();
        let backup = backup_workspace_malvin_checks_if_present(work).unwrap();
        let MalvinChecksBackup::Present(payload) = &backup else {
            panic!("expected backup payload");
        };

        std::fs::write(&payload.backup_path, "make lint\nPOISONED\n").unwrap();
        std::fs::write(work.join(".malvin/gates"), "make lint\nAGENT\n").unwrap();

        restore_workspace_malvin_checks_backup(work, &backup).unwrap();
        assert_eq!(
            std::fs::read_to_string(work.join(".malvin/gates")).unwrap(),
            "make lint\n"
        );
    });
}