#!/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 ]]