fix: CI lint — config-ai-keys.test.mjs rejoint l'étape JSDOM (complément BUG-082)
This commit is contained in:
+38
-12
@@ -9,6 +9,7 @@ import re
|
||||
from pathlib import Path
|
||||
|
||||
CI_YML = Path(__file__).resolve().parent.parent / ".gitea" / "workflows" / "ci.yml"
|
||||
REPO_ROOT = Path(__file__).resolve().parent.parent
|
||||
|
||||
|
||||
def _run_bodies() -> list[tuple[int, str]]:
|
||||
@@ -60,19 +61,44 @@ class TestRunnerProofScripts:
|
||||
)
|
||||
|
||||
|
||||
class TestUploadInJsdomStep:
|
||||
def test_upload_runs_with_jsdom_available(self):
|
||||
"""BUG-082 : `upload.test.mjs` (import statique `jsdom`) ne tourne
|
||||
que dans l'étape JSDOM, où `tests/frontend/node_modules` existe."""
|
||||
class TestFrontendStepsHaveTheirDeps:
|
||||
@staticmethod
|
||||
def _root_step_files() -> list[str]:
|
||||
"""Fichiers `node tests/frontend/<f>` de l'étape racine (sans jsdom)."""
|
||||
text = CI_YML.read_text(encoding="utf-8")
|
||||
assert "Frontend JSDOM tests" in text
|
||||
root_part, jsdom_part = text.split("Frontend JSDOM tests", 1)
|
||||
root_part = text.split("Frontend JSDOM tests", 1)[0]
|
||||
root_steps = root_part.split("Frontend unit tests", 1)[1]
|
||||
assert "upload.test" not in root_steps, (
|
||||
"BUG-082 : `upload.test.mjs` ne doit pas tourner dans l'étape "
|
||||
"racine (jsdom indisponible)"
|
||||
return re.findall(r"node tests/frontend/(\S+\.mjs)", root_steps)
|
||||
|
||||
@staticmethod
|
||||
def _has_static_jsdom_import(rel: str) -> bool:
|
||||
path = REPO_ROOT / "tests" / "frontend" / rel
|
||||
return any(
|
||||
re.match(r"^\s*import\b.*\bfrom\s+['\"]jsdom['\"]", line)
|
||||
or re.match(r"""\brequire\(\s*['"]jsdom['"]\s*\)""", line)
|
||||
for line in path.read_text(encoding="utf-8").splitlines()
|
||||
)
|
||||
assert jsdom_part.count("node upload.test.mjs") >= 2, (
|
||||
"BUG-082 : `node upload.test.mjs` attendu dans les deux branches "
|
||||
"de l'étape JSDOM"
|
||||
|
||||
def test_root_step_files_need_no_jsdom(self):
|
||||
"""BUG-082 : l'étape racine tourne sans `tests/frontend/node_modules`
|
||||
(installé seulement par l'étape JSDOM) : aucun de ses fichiers ne
|
||||
doit importer `jsdom` statiquement — sinon `ERR_MODULE_NOT_FOUND`
|
||||
et `lint` rouge (cas `upload.test.mjs`, puis `config-ai-keys.test.mjs`).
|
||||
"""
|
||||
offenders = [f for f in self._root_step_files() if self._has_static_jsdom_import(f)]
|
||||
assert not offenders, (
|
||||
"BUG-082 : ces fichiers importent `jsdom` mais tournent dans "
|
||||
"l'étape racine (sans node_modules) — les déplacer dans l'étape "
|
||||
f"JSDOM :\n" + "\n".join(offenders)
|
||||
)
|
||||
|
||||
def test_jsdom_dependent_tests_run_in_jsdom_step(self):
|
||||
"""BUG-082 : les suites à import statique `jsdom` tournent bien dans
|
||||
l'étape JSDOM (les deux branches)."""
|
||||
text = CI_YML.read_text(encoding="utf-8")
|
||||
jsdom_part = text.split("Frontend JSDOM tests", 1)[1]
|
||||
for suite in ("node upload.test.mjs", "node config-ai-keys.test.mjs"):
|
||||
assert jsdom_part.count(suite) >= 2, (
|
||||
f"BUG-082 : `{suite}` attendu dans les deux branches de "
|
||||
"l'étape JSDOM"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user