Add consolidated MVP route/read-only tests, path-filter helpers, and scripts/test-webui plus scripts/ci-webui-check for Jenkins path-filtered runs on PRs touching web UI surfaces. Closes #436
54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
"""Tests for web UI CI path-filter gate (#436)."""
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
|
|
|
|
from webui.ci_paths import should_run_webui_ci, touches_webui_surface
|
|
|
|
_REPO_ROOT = Path(__file__).resolve().parent.parent
|
|
|
|
|
|
class TestCiPathMatching(unittest.TestCase):
|
|
def test_positive_paths(self):
|
|
for path in (
|
|
"webui/app.py",
|
|
"tests/test_webui_skeleton.py",
|
|
"docs/webui-local-dev.md",
|
|
"scripts/test-webui",
|
|
):
|
|
with self.subTest(path=path):
|
|
self.assertTrue(touches_webui_surface(path))
|
|
|
|
def test_negative_paths(self):
|
|
for path in ("mcp_server.py", "tests/test_mcp_server.py", "README.md"):
|
|
with self.subTest(path=path):
|
|
self.assertFalse(touches_webui_surface(path))
|
|
|
|
def test_should_run_aggregate(self):
|
|
self.assertTrue(should_run_webui_ci(["README.md", "webui/layout.py"]))
|
|
self.assertFalse(should_run_webui_ci(["mcp_server.py", "gitea_auth.py"]))
|
|
|
|
|
|
class TestCiRunnerScript(unittest.TestCase):
|
|
def test_test_webui_smoke(self):
|
|
script = _REPO_ROOT / "scripts" / "test-webui"
|
|
result = subprocess.run(
|
|
["bash", str(script), "-q"],
|
|
cwd=_REPO_ROOT,
|
|
capture_output=True,
|
|
text=True,
|
|
timeout=60,
|
|
env={
|
|
**os.environ,
|
|
"WEBUI_TEST_PATTERN": "test_webui_skeleton.py",
|
|
},
|
|
)
|
|
self.assertEqual(result.returncode, 0, result.stderr or result.stdout)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main() |