mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-09-17 13:42:21 +02:00
Squash Odysseus development history
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
"""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,
|
||||
}
|
||||
Reference in New Issue
Block a user