ktg-plugin-marketplace/plugins/ms-ai-architect/tests/test-playground-parsers.sh
Kjell Tore Guttormsen 2ad02ed002 feat(ms-ai-architect): replace playground v2 with v3 + docs update
Step 17 (Wave 5, final). Closes the v3 playground delivery (5-session run,
17 commits total).

Pre-flight tests verified passing before deletion:
- bash tests/validate-plugin.sh -> 215/215 PASS
- bash tests/run-e2e.sh --playground -> 240/240 PASS (170 + 70)

Changes:
- DELETE playground/ms-ai-architect-v3.html
- MOVE v3 content to playground/ms-ai-architect-playground.html (3867 lines).
  Replaces the deleted v2 file at the same canonical path so external
  references continue to resolve.
- UPDATE tests/test-playground-v3.sh + tests/test-playground-parsers.sh
  to point at the renamed canonical file.
- UPDATE plugin README.md (## Playground (v3) section): describes the
  4-surface decision-builder + report-viewer architecture, persistent state
  model, 17 report renderers, theme toggle, and the validation matrix.
- UPDATE plugin CLAUDE.md: replaces v2 5-step pipeline section with v3
  architecture overview. Marks docs/playground-v2-spec.md as historical-only
  (no longer the contract); points at .claude/projects/2026-05-03-playground
  -v3-architecture/ for v3 spec.
- UPDATE root README.md: marketplace listing for ms-ai-architect now
  describes v3 architecture (4 surfaces, persistence, 17 renderers, theme,
  240-test validation) and references the test command.

Verify (post-rename):
- ! test -f playground/ms-ai-architect-v3.html: pass
- test -f playground/ms-ai-architect-playground.html (>3000 lines): pass
- grep -q "v3" in plugin README + plugin CLAUDE.md + root README: pass
- bash tests/validate-plugin.sh: exit 0 (215/215)
- bash tests/run-e2e.sh --playground: exit 0 (240/240)
2026-05-03 20:16:37 +02:00

161 lines
5.9 KiB
Bash
Executable file

#!/bin/bash
# test-playground-parsers.sh — Parser-fixture-validering for Playground v3
#
# Itererer 17 forventede fixture-filer (kanonisk liste fra Step 10),
# bekrefter at de finnes og er >= 20 linjer, og bekrefter at de 14
# parser-funksjons-navnene fra archetype-routing-tabellen finnes i v3 HTML.
#
# Designet for graceful-degrade: hvis Step 10 har skipped capture, så
# kjører testen kun parser-name-grep og rapporterer pending fixtures
# som warn (ikke fail). Slik kan testen integreres tidlig.
#
# Bash 3.2-kompatibel.
set -euo pipefail
PLUGIN_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
HTML_FILE="$PLUGIN_ROOT/playground/ms-ai-architect-playground.html"
FIXTURES_DIR="$PLUGIN_ROOT/playground/test-fixtures"
# shellcheck disable=SC1091
source "$PLUGIN_ROOT/tests/lib/e2e-helpers.sh"
init_suite "Playground v3 — Parser fixtures"
# Forventede fixtures per kanonisk archetype-routing-tabell (17 stk).
# Rekkefølgen følger plan.md: 6 regulatory + 3 security + 2 economy + 6 documentation
EXPECTED_FIXTURES="classify requirements transparency frimpact conformity dpia security ros review cost license adr summary poc utredning compare migrate"
# -------------------------------------------------------
# 1. Fixtures-katalog finnes
# -------------------------------------------------------
if [ ! -d "$FIXTURES_DIR" ]; then
fail "Fixture-katalog mangler: $FIXTURES_DIR"
print_summary
exit 1
fi
pass "Fixture-katalog eksisterer: $FIXTURES_DIR"
# -------------------------------------------------------
# 2. Iterer 17 forventede fixtures, sjekk eksistens + min linjer
# -------------------------------------------------------
actual=0
expected_total=0
for cmd in $EXPECTED_FIXTURES; do
expected_total=$((expected_total + 1))
fixture="$FIXTURES_DIR/$cmd.md"
if [ -f "$fixture" ]; then
actual=$((actual + 1))
line_count=$(wc -l < "$fixture" | tr -d ' ')
if [ "${line_count:-0}" -ge 20 ]; then
pass "Fixture $cmd.md eksisterer og >= 20 linjer ($line_count)"
else
fail "Fixture $cmd.md eksisterer men < 20 linjer ($line_count)"
fi
fi
done
# Capture-status
if [ "$actual" -eq 0 ]; then
warn "Ingen fixtures kapturet ennå (Step 10 skipped). Kjører kun parser-name-grep."
elif [ "$actual" -lt "$expected_total" ]; then
warn "$actual av $expected_total fixtures kapturet. Resterende rapporteres som pending."
pending=$((expected_total - actual))
for cmd in $EXPECTED_FIXTURES; do
[ -f "$FIXTURES_DIR/$cmd.md" ] && continue
warn "Fixture pending: $cmd.md"
done
pass "Capture-status: $actual/$expected_total fixtures (graceful-degrade tillatt)"
else
pass "Alle $expected_total fixtures kapturet"
fi
# -------------------------------------------------------
# 3. Parser-funksjons-navn til stede i v3 HTML
# -------------------------------------------------------
if [ ! -f "$HTML_FILE" ]; then
fail "v3 HTML mangler: $HTML_FILE"
print_summary
exit 1
fi
pass "v3 HTML eksisterer: $HTML_FILE"
# 14 parsere fra kanonisk routing-tabell
PARSERS="parseAiAct parseRequirements parseTextDocument parseFria parseConformityChecklist parseMatrixRisk parseMatrixRisk6x5 parseFindings parseCostDistribution parseCapabilityMatrix parsePhasedPlan parseMarkdown parseVerdict parseComparison"
parser_hits=0
for p in $PARSERS; do
if grep -qE "function ${p}\b" "$HTML_FILE"; then
pass "Parser-funksjon definert: $p"
parser_hits=$((parser_hits + 1))
else
fail "Parser-funksjon mangler: $p"
fi
done
if [ "$parser_hits" -eq 14 ]; then
pass "14/14 parsere til stede i v3 HTML"
else
fail "Forventet 14 parsere, fant $parser_hits"
fi
# -------------------------------------------------------
# 4. PARSERS routing-objekt eksponert via window.__PARSERS
# -------------------------------------------------------
if grep -qE "window\.__PARSERS *=" "$HTML_FILE"; then
pass "window.__PARSERS eksponert (run-time tilgjengelig)"
else
fail "window.__PARSERS mangler"
fi
# Sjekk at hver canonical archetype er en nøkkel i PARSERS-objektet.
# Faktiske nøkler følger PARSERS-objektet i v3 HTML (ikke alle = report_archetype-verdier
# på CATALOG-commands; noen er normalisert: "aiact", "requirements-list", "capability").
ARCHETYPES="aiact requirements-list text-document fria conformity-checklist matrix-risk matrix-risk-6x5 findings cost-distribution capability phased-plan markdown verdict comparison"
arch_hits=0
for a in $ARCHETYPES; do
if grep -qE "['\"]${a}['\"] *: *parse" "$HTML_FILE"; then
pass "Archetype-routing-nøkkel: '${a}'"
arch_hits=$((arch_hits + 1))
else
fail "Archetype-routing-nøkkel mangler: '${a}'"
fi
done
if [ "$arch_hits" -eq 14 ]; then
pass "14/14 archetype-nøkler i PARSERS-routing-objektet"
else
fail "Forventet 14 archetype-nøkler, fant $arch_hits"
fi
# -------------------------------------------------------
# 5. Hver fixture indikerer korrekt arketype-treff (heuristisk)
# -------------------------------------------------------
# Hvis fixture finnes og parser-name finnes, regn det som "rute-trygg".
for cmd in $EXPECTED_FIXTURES; do
fixture="$FIXTURES_DIR/$cmd.md"
[ -f "$fixture" ] || continue
# Sjekk at fixture-filen inneholder "## "-overskrift (alle parsere bruker section-split)
if grep -qE "^## " "$fixture"; then
pass "Fixture $cmd.md har section-headers (## )"
else
fail "Fixture $cmd.md mangler section-headers"
fi
done
# -------------------------------------------------------
# 6. handlePasteImport routing-stub erstattet (Step 12 funksjonell)
# -------------------------------------------------------
if grep -qE "function handlePasteImport" "$HTML_FILE"; then
pass "handlePasteImport-funksjon definert"
else
fail "handlePasteImport-funksjon mangler"
fi
if grep -qE "window\.__handlePasteImport *=" "$HTML_FILE"; then
pass "window.__handlePasteImport eksponert"
else
fail "window.__handlePasteImport mangler"
fi
# -------------------------------------------------------
# Oppsummering
# -------------------------------------------------------
print_summary