mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-08-26 10:54:18 +02:00
* refactor(settings): add modular shell primitives * refactor(settings): wire modular shell * test(settings): exercise real coordinator ESM boundary * refactor(settings): add registry-backed settings finder * fix(settings): harden registry navigation behavior
117 lines
3.3 KiB
Python
117 lines
3.3 KiB
Python
"""Behavioral coverage for the modular Settings shell.
|
|
|
|
The leaf harness provides focused assertions around the extracted navigation
|
|
and lifecycle primitives. The coordinator smoke separately loads the real
|
|
settings.js module through Node's native ESM linker together with the real
|
|
Settings shell modules, covering their import/export contract and the public
|
|
open/close wiring.
|
|
"""
|
|
|
|
import json
|
|
import re
|
|
import shutil
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
|
|
_REPO = Path(__file__).resolve().parent.parent
|
|
_LEAF_HELPER = _REPO / "tests" / "helpers" / "test_settings_shell.js"
|
|
_COORDINATOR_HELPER = (
|
|
_REPO / "tests" / "helpers" / "test_settings_shell_coordinator.mjs"
|
|
)
|
|
_HAS_NODE = shutil.which("node") is not None
|
|
_STYLE = _REPO / "static" / "style.css"
|
|
|
|
|
|
def test_settings_desktop_width_targets_settings_not_cookbook():
|
|
source = _STYLE.read_text(encoding="utf-8")
|
|
|
|
settings_rule = re.search(
|
|
r"(?ms)^\.settings-modal-content\s*\{[^}]*"
|
|
r"width:\s*min\(1040px,\s*94vw\);[^}]*\}",
|
|
source,
|
|
)
|
|
cookbook_rule = re.search(
|
|
r"(?ms)^\.cookbook-edit-modal\s*\{[^}]*"
|
|
r"width:\s*min\(720px,\s*92vw\);[^}]*\}",
|
|
source,
|
|
)
|
|
cookbook_wrong_width = re.search(
|
|
r"(?ms)^\.cookbook-edit-modal\s*\{[^}]*"
|
|
r"width:\s*min\(1040px,\s*94vw\);[^}]*\}",
|
|
source,
|
|
)
|
|
|
|
assert settings_rule is not None, (
|
|
"The standalone .settings-modal-content rule must carry the "
|
|
"1040px/94vw desktop width"
|
|
)
|
|
assert cookbook_rule is not None, (
|
|
"The standalone .cookbook-edit-modal rule must retain its "
|
|
"720px/92vw width"
|
|
)
|
|
assert cookbook_wrong_width is None, (
|
|
"The Settings desktop width must not leak into Cookbook"
|
|
)
|
|
|
|
|
|
def _run_node(*args: str) -> subprocess.CompletedProcess[str]:
|
|
return subprocess.run(
|
|
["node", *args],
|
|
cwd=str(_REPO),
|
|
capture_output=True,
|
|
text=True,
|
|
encoding="utf-8",
|
|
timeout=30,
|
|
)
|
|
|
|
|
|
@pytest.mark.skipif(not _HAS_NODE, reason="node binary not on PATH")
|
|
def test_settings_shell_leaf_behavior():
|
|
proc = _run_node(str(_LEAF_HELPER))
|
|
|
|
assert proc.returncode == 0, (
|
|
f"Node execution error:\nSTDERR:\n{proc.stderr}\nSTDOUT:\n{proc.stdout}"
|
|
)
|
|
|
|
results = json.loads(proc.stdout.strip())
|
|
|
|
assert results, "Settings shell leaf harness returned no assertions"
|
|
|
|
for result in results:
|
|
assert result["pass"] is True, (
|
|
f"Failed JS behavioral test: {result['test']}"
|
|
+ (
|
|
f" ({result.get('detail')})"
|
|
if result.get("detail")
|
|
else ""
|
|
)
|
|
)
|
|
|
|
|
|
@pytest.mark.skipif(not _HAS_NODE, reason="node binary not on PATH")
|
|
def test_settings_shell_real_esm_coordinator():
|
|
proc = _run_node(
|
|
"--experimental-vm-modules",
|
|
str(_COORDINATOR_HELPER),
|
|
)
|
|
|
|
assert proc.returncode == 0, (
|
|
"Real Settings coordinator smoke failed:\n"
|
|
f"STDERR:\n{proc.stderr}\n"
|
|
f"STDOUT:\n{proc.stdout}"
|
|
)
|
|
|
|
result = json.loads(proc.stdout.strip())
|
|
|
|
assert result == {
|
|
"realEsmGraph": True,
|
|
"initialization": True,
|
|
"finderBinding": True,
|
|
"sidebarBinding": True,
|
|
"navigationCallback": True,
|
|
"directOpen": True,
|
|
"directClose": True,
|
|
}
|