Files
foundryvtt-reve-de-dragon/tests/scripts/tc-22-compendiums.sh
T

113 lines
5.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# ============================================================================
# TC-22 — Compendiums
# Usage: ./tc-22-compendiums.sh [--navigate]
# ============================================================================
set -uo pipefail
source "$(dirname "$0")/tc-header.sh"
echo ""
echo "╔══════════════════════════════════════════════════════════════╗"
echo "║ TC-22 — Compendiums ║"
echo "╚══════════════════════════════════════════════════════════════╝"
echo ""
tc_ensure_ready
# ============================================================================
echo "--- TC-22-001: Packs chargés ---"
# ============================================================================
R=$(jse_get_async "
try {
const packs = game.packs.filter(p => p.metadata?.system === 'foundryvtt-reve-de-dragon');
return { count: packs.length, names: packs.map(p => p.metadata?.name).join(',') };
} catch(e) { return {error: e.message}; }
")
COUNT=$(eval_ok "$R" count)
ERR=$(eval_ok "$R" error)
assert_gt "TC-22-001: ≥10 packs chargés ($COUNT)" "$COUNT" 9
# ============================================================================
echo "--- TC-22-002: Compendium Compétences ---"
# ============================================================================
R=$(jse_get_async "
try {
const packs = game.packs.filter(p => p.metadata?.system === 'foundryvtt-reve-de-dragon');
const compPack = packs.find(p => p.metadata?.name?.includes('competence') || p.metadata?.label?.toLowerCase().includes('comp'));
if (!compPack) return {error: 'no competence pack', names: packs.map(p=>p.metadata.name).join(',')};
const docs = await compPack.getDocuments();
return { count: docs.length, valid: docs.length > 10 };
} catch(e) { return {error: e.message}; }
")
CCOUNT=$(eval_ok "$R" count)
CVALID=$(eval_ok "$R" valid)
ERR=$(eval_ok "$R" error)
[ "$CVALID" = "True" ] && pass "TC-22-002: compétences pack = $CCOUNT items" || fail "TC-22-002: KO ($ERR)"
# ============================================================================
echo "--- TC-22-003: Compendium Sorts ---"
# ============================================================================
R=$(jse_get_async "
try {
const packs = game.packs.filter(p => p.metadata?.system === 'foundryvtt-reve-de-dragon');
const sortPack = packs.find(p => p.metadata?.name?.includes('sort') || p.metadata?.label?.toLowerCase().includes('sort'));
if (!sortPack) return {error: 'no sort pack'};
const docs = await sortPack.getDocuments();
return { count: docs.length, valid: docs.length > 20 };
} catch(e) { return {error: e.message}; }
")
SCOUNT=$(eval_ok "$R" count)
SVALID=$(eval_ok "$R" valid)
ERR=$(eval_ok "$R" error)
[ "$SVALID" = "True" ] && pass "TC-22-003: sorts pack = $SCOUNT items" || fail "TC-22-003: KO ($ERR)"
# ============================================================================
echo "--- TC-22-004: Compendium Équipement ---"
# ============================================================================
R=$(jse_get_async "
try {
const packs = game.packs.filter(p => p.metadata?.system === 'foundryvtt-reve-de-dragon');
const eqPack = packs.find(p => p.metadata?.name?.includes('equipement') || p.metadata?.name?.includes('arme') || p.metadata?.label?.toLowerCase().includes('quip'));
if (!eqPack) return {error: 'no equipement pack'};
const docs = await eqPack.getDocuments();
return { count: docs.length, valid: docs.length > 5 };
} catch(e) { return {error: e.message}; }
")
ECOUNT=$(eval_ok "$R" count)
EVALID=$(eval_ok "$R" valid)
ERR=$(eval_ok "$R" error)
[ "$EVALID" = "True" ] && pass "TC-22-004: équipement pack = $ECOUNT items" || fail "TC-22-004: KO ($ERR)"
# ============================================================================
echo "--- TC-22-006: Drag compendium → acteur ---"
# ============================================================================
R=$(jse_get_async "
try {
const packs = game.packs.filter(p => p.metadata?.system === 'foundryvtt-reve-de-dragon');
// Find an item pack
const itemPack = packs.find(p => p.documentName === 'Item');
if (!itemPack) return {error: 'no item pack'};
const docs = await itemPack.getDocuments();
if (docs.length === 0) return {error: 'empty pack'};
// Create a test actor
const [actor] = await Actor.createDocuments([{type:'personnage', name:'TC-22 Test'}]);
// Get first item from pack
const item = docs[0];
// Clone it to actor
const [created] = await actor.createEmbeddedDocuments('Item', [item.toObject()]);
const has = actor.items.has(created.id);
await actor.delete();
return { dragOk: has, itemName: item.name };
} catch(e) { return {error: e.message}; }
")
DRAGOK=$(eval_ok "$R" dragOk)
ERR=$(eval_ok "$R" error)
[ "$DRAGOK" = "True" ] && pass "TC-22-006: drag compendium → acteur" || fail "TC-22-006: KO ($ERR)"
# ============================================================================
echo ""
echo "--- Console errors ---"
ERRS=$(tc_console_errors)
[ "$ERRS" -le 5 ] 2>/dev/null && pass "Console errors ≤5 ($ERRS)" || fail "Console errors: $ERRS"
tc_summary