#!/usr/bin/env bats setup() { REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../../../../../" && pwd)" load "$REPO_ROOT/tests/test_helper/bats-support/load" load "$REPO_ROOT/tests/test_helper/bats-assert/load" SCRIPT="$(cd "$(dirname "$BATS_TEST_FILENAME")" && pwd)/validate.sh" TMPDIR="$(mktemp -d)" # Helper: create a minimal valid skill directory make_valid_skill() { local dir="$1" local name name="$(basename "$dir")" mkdir -p "$dir/scripts" cat > "$dir/SKILL.md" <> "$skill/SKILL.md" run bash "$SCRIPT" "$skill" assert_success } @test "passes at exactly 1024-char description" { local skill="$TMPDIR/my-skill" local name name="$(basename "$skill")" mkdir -p "$skill" local desc desc="$(python3 -c "print('x' * 1024)")" cat > "$skill/SKILL.md" <> "$skill/SKILL.md" run bash "$SCRIPT" "$skill" assert_success } # --------------------------------------------------------------------------- # Failing cases # --------------------------------------------------------------------------- @test "fails when SKILL.md is missing" { local skill="$TMPDIR/my-skill" mkdir -p "$skill" run bash "$SCRIPT" "$skill" assert_failure } @test "fails when name does not match directory" { local skill="$TMPDIR/my-skill" make_valid_skill "$skill" sed -i 's/^name: .*/name: wrong-name/' "$skill/SKILL.md" run bash "$SCRIPT" "$skill" assert_failure } @test "fails when description exceeds 1024 chars" { local skill="$TMPDIR/my-skill" local name name="$(basename "$skill")" mkdir -p "$skill" local desc desc="$(python3 -c "print('x' * 1025)")" cat > "$skill/SKILL.md" <> "$skill/SKILL.md" run bash "$SCRIPT" "$skill" assert_failure } @test "fails when body contains unfilled FILL IN: placeholder" { local skill="$TMPDIR/my-skill" make_valid_skill "$skill" echo "FILL IN: replace this" >> "$skill/SKILL.md" run bash "$SCRIPT" "$skill" assert_failure } @test "fails when a script is not executable" { local skill="$TMPDIR/my-skill" make_valid_skill "$skill" echo "#!/usr/bin/env bash" > "$skill/scripts/helper.sh" chmod -x "$skill/scripts/helper.sh" run bash "$SCRIPT" "$skill" assert_failure } @test "fails when a script has an interactive prompt" { local skill="$TMPDIR/my-skill" make_valid_skill "$skill" printf '#!/usr/bin/env bash\nread -p "Enter value: " VAL\n' > "$skill/scripts/helper.sh" chmod +x "$skill/scripts/helper.sh" run bash "$SCRIPT" "$skill" assert_failure } @test "fails when name contains consecutive hyphens" { local skill="$TMPDIR/my--skill" make_valid_skill "$skill" run bash "$SCRIPT" "$skill" assert_failure } @test "fails when name has a leading hyphen" { local skill="$TMPDIR/-my-skill" make_valid_skill "$skill" run bash "$SCRIPT" "$skill" assert_failure } @test "fails when no frontmatter block is present" { local skill="$TMPDIR/my-skill" mkdir -p "$skill" echo "Just some content with no frontmatter." > "$skill/SKILL.md" run bash "$SCRIPT" "$skill" assert_failure } @test "fails when no arguments are given" { run bash "$SCRIPT" assert_failure }