Files
mes_skills/tests/test_install2.sh
T
2026-05-16 06:59:49 +02:00

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 ]]