/** * Setup simplifié pour FoundryVTT E2E Tests * * Environnement existant : * - Serveur FoundryVTT sur https://localhost:31000 * - Monde déjà disponible * - Utilisateur: gamemaster (pas de mot de passe) * - Module Video View Manager déjà installé * * Ce setup vérifie simplement que tout est accessible. */ import { chromium } from '@playwright/test'; const FOUNDRY_URL = 'https://localhost:31000'; const TEST_USER = 'gamemaster'; /** * Vérifie que FoundryVTT est accessible */ async function verifyFoundryAccessible(page) { console.log('🔍 Vérification de l\'accès à FoundryVTT...'); try { await page.goto(FOUNDRY_URL, { timeout: 30000, waitUntil: 'domcontentloaded', }); // Attendre un élément Foundry (le body devrait exister) await page.waitForSelector('body', { timeout: 10000 }); console.log('✅ FoundryVTT est accessible sur https://localhost:31000'); // Vérifier que le module est chargé (en mode GM) const title = await page.title(); console.log(`📖 Titre de la page: ${title}`); } catch (error) { console.error('❌ Impossible de se connecter à FoundryVTT:', error.message); console.error('💡 Vérifiez que:'); console.error(' - FoundryVTT est en cours d\'exécution sur https://localhost:31000'); console.error(' - Le monde est accessible'); console.error(' - Le module Video View Manager est installé'); throw error; } } /** * Vérifie que le module Video View Manager est actif */ async function verifyModuleActive(page) { console.log('📦 Vérification du module Video View Manager...'); try { // Attendre que le module soit initialisé (check pour un élément spécifique) await page.waitForFunction(() => { return typeof game !== 'undefined' && game.modules?.get?.('video-view-manager')?.active; }, { timeout: 15000 }); const isActive = await page.evaluate(() => { const module = game.modules.get('video-view-manager'); return module?.active || false; }); if (isActive) { console.log('✅ Module Video View Manager est actif'); } else { console.warn('⚠️ Module Video View Manager n\'est pas actif'); console.warn(' Essayez de recharger la page (Ctrl+R)'); } } catch (error) { console.warn('⚠️ Impossible de vérifier l\'état du module:', error.message); } } /** * Vérifie que l'utilisateur est GM */ async function verifyIsGM(page) { console.log('👑 Vérification du rôle GM...'); try { const isGM = await page.evaluate(() => { return game.user?.isGM || false; }); if (isGM) { console.log('✅ Utilisateur est GM (gamemaster)'); } else { console.warn('⚠️ Utilisateur n\'est pas GM'); } } catch (error) { console.warn('⚠️ Impossible de vérifier le rôle:', error.message); } } /** * Exécute le setup */ async function globalSetup() { console.log('\n🚀 Démarrage du setup E2E pour FoundryVTT...\n'); console.log('Configuration détectée:'); console.log(' - URL: https://localhost:31000'); console.log(' - User: gamemaster'); console.log(' - Monde: déjà disponible\n'); const browser = await chromium.launch({ headless: true, timeout: 30000, ignoreHTTPSErrors: true, }); const context = await browser.newContext({ viewport: { width: 1920, height: 1080 }, userAgent: 'VVM-E2E-Setup/1.0', ignoreHTTPSErrors: true, }); const page = await context.newPage(); try { // Vérifier l'accès à Foundry await verifyFoundryAccessible(page); // Vérifier que le module est actif await verifyModuleActive(page); // Vérifier le rôle GM await verifyIsGM(page); console.log('\n✅ Setup E2E terminé avec succès !\n'); console.log('Prêt à exécuter les tests sur:'); console.log(` ${FOUNDRY_URL}\n`); // Stocker des informations pour les tests process.env.FOUNDRY_URL = FOUNDRY_URL; process.env.FOUNDRY_USER = TEST_USER; } catch (error) { console.error('\n❌ Setup échoué:', error); throw error; } finally { await page.close(); await context.close(); await browser.close(); } } export default globalSetup;