Merge commit 'ac794a6a7051497ff60b947642d44f0f8c04d6c6' into lsp-server
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
#!/usr/bin/env bats
|
||||
# install_codex_skills.sh 测试套件
|
||||
|
||||
setup() {
|
||||
export TEST_DIR="$(mktemp -d)"
|
||||
export PLAYBOOK_ROOT="$(cd "$BATS_TEST_DIRNAME/../.." && pwd)"
|
||||
export SCRIPT_PATH="$PLAYBOOK_ROOT/scripts/install_codex_skills.sh"
|
||||
|
||||
# 创建临时 HOME 避免污染真实环境
|
||||
export ORIGINAL_HOME="$HOME"
|
||||
export HOME="$TEST_DIR/home"
|
||||
mkdir -p "$HOME"
|
||||
|
||||
export CODEX_HOME="$HOME/.codex"
|
||||
export SKILLS_DST_ROOT="$CODEX_HOME/skills"
|
||||
|
||||
cd "$TEST_DIR"
|
||||
}
|
||||
|
||||
teardown() {
|
||||
export HOME="$ORIGINAL_HOME"
|
||||
|
||||
if [ -n "$TEST_DIR" ] && [ -d "$TEST_DIR" ]; then
|
||||
chmod -R u+w "$TEST_DIR" 2>/dev/null || true
|
||||
rm -rf "$TEST_DIR"
|
||||
fi
|
||||
}
|
||||
|
||||
skip_if_no_skills() {
|
||||
if [ ! -d "$PLAYBOOK_ROOT/codex/skills" ]; then
|
||||
skip "No codex/skills directory found"
|
||||
fi
|
||||
}
|
||||
|
||||
first_skill_name() {
|
||||
ls -1 "$PLAYBOOK_ROOT/codex/skills" 2>/dev/null | head -n 1
|
||||
}
|
||||
|
||||
# ==============================================
|
||||
# 基础功能测试
|
||||
# ==============================================
|
||||
|
||||
@test "install_codex_skills.sh 脚本存在且可执行" {
|
||||
[ -f "$SCRIPT_PATH" ]
|
||||
}
|
||||
|
||||
@test "安装 - 创建 skills 目录" {
|
||||
skip_if_no_skills
|
||||
|
||||
[ ! -d "$SKILLS_DST_ROOT" ]
|
||||
|
||||
sh "$SCRIPT_PATH"
|
||||
|
||||
[ -d "$SKILLS_DST_ROOT" ]
|
||||
}
|
||||
|
||||
@test "安装 - 复制 skill 目录" {
|
||||
skip_if_no_skills
|
||||
|
||||
sh "$SCRIPT_PATH"
|
||||
|
||||
SKILL_DIRS=$(find "$SKILLS_DST_ROOT" -mindepth 1 -maxdepth 1 -type d)
|
||||
[ -n "$SKILL_DIRS" ]
|
||||
|
||||
for dir in $SKILL_DIRS; do
|
||||
[ -f "$dir/SKILL.md" ]
|
||||
done
|
||||
}
|
||||
|
||||
@test "安装 - 指定单个 skill" {
|
||||
skip_if_no_skills
|
||||
|
||||
SKILL_NAME="$(first_skill_name)"
|
||||
[ -n "$SKILL_NAME" ]
|
||||
|
||||
sh "$SCRIPT_PATH" "$SKILL_NAME"
|
||||
|
||||
[ -d "$SKILLS_DST_ROOT/$SKILL_NAME" ]
|
||||
COUNT=$(find "$SKILLS_DST_ROOT" -mindepth 1 -maxdepth 1 -type d | wc -l)
|
||||
[ "$COUNT" -eq 1 ]
|
||||
}
|
||||
|
||||
@test "备份 - 同名 skill 目录会创建备份" {
|
||||
skip_if_no_skills
|
||||
|
||||
SKILL_NAME="$(first_skill_name)"
|
||||
[ -n "$SKILL_NAME" ]
|
||||
|
||||
mkdir -p "$SKILLS_DST_ROOT/$SKILL_NAME"
|
||||
echo "marker" > "$SKILLS_DST_ROOT/$SKILL_NAME/marker.txt"
|
||||
|
||||
sh "$SCRIPT_PATH" "$SKILL_NAME"
|
||||
|
||||
BACKUP_DIRS=$(find "$SKILLS_DST_ROOT" -maxdepth 1 -type d -name "$SKILL_NAME.bak.*")
|
||||
[ -n "$BACKUP_DIRS" ]
|
||||
}
|
||||
|
||||
@test "错误处理 - 指定不存在 skill 报错" {
|
||||
skip_if_no_skills
|
||||
|
||||
run sh "$SCRIPT_PATH" nonexistent-skill
|
||||
|
||||
[ "$status" -ne 0 ]
|
||||
}
|
||||
|
||||
@test "幂等性 - 多次安装结果一致" {
|
||||
skip_if_no_skills
|
||||
|
||||
sh "$SCRIPT_PATH"
|
||||
CHECKSUM1=$(find "$SKILLS_DST_ROOT" -type f -name "SKILL.md" ! -path "$SKILLS_DST_ROOT"'/*.bak.*/*' -exec md5sum {} \; | sort | md5sum)
|
||||
|
||||
sh "$SCRIPT_PATH"
|
||||
CHECKSUM2=$(find "$SKILLS_DST_ROOT" -type f -name "SKILL.md" ! -path "$SKILLS_DST_ROOT"'/*.bak.*/*' -exec md5sum {} \; | sort | md5sum)
|
||||
|
||||
[ "$CHECKSUM1" = "$CHECKSUM2" ]
|
||||
}
|
||||
Reference in New Issue
Block a user