125 lines
No EOL
4.8 KiB
TypeScript
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');
|
|
}
|
|
});
|
|
}); |