#!/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 "$BATS_TEST_DIRNAME/../scripts" && pwd)/new-skill.sh" DEST="$(mktemp -d)" } teardown() { rm -rf "$DEST" } # --------------------------------------------------------------------------- # Passing cases # --------------------------------------------------------------------------- @test "--help exits 0" { run bash "$SCRIPT" --help assert_success assert_output --partial "Usage:" } @test "creates scaffold directory at destination" { run bash "$SCRIPT" my-tool "$DEST" assert_success assert [ -d "$DEST/my-tool" ] } @test "scaffold contains SKILL.md" { bash "$SCRIPT" my-tool "$DEST" assert [ -f "$DEST/my-tool/SKILL.md" ] } @test "scaffold contains README.md" { bash "$SCRIPT" my-tool "$DEST" assert [ -f "$DEST/my-tool/README.md" ] } @test "scaffold contains scripts/, references/, assets/, tests/ directories" { bash "$SCRIPT" my-tool "$DEST" assert [ -d "$DEST/my-tool/scripts" ] assert [ -d "$DEST/my-tool/references" ] assert [ -d "$DEST/my-tool/assets" ] assert [ -d "$DEST/my-tool/tests" ] } @test "substitutes skill name in SKILL.md" { bash "$SCRIPT" my-tool "$DEST" run grep "my-tool" "$DEST/my-tool/SKILL.md" assert_success } @test "substitutes skill name in README.md" { bash "$SCRIPT" my-tool "$DEST" run grep "my-tool" "$DEST/my-tool/README.md" assert_success } @test "substitutes skill name in tests/README.md" { bash "$SCRIPT" my-tool "$DEST" run grep "my-tool" "$DEST/my-tool/tests/README.md" assert_success } @test "skill name with numbers is valid" { run bash "$SCRIPT" my-tool-2 "$DEST" assert_success assert [ -d "$DEST/my-tool-2" ] } @test "next-steps output references /skill-audit not validate.sh" { run bash "$SCRIPT" my-tool "$DEST" assert_output --partial "/skill-audit" refute_output --partial "validate.sh" } # --------------------------------------------------------------------------- # Failing cases # --------------------------------------------------------------------------- @test "fails when no arguments given" { run bash "$SCRIPT" assert_failure } @test "fails when skill name contains uppercase" { run bash "$SCRIPT" MyTool "$DEST" assert_failure } @test "fails when skill name has consecutive hyphens" { run bash "$SCRIPT" my--tool "$DEST" assert_failure } @test "fails when skill name has a leading hyphen" { run bash "$SCRIPT" -my-tool "$DEST" assert_failure } @test "fails when skill name has a trailing hyphen" { run bash "$SCRIPT" my-tool- "$DEST" assert_failure } @test "fails when destination directory does not exist" { run bash "$SCRIPT" my-tool "/nonexistent/path" assert_failure } @test "fails when target already exists" { mkdir -p "$DEST/my-tool" run bash "$SCRIPT" my-tool "$DEST" assert_failure }