playbook/tests/scripts/test_sync_templates.bats

85 lines
2.5 KiB
Bash

#!/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-root "$TARGET_DIR" -project-name "DemoProject" -date "2026-02-03"
[ -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" ]
grep -q "DemoProject" "$TARGET_DIR/memory-bank/project-brief.md"
! grep -q "{{DATE}}" "$TARGET_DIR/AGENT_RULES.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" -project-root "$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" -project-root "$TARGET_DIR" -force
[ -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
<!-- playbook:framework:start -->
OLD_FRAMEWORK
<!-- playbook:framework:end -->
Footer
EOF
sh "$SCRIPT_PATH" -project-root "$TARGET_DIR" -full
! grep -q "OLD_FRAMEWORK" "$TARGET_DIR/AGENTS.md"
grep -q "<!-- playbook:framework:start -->" "$TARGET_DIR/AGENTS.md"
grep -q "Footer" "$TARGET_DIR/AGENTS.md"
}