#!/usr/bin/env bats # sync_templates.sh 测试套件 setup() { export PLAYBOOK_ROOT="$(cd "$BATS_TEST_DIRNAME/../.." && pwd)" export SCRIPT_PATH="$PLAYBOOK_ROOT/scripts/sync_templates.sh" export TARGET_DIR="$(mktemp -d)" } teardown() { if [ -n "$TARGET_DIR" ] && [ -d "$TARGET_DIR" ]; then chmod -R u+w "$TARGET_DIR" 2>/dev/null || true rm -rf "$TARGET_DIR" fi } # ============================================== # 基础功能测试 # ============================================== @test "sync_templates.sh 脚本存在且可执行" { [ -f "$SCRIPT_PATH" ] } @test "sync_templates.sh - 基础同步与占位符替换" { sh "$SCRIPT_PATH" --project-name "DemoProject" --date "2026-02-03" "$TARGET_DIR" [ -d "$TARGET_DIR/memory-bank" ] [ -f "$TARGET_DIR/memory-bank/project-brief.md" ] [ -f "$TARGET_DIR/docs/prompts/coding/clarify.md" ] [ -f "$TARGET_DIR/AGENTS.md" ] [ -f "$TARGET_DIR/AGENT_RULES.md" ] [ -f "$TARGET_DIR/TODO.md" ] [ -f "$TARGET_DIR/CONFIRM.md" ] grep -q "DemoProject" "$TARGET_DIR/memory-bank/project-brief.md" ! grep -q "{{DATE}}" "$TARGET_DIR/TODO.md" [ -z "$(find "$TARGET_DIR" -name '*.template.md' -print -quit)" ] } @test "sync_templates.sh - 已存在目录不覆盖 (无 --force)" { mkdir -p "$TARGET_DIR/memory-bank" mkdir -p "$TARGET_DIR/docs/prompts" echo "keep" > "$TARGET_DIR/memory-bank/keep.md" echo "keep" > "$TARGET_DIR/docs/prompts/keep.md" sh "$SCRIPT_PATH" "$TARGET_DIR" [ -f "$TARGET_DIR/memory-bank/keep.md" ] [ ! -f "$TARGET_DIR/memory-bank/project-brief.md" ] [ -f "$TARGET_DIR/docs/prompts/keep.md" ] [ ! -f "$TARGET_DIR/docs/prompts/README.md" ] } @test "sync_templates.sh - --force 覆盖并备份" { mkdir -p "$TARGET_DIR/memory-bank" echo "marker" > "$TARGET_DIR/memory-bank/marker.txt" sh "$SCRIPT_PATH" --force "$TARGET_DIR" [ -f "$TARGET_DIR/memory-bank/project-brief.md" ] [ ! -f "$TARGET_DIR/memory-bank/marker.txt" ] backup_dir="$(ls -d "$TARGET_DIR"/memory-bank.bak.* 2>/dev/null | head -n 1)" [ -n "$backup_dir" ] [ -f "$backup_dir/marker.txt" ] } @test "sync_templates.sh - --full 更新 framework 区块" { cat > "$TARGET_DIR/AGENTS.md" << 'EOF' # Agent Instructions OLD_FRAMEWORK Footer EOF sh "$SCRIPT_PATH" --full "$TARGET_DIR" ! grep -q "OLD_FRAMEWORK" "$TARGET_DIR/AGENTS.md" grep -q "" "$TARGET_DIR/AGENTS.md" grep -q "Footer" "$TARGET_DIR/AGENTS.md" }