import tempfile import unittest from pathlib import Path from agentos.workspace import WorkspaceManager class WorkspaceManagerTests(unittest.TestCase): def setUp(self) -> None: self.temporary = tempfile.TemporaryDirectory() self.manager = WorkspaceManager(Path(self.temporary.name) / "workspace") self.manager.initialize() (self.manager.current / "state.txt").write_text("base\n", encoding="utf-8") def tearDown(self) -> None: self.temporary.cleanup() def test_branch_does_not_mutate_base_and_can_commit_then_rollback(self) -> None: branch = self.manager.create_branch("worldline-1") (branch.path / "state.txt").write_text("changed\n", encoding="utf-8") (branch.path / "new.txt").write_text("new\n", encoding="utf-8") self.assertEqual((self.manager.current / "state.txt").read_text(encoding="utf-8"), "base\n") changes = self.manager.changes(branch.path) self.assertEqual({change.path for change in changes}, {"new.txt", "state.txt"}) backup = self.manager.commit_branch("worldline-1") self.assertEqual( (self.manager.current / "state.txt").read_text(encoding="utf-8"), "changed\n" ) self.assertEqual((backup / "state.txt").read_text(encoding="utf-8"), "base\n") self.manager.rollback_to("worldline-1") self.assertEqual((self.manager.current / "state.txt").read_text(encoding="utf-8"), "base\n") self.assertFalse((self.manager.current / "new.txt").exists()) def test_discard_leaves_base_unchanged(self) -> None: branch = self.manager.create_branch("worldline-2") (branch.path / "state.txt").unlink() archive = self.manager.discard_branch("worldline-2") self.assertEqual(archive, self.manager.history / "worldline-2.discarded") self.assertTrue(archive.is_dir()) self.assertFalse(branch.path.exists()) self.assertEqual((self.manager.current / "state.txt").read_text(encoding="utf-8"), "base\n") if __name__ == "__main__": unittest.main()