#!/usr/bin/env bats # Seam: the changed-test wrapper selects only the tests associated with # staged paths and refuses to silently run the entire suite. load helpers @test "changed-test wrapper is executable and uses staged diff by default" { [ -x "$REPO_ROOT/scripts/test-changed.sh" ] [ -x "$REPO_ROOT/.githooks/pre-commit" ] run grep -F 'scripts/test-changed.sh' "$REPO_ROOT/.githooks/pre-commit" [ "$status" -eq 0 ] run grep -F 'git diff --cached' "$REPO_ROOT/scripts/test-changed.sh" [ "$status" -eq 0 ] } @test "changed-test wrapper maps a shared config change to its service seams" { # The compose era is retired (rank 7): the former compose fixture here # mapped dankserver/compose.yaml, a file that no longer exists. The # equivalent contract now: a service config change maps to the # service's seams and nothing unrelated. run bash "$REPO_ROOT/scripts/test-changed.sh" --list --paths shared/searxng/settings.yml [ "$status" -eq 0 ] [[ "$output" == *"tests/searxng_limiter.bats"* ]] [[ "$output" == *"tests/searxng_quadlet.bats"* ]] [[ "$output" != *"tests/homepage_pages.bats"* ]] } @test "changed-test wrapper maps the frank-archon trio to its focused tests" { # The root-unit shape since the 2026-09-26 swap: the trio lives in # scripts/ and must select the unit seam before the generic # scripts/*.service fallbacks can swallow it. run bash "$REPO_ROOT/scripts/test-changed.sh" --list --paths \ scripts/frank-archon.env \ scripts/frank-archon.service \ scripts/serve-frank-archon.sh [ "$status" -eq 0 ] [[ "$output" == *"tests/frank_archon_unit.bats"* ]] [[ "$output" == *"tests/llm_units.bats"* ]] [[ "$output" == *"tests/deployment_scoping.bats"* ]] [[ "$output" != *"tests/homepage_pages.bats"* ]] # The retired trees must no longer select any LLM seam: the mappings # were removed with the services, and a stale case would keep firing # tests for archived runtimes. All three archive shapes — the radiance # Quadlet era, the llama.cpp layersplit trio, and the lucebox quadlet # dir — map to nothing. run bash "$REPO_ROOT/scripts/test-changed.sh" --list --paths \ dankserver/.AGENTTRASH/20260926-frank-medium-radiance/frank-medium.container \ scripts/.AGENTTRASH/20260920-llama-layersplit/serve-frank-medium.sh.llamacpp-layersplit \ dankserver/.AGENTTRASH/20260926-llamacpp-cutover/frank-archon.container [ "$status" -eq 0 ] [[ "$output" != *"tests/frank_medium_unit.bats"* ]] [[ "$output" != *"tests/frank_archon_unit.bats"* ]] } @test "changed-test wrapper maps the frankbook unit to the frankbook and deploy-flow seams" { run bash "$REPO_ROOT/scripts/test-changed.sh" --list --paths frankbook-pro/sonarr/quadlet/sonarr.container [ "$status" -eq 0 ] [[ "$output" == *"tests/frankbook_quadlet.bats"* ]] [[ "$output" == *"tests/deployment_flow.bats"* ]] [[ "$output" == *"tests/deployment_scoping.bats"* ]] [[ "$output" != *"tests/frank_archon_unit.bats"* ]] } @test "changed-test wrapper maps the inventory itself to its seam" { run bash "$REPO_ROOT/scripts/test-changed.sh" --list --paths shared/services.yml [ "$status" -eq 0 ] [[ "$output" == *"tests/service_inventory.bats"* ]] run bash "$REPO_ROOT/scripts/test-changed.sh" --list --paths scripts/service-map.py [ "$status" -eq 0 ] [[ "$output" == *"tests/service_inventory.bats"* ]] } @test "changed-test wrapper refuses an unmapped path" { run bash "$REPO_ROOT/scripts/test-changed.sh" --list --paths newdir/file.txt [ "$status" -eq 2 ] [[ "$output" == *"no focused-test mapping"* ]] }