59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
"""Unit: backend-neutral workspace planning."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
from bot_bottle.backend import BottleSpec
|
|
from bot_bottle.manifest import Manifest
|
|
from bot_bottle.workspace import workspace_plan
|
|
|
|
|
|
def _spec(*, copy_cwd: bool, user_cwd: str) -> BottleSpec:
|
|
manifest = Manifest.from_json_obj({
|
|
"bottles": {"dev": {}},
|
|
"agents": {"demo": {"skills": [], "prompt": "", "bottle": "dev"}},
|
|
})
|
|
return BottleSpec(
|
|
manifest=manifest,
|
|
agent_name="demo",
|
|
copy_cwd=copy_cwd,
|
|
user_cwd=user_cwd,
|
|
)
|
|
|
|
|
|
class TestWorkspacePlan(unittest.TestCase):
|
|
def test_disabled_uses_guest_home_as_workdir(self):
|
|
plan = workspace_plan(
|
|
_spec(copy_cwd=False, user_cwd="/tmp/project"),
|
|
guest_home="/home/node",
|
|
)
|
|
self.assertFalse(plan.enabled)
|
|
self.assertEqual("/home/node", plan.guest_path)
|
|
self.assertEqual("/home/node", plan.workdir)
|
|
|
|
def test_enabled_uses_workspace_under_guest_home(self):
|
|
plan = workspace_plan(
|
|
_spec(copy_cwd=True, user_cwd="/tmp/project"),
|
|
guest_home="/guest/home",
|
|
)
|
|
self.assertTrue(plan.enabled)
|
|
self.assertEqual(Path("/tmp/project"), plan.host_path)
|
|
self.assertEqual("/guest/home/workspace", plan.guest_path)
|
|
self.assertEqual("/guest/home/workspace", plan.workdir)
|
|
|
|
def test_detects_host_git_dir(self):
|
|
with tempfile.TemporaryDirectory(prefix="bb-workspace.") as tmp:
|
|
Path(tmp, ".git").mkdir()
|
|
plan = workspace_plan(
|
|
_spec(copy_cwd=True, user_cwd=tmp),
|
|
guest_home="/home/node",
|
|
)
|
|
self.assertTrue(plan.has_host_git_dir)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|