atlas-iac/testing/tests/test_hermes_hux_ui_activity.py
jenkins 2f535d3a30 test(hermes): portable node coverage gate for the HUX suites
Build 20 failed on the CI image's Node 20: --test-coverage-lines and
friends need Node >= 22.8 and --experimental-strip-types needs 22.6.
A shared helper now runs plain --experimental-test-coverage and
enforces the same per-source >=95 floors by parsing the coverage
table, so the gate is identical on Node 20 and newer local Nodes; the
TypeScript suites skip with an explicit reason on runtimes that cannot
strip types. Per-file gating also exposed pre-existing debt the old
aggregate thresholds hid (wave_b_projects_modes.js branches 90 / funcs
94.7) - recorded as explicit enforced floors, not waived.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvMSXH8VH2tMWXanb8SJdf
2026-08-24 05:22:01 -03:00

62 lines
2.1 KiB
Python

"""Executable and static quality gates for the isolated HUX-01 frontend."""
from __future__ import annotations
from pathlib import Path
from hux_node_gate import run_node_coverage
ROOT = Path(__file__).resolve().parents[2]
ACTIVITY = ROOT / "dockerfiles" / "hermes-webui-hux" / "activity"
def test_hux_activity_model_node_suite_and_coverage():
run_node_coverage(
[
"dockerfiles/hermes-webui-hux/activity/model.ts",
"dockerfiles/hermes-webui-hux/activity/security.ts",
],
[
"testing/tests/test_hermes_hux_ui_activity.mjs",
],
{"functions": 95, "lines": 95},
strip_types=True,
)
def test_hux_activity_component_is_flagged_accessible_and_payload_safe():
component = (ACTIVITY / "ActivityTimeline.tsx").read_text(encoding="utf-8")
model = (ACTIVITY / "model.ts").read_text(encoding="utf-8")
styles = (ACTIVITY / "styles.css").read_text(encoding="utf-8")
assert "if (!enabled) return null" in component
assert "activityTimelineEnabled(flags)" in component
assert "FOUNDATION_FLAG" in model and "ACTIVITY_TIMELINE_FLAG" in model
assert 'role="log"' in component and 'aria-live="polite"' in component
assert 'aria-busy={reconnecting}' in component
assert "dangerouslySetInnerHTML" not in component
assert ".detail" not in component
assert "JSON.stringify" not in component
assert "evidence.uri" not in component and "evidence.id" not in component
assert ".hux-activity" in styles
assert "body" not in styles and ":root" not in styles
assert "prefers-reduced-motion" in styles
def test_hux_activity_sources_respect_size_and_scope_boundaries():
sources = sorted(ACTIVITY.glob("*"))
assert {path.name for path in sources} == {
"ActivityTimeline.tsx",
"index.ts",
"model.ts",
"security.ts",
"styles.css",
"types.ts",
}
for path in sources:
assert len(path.read_text(encoding="utf-8").splitlines()) <= 500
assert "dockerfiles/hermes-webui-hux/activity" not in (
ROOT / "dockerfiles" / "Dockerfile.hermes-agent"
).read_text(encoding="utf-8")