49 lines
2.0 KiB
Python
49 lines
2.0 KiB
Python
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()
|