170 lines
4.4 KiB
Bash
170 lines
4.4 KiB
Bash
#!/usr/bin/env bash
|
|
# Tests ciblés pour install2.sh
|
|
# Usage : cd tests && bash test_install2.sh
|
|
set -euo pipefail
|
|
|
|
PASS=0
|
|
FAIL=0
|
|
|
|
assert_eq() {
|
|
local desc="$1" expected="$2" actual="$3"
|
|
if [[ "$expected" == "$actual" ]]; then
|
|
echo " ✓ $desc"
|
|
(( PASS++ )) || true
|
|
else
|
|
echo " ✗ $desc"
|
|
echo " attendu : '$expected'"
|
|
echo " obtenu : '$actual'"
|
|
(( FAIL++ )) || true
|
|
fi
|
|
}
|
|
|
|
assert_true() {
|
|
local desc="$1"
|
|
shift
|
|
if eval "$@" 2>/dev/null; then
|
|
echo " ✓ $desc"
|
|
(( PASS++ )) || true
|
|
else
|
|
echo " ✗ $desc"
|
|
(( FAIL++ )) || true
|
|
fi
|
|
}
|
|
|
|
load_install() {
|
|
local tmp; tmp=$(mktemp)
|
|
grep -v '^main "\$@"' ../install2.sh > "$tmp"
|
|
set +e
|
|
# shellcheck disable=SC1090
|
|
source "$tmp"
|
|
set -e
|
|
rm -f "$tmp"
|
|
}
|
|
|
|
echo ""
|
|
echo "══════════════════════════════════"
|
|
echo " Tests install2.sh"
|
|
echo "══════════════════════════════════"
|
|
echo ""
|
|
|
|
load_install
|
|
trap - EXIT
|
|
|
|
TMP_REPO=$(mktemp -d)
|
|
TMP_HOME=$(mktemp -d)
|
|
OLD_HOME="$HOME"
|
|
HOME="$TMP_HOME"
|
|
REPO_DIR="$TMP_REPO"
|
|
SKILLS_TAG=""
|
|
SKILLS_DEBUG=0
|
|
DETECTED_AGENTS=(claude-code codex)
|
|
|
|
mkdir -p \
|
|
"$TMP_REPO/skills/infra/bundle-demo/scripts" \
|
|
"$TMP_REPO/skills/infra/bundle-demo/templates" \
|
|
"$TMP_REPO/skills/dev/legacy-demo" \
|
|
"$TMP_REPO/skills/dev/mixed-demo"
|
|
|
|
cat > "$TMP_REPO/skills/infra/bundle-demo/SKILL.md" <<'EOF'
|
|
---
|
|
name: bundle-demo
|
|
version: 1.2.0
|
|
description: >
|
|
Skill bundle de test
|
|
sur plusieurs lignes
|
|
agents: [claude-code, codex]
|
|
category: infra
|
|
tags: [bundle, test]
|
|
---
|
|
# Bundle Demo
|
|
EOF
|
|
echo '#!/usr/bin/env bash' > "$TMP_REPO/skills/infra/bundle-demo/scripts/check.sh"
|
|
echo 'template' > "$TMP_REPO/skills/infra/bundle-demo/templates/report.md"
|
|
|
|
cat > "$TMP_REPO/skills/dev/legacy-demo/claude-code.md" <<'EOF'
|
|
---
|
|
name: legacy-demo
|
|
version: 1.0.0
|
|
description: Skill legacy de test
|
|
agents: [claude-code]
|
|
category: dev
|
|
tags: [legacy]
|
|
---
|
|
# Legacy Demo
|
|
EOF
|
|
|
|
cat > "$TMP_REPO/skills/dev/mixed-demo/SKILL.md" <<'EOF'
|
|
---
|
|
name: mixed-demo
|
|
version: 2.0.0
|
|
description: Bundle prioritaire
|
|
agents: [claude-code]
|
|
category: dev
|
|
tags: [mixed]
|
|
---
|
|
# Mixed Bundle
|
|
EOF
|
|
|
|
cat > "$TMP_REPO/skills/dev/mixed-demo/claude-code.md" <<'EOF'
|
|
---
|
|
name: mixed-demo
|
|
version: 1.0.0
|
|
description: Legacy secondaire
|
|
agents: [claude-code]
|
|
category: dev
|
|
tags: [mixed]
|
|
---
|
|
# Mixed Legacy
|
|
EOF
|
|
|
|
echo "1. get_frontmatter_agents()"
|
|
assert_eq "agents multi-agent" \
|
|
"claude-code codex" \
|
|
"$(get_frontmatter_agents "$TMP_REPO/skills/infra/bundle-demo/SKILL.md")"
|
|
assert_eq "description YAML pliée" \
|
|
"Skill bundle de test sur plusieurs lignes" \
|
|
"$(get_frontmatter_desc "$TMP_REPO/skills/infra/bundle-demo/SKILL.md")"
|
|
|
|
echo ""
|
|
echo "2. scan_skills()"
|
|
scan_skills >/dev/null
|
|
assert_eq "4 entrées détectées" "4" "${#SKILLS_LIST[@]}"
|
|
assert_true "bundle claude détecté" \
|
|
"printf '%s\n' \"\${SKILLS_LIST[@]}\" | grep -q '^infra|bundle-demo|claude-code|.*|bundle|'"
|
|
assert_true "bundle codex détecté" \
|
|
"printf '%s\n' \"\${SKILLS_LIST[@]}\" | grep -q '^infra|bundle-demo|codex|.*|bundle|'"
|
|
assert_true "legacy détecté" \
|
|
"printf '%s\n' \"\${SKILLS_LIST[@]}\" | grep -q '^dev|legacy-demo|claude-code|.*|legacy|'"
|
|
assert_eq "bundle prioritaire sur legacy" \
|
|
"1" \
|
|
"$(printf '%s\n' "${SKILLS_LIST[@]}" | grep -c '^dev|mixed-demo|claude-code|')"
|
|
|
|
echo ""
|
|
echo "3. install_selected()"
|
|
STATE_FILE=$(mktemp)
|
|
for entry in "${SKILLS_LIST[@]}"; do
|
|
echo "$(make_key "$entry")=global" >> "$STATE_FILE"
|
|
done
|
|
SKILLS_DRY_RUN=0
|
|
install_selected >/dev/null
|
|
|
|
assert_true "SKILL.md bundle copié" \
|
|
"test -f '$TMP_HOME/.claude/skills/infra/bundle-demo/SKILL.md'"
|
|
assert_true "script bundle copié" \
|
|
"test -f '$TMP_HOME/.claude/skills/infra/bundle-demo/scripts/check.sh'"
|
|
assert_true "template bundle copié" \
|
|
"test -f '$TMP_HOME/.claude/skills/infra/bundle-demo/templates/report.md'"
|
|
assert_true "legacy copié en SKILL.md" \
|
|
"test -f '$TMP_HOME/.claude/skills/dev/legacy-demo/SKILL.md'"
|
|
|
|
rm -rf "$TMP_REPO" "$TMP_HOME"
|
|
rm -f "$STATE_FILE"
|
|
HOME="$OLD_HOME"
|
|
|
|
echo ""
|
|
echo "══════════════════════════════════"
|
|
printf " Résultats : %d passés, %d échoués\n" "$PASS" "$FAIL"
|
|
echo "══════════════════════════════════"
|
|
echo ""
|
|
[[ "$FAIL" -eq 0 ]]
|