upskill-event-manager/wordpress-dev/tests/e2e/check-dashboard-stats.test.ts

125 lines
No EOL
4.8 KiB
TypeScript

import { STAGING_URL, PATHS, TIMEOUTS } from './config/staging-config';
import { test, expect } from '@playwright/test';
import * as dotenv from 'dotenv';
import { resolve } from 'path';
dotenv.config({ path: resolve(__dirname, '../../../../.env') });
test.use({
screenshot: 'on',
video: 'on',
trace: 'on',
actionTimeout: 15000,
timeout: 60000
});
test.describe('Dashboard Stats Verification', () => {
const stagingUrl = process.env.UPSKILL_STAGING_URL || 'https://upskill-staging.measurequick.com';
test('verify dashboard shows test event statistics', async ({ page }) => {
const username = process.env.TEST_USERNAME || 'test_trainer';
const password = process.env.TEST_PASSWORD || 'Test123!';
console.log('Starting dashboard stats check');
// Step 1: Login via wp-admin
await page.goto(stagingUrl + '/wp-login.php');
await page.fill('#user_login', username);
await page.fill('#user_pass', password);
await page.click('#wp-submit');
// Wait for login
await page.waitForURL('**/wp-admin/**');
console.log('Logged in successfully');
// Step 2: Navigate to dashboard
await page.goto(stagingUrl + '/hvac-dashboard/');
await page.waitForLoadState('networkidle');
// Wait for dashboard to load
await page.waitForSelector('.hvac-dashboard-container', { state: 'visible' });
console.log('Dashboard loaded');
// Step 3: Check for statistics
const statsSelectors = {
totalEvents: '.hvac-stat-block:has-text("Total Events") .hvac-stat-number',
upcomingEvents: '.hvac-stat-block:has-text("Upcoming Events") .hvac-stat-number',
totalRevenue: '.hvac-stat-block:has-text("Total Revenue") .hvac-stat-number',
totalTrainees: '.hvac-stat-block:has-text("Total Trainees") .hvac-stat-number'
};
const stats = {};
for (const [key, selector] of Object.entries(statsSelectors)) {
try {
await page.waitForSelector(selector, { state: 'visible', timeout: 5000 });
const value = await page.textContent(selector);
stats[key] = value?.trim();
console.log(`${key}: ${stats[key]}`);
} catch (e) {
console.log(`Could not find ${key} stats`);
stats[key] = 'Not found';
}
}
// Step 4: Check for recent events list
const recentEventsExists = await page.locator('.hvac-recent-events').isVisible().catch(() => false);
console.log('Recent events section exists:', recentEventsExists);
if (recentEventsExists) {
const eventItems = await page.locator('.hvac-event-item').count();
console.log('Number of recent events:', eventItems);
// Get event titles
const eventTitles = await page.locator('.hvac-event-title').allTextContents();
console.log('Event titles:', eventTitles);
}
// Step 5: Check for chart/graph
const chartExists = await page.locator('#attendeesChart, #revenueChart, .chart-container').isVisible().catch(() => false);
console.log('Chart exists:', chartExists);
// Take screenshot of dashboard
await page.screenshot({ path: 'dashboard-stats-check.png', fullPage: true });
// Step 6: Navigate to My Events to count actual events
await page.goto(stagingUrl + '/my-events/');
await page.waitForLoadState('networkidle');
const myEventsTitle = await page.locator('h1, h2').first().textContent();
console.log('My Events page title:', myEventsTitle);
// Count events in the list
const eventCount = await page.locator('.tribe-events-event-meta, .event-listing, .tribe-event').count();
console.log('Total events in My Events:', eventCount);
// Take screenshot of My Events
await page.screenshot({ path: 'my-events-list.png', fullPage: true });
// Step 7: Verify data consistency
console.log('\n=== Dashboard Statistics Summary ===');
console.log('Dashboard Stats:', stats);
console.log('Actual event count from My Events:', eventCount);
// Check if Total Events matches actual count
if (stats.totalEvents !== 'Not found') {
const dashboardTotal = parseInt(stats.totalEvents.replace(/[^0-9]/g, ''));
console.log('Dashboard shows total:', dashboardTotal);
console.log('My Events shows:', eventCount);
if (dashboardTotal !== eventCount) {
console.warn('⚠️ Mismatch: Dashboard shows', dashboardTotal, 'but My Events has', eventCount);
} else {
console.log('✅ Dashboard stats match actual event count');
}
}
// Check if stats are being updated from test events
const hasTestEvents = stats.totalEvents !== '0' && stats.totalEvents !== 'Not found';
if (hasTestEvents) {
console.log('✅ Dashboard is showing test event statistics');
} else {
console.log('❌ Dashboard is not showing any event statistics');
}
});
});