70 lines
2.6 KiB
Python
70 lines
2.6 KiB
Python
import json
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
from modules.host_workspace_manager import (
|
|
create_host_workspace,
|
|
load_host_workspace_catalog,
|
|
resolve_host_workspace,
|
|
)
|
|
|
|
|
|
class HostWorkspaceManagerTest(unittest.TestCase):
|
|
def test_create_default_when_config_missing(self):
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
cfg = Path(tmpdir) / "host_workspaces.json"
|
|
self.assertFalse(cfg.exists())
|
|
catalog = load_host_workspace_catalog(config_path=cfg)
|
|
self.assertTrue(cfg.exists())
|
|
self.assertTrue(catalog["workspaces"])
|
|
self.assertEqual(catalog["default_workspace_id"], catalog["workspaces"][0]["workspace_id"])
|
|
|
|
def test_resolve_selected_workspace(self):
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
ws_a = Path(tmpdir) / "a"
|
|
ws_b = Path(tmpdir) / "b"
|
|
payload = {
|
|
"default_workspace_id": "a",
|
|
"workspaces": [
|
|
{"workspace_id": "a", "label": "A", "path": str(ws_a)},
|
|
{"workspace_id": "b", "label": "B", "path": str(ws_b)},
|
|
],
|
|
}
|
|
cfg = Path(tmpdir) / "host_workspaces.json"
|
|
cfg.write_text(json.dumps(payload, ensure_ascii=False), encoding="utf-8")
|
|
|
|
_, current = resolve_host_workspace("b", config_path=cfg)
|
|
self.assertEqual(current["workspace_id"], "b")
|
|
|
|
_, current_fallback = resolve_host_workspace("not-exist", config_path=cfg)
|
|
self.assertEqual(current_fallback["workspace_id"], "a")
|
|
|
|
def test_create_workspace_persisted(self):
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
cfg = Path(tmpdir) / "host_workspaces.json"
|
|
cfg.write_text(
|
|
json.dumps(
|
|
{
|
|
"default_workspace_id": "default",
|
|
"workspaces": [
|
|
{"workspace_id": "default", "label": "默认", "path": str(Path(tmpdir) / "project")}
|
|
],
|
|
},
|
|
ensure_ascii=False,
|
|
),
|
|
encoding="utf-8",
|
|
)
|
|
|
|
result = create_host_workspace(str(Path(tmpdir) / "repo-a"), label="Repo A", config_path=cfg)
|
|
self.assertTrue(result["created"])
|
|
self.assertEqual(result["workspace"]["label"], "Repo A")
|
|
|
|
catalog = load_host_workspace_catalog(config_path=cfg)
|
|
labels = [item["label"] for item in catalog["workspaces"]]
|
|
self.assertIn("Repo A", labels)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|