Files
fvtt-mournblade-cyd-2-0/test-templates.js
T
uberwald a1519e7a60 Fix: Replace missing effect.webp icon with existing capacite.webp
- effect.webp icon was missing, causing infinite 404 errors
- Replaced all references with capacite.webp which exists
- Fixed in base-actor-sheet.mjs, base-item-sheet.mjs, mournblade-cyd2-effects.js
- Fixed in partial-active-effects.hbs and partial-item-effects.hbs templates
- Updated test script to check for effect.webp references

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-06-07 00:36:12 +02:00

184 lines
6.8 KiB
JavaScript

/**
* Script de test pour vérifier que tous les partials Handlebars sont correctement préchargés
* Exécuter avec : node test-templates.js
*/
const fs = require('fs');
const path = require('path');
// Fonction pour simuler le chargement des templates
function loadTemplates(templatePaths) {
const loaded = [];
const errors = [];
for (const templatePath of templatePaths) {
// Remplacer le préfixe systems/ par le chemin réel
const realPath = templatePath.replace('systems/fvtt-mournblade-cyd-2-0/templates/', 'templates/');
const fullPath = path.join(__dirname, realPath);
// Vérifier si le fichier existe
if (fs.existsSync(fullPath)) {
loaded.push(templatePath);
} else {
errors.push(`Template introuvable: ${templatePath} (cherché: ${fullPath})`);
}
}
return { loaded, errors };
}
// Fonction pour extraire les partials utilisés dans les templates
function extractPartialsFromTemplate(content, basePath) {
const partialRegex = /{{\s*>[\s\S]*?systems\/fvtt-mournblade-cyd-2-0\/templates\/([^\s]+\.hbs)\s*}}/g;
const partials = new Set();
let match;
while ((match = partialRegex.exec(content)) !== null) {
partials.add(match[1]);
}
return Array.from(partials);
}
// Fonction pour scanner tous les templates et trouver les partials utilisés
function scanAllTemplates() {
const templatesDir = path.join(__dirname, 'templates');
const files = fs.readdirSync(templatesDir).filter(f => f.endsWith('.hbs'));
const allPartials = new Set();
for (const file of files) {
const filePath = path.join(templatesDir, file);
const content = fs.readFileSync(filePath, 'utf8');
const partials = extractPartialsFromTemplate(content);
partials.forEach(p => allPartials.add(p));
}
return Array.from(allPartials);
}
// Liste actuelle des templates préchargés
const currentPreloadedTemplates = [
'systems/fvtt-mournblade-cyd-2-0/templates/editor-notes-gm.hbs',
'systems/fvtt-mournblade-cyd-2-0/templates/partial-item-header.hbs',
'systems/fvtt-mournblade-cyd-2-0/templates/partial-item-description.hbs',
'systems/fvtt-mournblade-cyd-2-0/templates/partial-item-nav.hbs',
'systems/fvtt-mournblade-cyd-2-0/templates/partial-item-prix.hbs',
'systems/fvtt-mournblade-cyd-2-0/templates/partial-automation.hbs',
'systems/fvtt-mournblade-cyd-2-0/templates/partial-active-effects.hbs',
'systems/fvtt-mournblade-cyd-2-0/templates/partial-item-effects.hbs',
'systems/fvtt-mournblade-cyd-2-0/templates/hud-adversites.hbs',
];
// Exécuter le test
console.log('=== Test de chargement des templates Handlebars ===\n');
// 1. Vérifier que tous les templates préchargés existent
console.log('1. Vérification des templates préchargés :');
const { loaded, errors } = loadTemplates(currentPreloadedTemplates);
if (errors.length > 0) {
console.log(' ❌ Erreurs trouvées :');
errors.forEach(err => console.log(` - ${err}`));
} else {
console.log(' ✅ Tous les templates préchargés existent');
loaded.forEach(t => console.log(`${t}`));
}
// 2. Scanner tous les templates pour trouver les partials utilisés
console.log('\n2. Scan des partials utilisés dans les templates :');
const usedPartials = scanAllTemplates();
usedPartials.forEach(p => console.log(` - ${p}`));
// 3. Vérifier que tous les partials utilisés sont préchargés
console.log('\n3. Vérification que tous les partials utilisés sont préchargés :');
const preloadedPartials = currentPreloadedTemplates.map(p => path.basename(p));
const missingPartials = usedPartials.filter(p => !preloadedPartials.includes(p));
if (missingPartials.length > 0) {
console.log(' ❌ Partials manquants dans le préchargement :');
missingPartials.forEach(p => console.log(` - ${p}`));
} else {
console.log(' ✅ Tous les partials utilisés sont préchargés');
}
// 4. Vérification JSON
console.log('\n4. Vérification du fichier lang/fr.json :');
try {
const frJson = require('./lang/fr.json');
console.log(' ✅ Le fichier lang/fr.json est valide');
} catch (err) {
console.log(' ❌ Erreur dans lang/fr.json :', err.message);
}
// 5. Vérification des appels API dépréciés
console.log('\n5. Vérification des appels API dépréciés (ActiveEffectDialog) :');
const deprecatedPattern = /foundry\.applications\.api\.ActiveEffectDialog/g;
const jsFiles = [
'modules/applications/sheets/base-actor-sheet.mjs',
'modules/applications/sheets/base-item-sheet.mjs'
];
let deprecatedFound = false;
for (const file of jsFiles) {
try {
const content = fs.readFileSync(path.join(__dirname, file), 'utf8');
if (deprecatedPattern.test(content)) {
console.log(` ❌ Fichier ${file} contient ActiveEffectDialog (déprécié)`);
deprecatedFound = true;
}
} catch (err) {
// Fichier introuvable, ignorer
}
}
if (!deprecatedFound) {
console.log(' ✅ Aucun appel à ActiveEffectDialog (API dépréciée) trouvé');
}
// 6. Vérification des références à l'icône manquante effect.webp
console.log('\n6. Vérification des références à effect.webp (icône manquante) :');
const effectWebpPattern = /effect\.webp/g;
const allJsFiles = [
'modules/applications/sheets/base-actor-sheet.mjs',
'modules/applications/sheets/base-item-sheet.mjs',
'modules/mournblade-cyd2-effects.js'
];
const hbsFiles = [
'templates/partial-active-effects.hbs',
'templates/partial-item-effects.hbs'
];
let effectWebpFound = false;
[...allJsFiles, ...hbsFiles].forEach(file => {
try {
const content = fs.readFileSync(path.join(__dirname, file), 'utf8');
if (effectWebpPattern.test(content)) {
console.log(` ❌ Fichier ${file} contient une référence à effect.webp`);
effectWebpFound = true;
}
} catch (err) {
// Fichier introuvable, ignorer
}
});
if (!effectWebpFound) {
console.log(' ✅ Aucune référence à effect.webp (icône manquante) trouvée');
}
// Résumé
console.log('\n=== Résumé ===');
console.log(`Templates préchargés: ${loaded.length}`);
console.log(`Partials utilisés: ${usedPartials.length}`);
console.log(`Partials manquants: ${missingPartials.length}`);
console.log(`Fichier JSON valide: ${errors.length === 0 ? 'Oui' : 'Non'}`);
console.log(`API dépréciée utilisée: ${deprecatedFound ? 'Oui' : 'Non'}`);
console.log(`Référence à effect.webp: ${effectWebpFound ? 'Oui' : 'Non'}`);
if (errors.length === 0 && missingPartials.length === 0 && !deprecatedFound && !effectWebpFound) {
console.log('\n✅ Toutes les vérifications ont réussi !');
process.exit(0);
} else {
console.log('\n❌ Certaines vérifications ont échoué !');
process.exit(1);
}