From b88468cc0653f53453426d3a1ce6c1c97a344be5 Mon Sep 17 00:00:00 2001 From: Matteo Cherubini Date: Thu, 4 Jun 2026 10:59:09 +0200 Subject: [PATCH] test(lint,structure): Add Bats tests for linting and structure validation --- tests/lint.bats | 71 ++++++++++++++++++++++++++++++++++++++++++++ tests/structure.bats | 40 +++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 tests/lint.bats create mode 100644 tests/structure.bats diff --git a/tests/lint.bats b/tests/lint.bats new file mode 100644 index 0000000..f0b0306 --- /dev/null +++ b/tests/lint.bats @@ -0,0 +1,71 @@ +#!/usr/bin/env bats +# tests/lint.bats — lib/lint.sh validators and the scoped-lint wrapper. +load helpers + +setup() { + source "$LIB_DIR/output.sh" + source "$LIB_DIR/lint.sh" +} + +write_page() { # write_page + cat > "$1" <800-line page errors" { + G="$(make_fixture_genome)" + { write_page "$G/wiki/sources/big.md" source genome-test; yes "x" | head -n 850 >> "$G/wiki/sources/big.md"; } + run check_page_size "$G/wiki/sources/big.md" + [ "$status" -ne 0 ] +} + +@test "scoped-lint: aggregates findings and exits non-zero on errors" { + G="$(make_fixture_genome)" + write_page "$G/wiki/sources/bad.md" banana wrong-genome + cd "$G" + export KG_LIB_DIR="$LIB_DIR" + run bash "$SKILL_SCRIPTS/scoped-lint.sh" genome-test wiki/sources/bad.md + [ "$status" -ne 0 ] + [[ "$output" == *"error(s)"* ]] +} + +@test "scoped-lint: a clean page passes (exit 0)" { + G="$(make_fixture_genome)" + write_page "$G/wiki/sources/good.md" source genome-test + cd "$G" + export KG_LIB_DIR="$LIB_DIR" + run bash "$SKILL_SCRIPTS/scoped-lint.sh" genome-test wiki/sources/good.md + [ "$status" -eq 0 ] +} diff --git a/tests/structure.bats b/tests/structure.bats new file mode 100644 index 0000000..237b4e1 --- /dev/null +++ b/tests/structure.bats @@ -0,0 +1,40 @@ +#!/usr/bin/env bats +# tests/structure.bats — canonical-structure verify/sync. +load helpers + +setup() { + source "$LIB_DIR/output.sh" + source "$LIB_DIR/structure.sh" +} + +@test "structure_report: a full fixture has no drift" { + G="$(make_fixture_genome)" + run structure_report "$G" + [ "$status" -eq 0 ] +} + +@test "structure_report: flags a missing canonical dir" { + G="$(make_fixture_genome)" + rm -rf "$G/wiki/private" + run structure_report "$G" + [ "$status" -ne 0 ] + [[ "$output" == *"wiki/private"* ]] +} + +@test "structure_report: notes an extra dir but does not fail on it" { + G="$(make_fixture_genome)" + mkdir -p "$G/wiki/experiments" + run structure_report "$G" + [ "$status" -eq 0 ] + [[ "$output" == *"experiments"* ]] +} + +@test "structure_sync: creates missing dirs and is idempotent" { + G="$(make_fixture_genome)" + rm -rf "$G/wiki/private" "$G/raw/transcripts" + structure_sync "$G" + [ -d "$G/wiki/private" ] && [ -d "$G/raw/transcripts" ] + run structure_report "$G" + [ "$status" -eq 0 ] + structure_sync "$G" # second run: nothing to do +}