Story 4.2: Fix lint errors and code review findings
- Remove unused StripOverlayLayer import and stripOverlayLayer variable from module.js - Add comprehensive JSDoc annotations to FoundryAdapter.js methods (settings, socket, users, scenes, notifications, hooks) - Add /* global Dialog */ comment to PlayerPrivacyPanel.js for ESLint - Remove unused _force parameter from GMPlayerPrivacySelector.js render() method - Fix PlayerPrivacyPanelMenu.js: add constructor() to fallback class and call super() All 862 unit tests passing. All Story 4.2 acceptance criteria met. Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
/**
|
||||
* Global Teardown for FoundryVTT E2E Tests
|
||||
*
|
||||
* Nettoie après l'exécution des tests :
|
||||
* - Supprime le monde de test
|
||||
* - Nettoie les fichiers temporaires
|
||||
*/
|
||||
|
||||
import { chromium } from '@playwright/test';
|
||||
|
||||
const FOUNDRY_BASE_URL = 'http://localhost:30000';
|
||||
const TEST_WORLD_NAME = process.env.FOUNDRY_TEST_WORLD || 'VVM-E2E-Test-World';
|
||||
|
||||
/**
|
||||
* Supprime le monde de test
|
||||
*/
|
||||
async function deleteTestWorld(page) {
|
||||
console.log('🗑️ Deleting test world...');
|
||||
|
||||
try {
|
||||
await page.goto(`${FOUNDRY_BASE_URL}/setup`, { timeout: 30000 });
|
||||
await page.waitForSelector('#world-list', { timeout: 30000 });
|
||||
|
||||
// Trouver le monde de test
|
||||
const worldRow = page.locator(`#world-list [data-world-id]:has-text("${TEST_WORLD_NAME}")`);
|
||||
|
||||
if (await worldRow.count() > 0) {
|
||||
// Ouvrir le menu du monde
|
||||
await worldRow.locator('.world-actions-button').click();
|
||||
await page.waitForSelector('.world-context-menu', { timeout: 5000 });
|
||||
|
||||
// Cliquer sur Supprimer
|
||||
await page.locator('.world-context-menu [data-action="delete"]').click();
|
||||
|
||||
// Confirmer la suppression
|
||||
await page.waitForSelector('.delete-confirmation-dialog', { timeout: 5000 });
|
||||
await page.locator('.delete-confirmation-dialog button:has-text("Delete")').click();
|
||||
|
||||
// Attendre la suppression
|
||||
await page.waitForSelector(`#world-list [data-world-id]:has-text("${TEST_WORLD_NAME}")`, {
|
||||
state: 'detached',
|
||||
timeout: 10000
|
||||
});
|
||||
|
||||
console.log(`✅ Deleted test world: ${TEST_WORLD_NAME}`);
|
||||
} else {
|
||||
console.log(`⚠️ Test world "${TEST_WORLD_NAME}" not found, skipping deletion`);
|
||||
}
|
||||
} catch (error) {
|
||||
console.log('⚠️ Could not delete test world (may have already been deleted):', error.message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Nettoie les utilisateurs de test
|
||||
*/
|
||||
async function cleanupTestUsers(page) {
|
||||
console.log('🧹 Cleaning up test users...');
|
||||
|
||||
try {
|
||||
const testUsers = [
|
||||
process.env.FOUNDRY_TEST_GM || 'TestGM',
|
||||
process.env.FOUNDRY_TEST_PLAYER || 'TestPlayer'
|
||||
];
|
||||
|
||||
await page.goto(`${FOUNDRY_BASE_URL}/setup/users`, { timeout: 30000 });
|
||||
await page.waitForSelector('#users-list', { timeout: 30000 });
|
||||
|
||||
for (const username of testUsers) {
|
||||
const userRow = page.locator(`#users-list [data-user-id]:has-text("${username}")`);
|
||||
|
||||
if (await userRow.count() > 0) {
|
||||
await userRow.locator('.user-actions-button').click();
|
||||
await page.waitForSelector('.user-context-menu', { timeout: 5000 });
|
||||
await page.locator('.user-context-menu [data-action="delete"]').click();
|
||||
await page.locator('.delete-confirmation-dialog button:has-text("Delete")').click();
|
||||
|
||||
await page.waitForSelector(`#users-list [data-user-id]:has-text("${username}")`, {
|
||||
state: 'detached',
|
||||
timeout: 5000
|
||||
});
|
||||
|
||||
console.log(`✅ Deleted test user: ${username}`);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.log('⚠️ Could not cleanup test users:', error.message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Exécute le nettoyage
|
||||
*/
|
||||
async function globalTeardown() {
|
||||
console.log('\n🧹 Running FoundryVTT E2E Test Teardown...\n');
|
||||
|
||||
const browser = await chromium.launch({
|
||||
headless: true,
|
||||
timeout: 30000,
|
||||
});
|
||||
|
||||
const context = await browser.newContext({
|
||||
viewport: { width: 1920, height: 1080 },
|
||||
userAgent: 'VVM-E2E-Teardown/1.0',
|
||||
});
|
||||
|
||||
const page = await context.newPage();
|
||||
|
||||
try {
|
||||
await page.goto(FOUNDRY_BASE_URL, { timeout: 30000 });
|
||||
|
||||
// Supprimer le monde de test
|
||||
await deleteTestWorld(page);
|
||||
|
||||
// Nettoyer les utilisateurs
|
||||
await cleanupTestUsers(page);
|
||||
|
||||
console.log('\n✅ FoundryVTT E2E Test Teardown Complete!\n');
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Teardown failed:', error);
|
||||
} finally {
|
||||
await page.close();
|
||||
await context.close();
|
||||
await browser.close();
|
||||
}
|
||||
}
|
||||
|
||||
export default globalTeardown;
|
||||
Reference in New Issue
Block a user