"""Tests use fresh temporary directories, never scientific project data.""" import gzip import json from pathlib import Path import subprocess import sys import tempfile import unittest TOOL = Path(__file__).with_name("repository_audit.py") class AuditTests(unittest.TestCase): def test_snapshot_detects_change_and_addition(self): with tempfile.TemporaryDirectory(prefix="drosophila-audit-test-") as tmp: root = Path(tmp) (root / "datasets").mkdir() (root / "datasets/a.bin").write_bytes(b"raw\0data") (root / "datasets/.venv").mkdir() (root / "datasets/.venv/excluded").write_bytes(b"environment") snap = root / "snapshot" cmd = [sys.executable, "-B", str(TOOL), "--root", str(root)] subprocess.run(cmd+["snapshot", "--output", str(snap)], check=True, capture_output=True) with gzip.open(snap / "files.jsonl.gz", "rt") as f: self.assertEqual(len([json.loads(x) for x in f]), 1) self.assertEqual(subprocess.run(cmd+["verify", "--snapshot", str(snap)], capture_output=True).returncode, 0) self.assertNotEqual(subprocess.run(cmd+["snapshot", "--output", str(snap)], capture_output=True).returncode, 0) (root / "datasets/a.bin").write_bytes(b"changed!") (root / "datasets/new.bin").write_bytes(b"new") check = subprocess.run(cmd+["verify", "--snapshot", str(snap)], capture_output=True) result = json.loads(check.stdout) self.assertEqual(check.returncode, 1) self.assertEqual(result["added"], ["datasets/new.bin"]) self.assertEqual(result["mismatches"][0]["path"], "datasets/a.bin") if __name__ == "__main__": unittest.main()