66 lines
2.6 KiB
Python
66 lines
2.6 KiB
Python
"""Studio 三个 HTTP 入口的物理路径合同。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pathlib
|
|
import unittest
|
|
from unittest import mock
|
|
|
|
|
|
ROOT = next(
|
|
parent
|
|
for parent in (pathlib.Path(__file__).resolve().parent, *pathlib.Path(__file__).resolve().parents)
|
|
if (parent / "AGENTS.md").is_file() and (parent / ".git").exists()
|
|
)
|
|
if str(ROOT) not in __import__("sys").path:
|
|
__import__("sys").path.insert(0, str(ROOT))
|
|
|
|
|
|
class StudioPathContractTest(unittest.TestCase):
|
|
def test_studio入口都解析到独立仓根并能加载业务脚本(self) -> None:
|
|
from muse.authority.studio.read import server
|
|
from muse.authority.studio.write.decision import decision_channel
|
|
from muse.authority.studio.write.lesson import lesson_confirm
|
|
|
|
self.assertEqual(server.PROJECT_ROOT, ROOT)
|
|
self.assertEqual(
|
|
server.WRITE_CHAPTER_ARTIFACTS,
|
|
ROOT / "docs" / "write-chapter" / "artifacts",
|
|
)
|
|
self.assertEqual(decision_channel.PROJECT_ROOT, ROOT)
|
|
self.assertTrue(
|
|
(ROOT / "muse" / "content" / "work" / "skills" / "sovereignty" / "decide-candidate" / "scripts" / "write_canonical.py").is_file()
|
|
)
|
|
self.assertEqual(lesson_confirm.PROJECT_ROOT, ROOT)
|
|
self.assertEqual(
|
|
lesson_confirm.EVIDENCE,
|
|
ROOT / "muse" / "authority" / "evidence" / "skills" / "record-run-evidence" / "scripts",
|
|
)
|
|
|
|
def test写通道页面具备地标和键盘可达正文滚动区(self) -> None:
|
|
from muse.authority.studio.write.decision import decision_channel
|
|
from muse.authority.studio.write.lesson import lesson_confirm
|
|
|
|
decision_page = decision_channel._page("测试", "<pre>正文</pre>")
|
|
lesson_page = lesson_confirm._page("测试", "<pre>详情</pre>")
|
|
self.assertIn("<main>", decision_page)
|
|
self.assertIn("<main>", lesson_page)
|
|
with mock.patch.object(
|
|
decision_channel, "_load_candidate", return_value={
|
|
"id": 1, "work_id": 1, "chapter": 1, "run_id": "run",
|
|
"attempt": 1, "run_type": "production", "version": "1",
|
|
"sha256": "a" * 64, "body": "正文", "state": "passed",
|
|
"semantic": "passed", "create_time": "now",
|
|
}
|
|
):
|
|
candidate_page = decision_channel.view_candidate(1)
|
|
self.assertIn("tabindex='0'", candidate_page)
|
|
self.assertIn(
|
|
"--muted:#6b6a65",
|
|
(ROOT / "muse" / "authority" / "studio" / "read" / "server.py").read_text(encoding="utf-8"),
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main(verbosity=2)
|