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');
 | |
|     }
 | |
|   });
 | |
| }); |