162 lines
		
	
	
		
			No EOL
		
	
	
		
			7.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			162 lines
		
	
	
		
			No EOL
		
	
	
		
			7.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { STAGING_URL, PATHS, TIMEOUTS } from './config/staging-config';
 | |
| import { test, expect } from '@playwright/test';
 | |
| import { LoginPage } from './pages/LoginPage';
 | |
| import { DashboardPage } from './pages/DashboardPage';
 | |
| import { CreateEventPage } from './pages/CreateEventPage';
 | |
| import { EventSummaryPage } from './pages/EventSummaryPage';
 | |
| import { ModifyEventPage } from './pages/ModifyEventPage';
 | |
| import { TEST_USERS } from './data/test-users';
 | |
| import { TEST_EVENTS } from './data/test-events';
 | |
| 
 | |
| // STAGING_URL is now imported from config
 | |
| 
 | |
| test.describe('Test Draft Events', () => {
 | |
|     let loginPage: LoginPage;
 | |
|     let dashboardPage: DashboardPage;
 | |
|     let createEventPage: CreateEventPage;
 | |
|     let eventSummaryPage: EventSummaryPage;
 | |
|     let modifyEventPage: ModifyEventPage;
 | |
|     
 | |
|     const trainer = TEST_USERS.trainer;
 | |
| 
 | |
|     test.beforeEach(async ({ page }) => {
 | |
|         loginPage = new LoginPage(page);
 | |
|         dashboardPage = new DashboardPage(page);
 | |
|         createEventPage = new CreateEventPage(page);
 | |
|         eventSummaryPage = new EventSummaryPage(page);
 | |
|         modifyEventPage = new ModifyEventPage(page);
 | |
|         
 | |
|         // Set base URL and login
 | |
|         page.context().setDefaultNavigationTimeout(TIMEOUTS.navigation);
 | |
|         await page.goto(STAGING_URL);
 | |
|         await loginPage.navigateToLogin();
 | |
|         await loginPage.login(trainer.username, trainer.password);
 | |
|     });
 | |
| 
 | |
|     test('Create Event and Check All Tabs', async ({ page }) => {
 | |
|         // First check the dashboard to see if there are any existing events
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         const dashboardEventCount = await dashboardPage.getEventCount();
 | |
|         console.log('Initial dashboard event count:', dashboardEventCount);
 | |
|         
 | |
|         // Create an event with today's date
 | |
|         await dashboardPage.clickCreateEvent();
 | |
|         await expect(page).toHaveURL(/.*manage-event/);
 | |
|         
 | |
|         // Get today's date
 | |
|         const today = new Date();
 | |
|         const monthStr = (today.getMonth() + 1).toString();
 | |
|         const dayStr = today.getDate().toString();
 | |
|         const yearStr = today.getFullYear().toString();
 | |
|         const todayFormatted = `${monthStr}/${dayStr}/${yearStr}`;
 | |
|         
 | |
|         // Fill event details with today's date
 | |
|         const eventData = {
 | |
|             ...TEST_EVENTS.basicEvent,
 | |
|             startDate: todayFormatted,
 | |
|             endDate: todayFormatted,
 | |
|             title: `HVAC Training Today ${Date.now()}` // Unique title
 | |
|         };
 | |
|         
 | |
|         console.log('Creating event with date:', todayFormatted);
 | |
|         await createEventPage.fillEventDetails(eventData);
 | |
|         
 | |
|         // Submit event
 | |
|         await createEventPage.submitEvent();
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         
 | |
|         // Check the VIEW YOUR SUBMITTED EVENTS button
 | |
|         const viewEventsButton = page.locator('text="VIEW YOUR SUBMITTED EVENTS"');
 | |
|         if (await viewEventsButton.isVisible()) {
 | |
|             await viewEventsButton.click();
 | |
|             await page.waitForLoadState('networkidle');
 | |
|         }
 | |
|         
 | |
|         const afterSubmitUrl = page.url();
 | |
|         console.log('After submit URL:', afterSubmitUrl);
 | |
|         await page.screenshot({ path: 'test-results/screenshots/after-create-event.png' });
 | |
|         
 | |
|         // Check status tabs on My Events page
 | |
|         const urls = [
 | |
|             `/my-events/`,
 | |
|             `/my-events/?tribe-bar-event-status=publish`,
 | |
|             `/my-events/?tribe-bar-event-status=draft`,
 | |
|             `/my-events/?tribe-bar-event-status=pending`,
 | |
|             `/my-events/?tribe-bar-event-status=private`
 | |
|         ];
 | |
|         
 | |
|         const statuses = ['All', 'Published', 'Draft', 'Pending', 'Private'];
 | |
|         
 | |
|         for (let i = 0; i < urls.length; i++) {
 | |
|             await page.goto(`${STAGING_URL}${urls[i]}`);
 | |
|             await page.waitForLoadState('networkidle');
 | |
|             console.log(`\n${statuses[i]} Events:`);
 | |
|             
 | |
|             // Check if there are events in the table
 | |
|             const eventRows = page.locator('tr.community-events-event-row');
 | |
|             const rowCount = await eventRows.count();
 | |
|             console.log(`Event rows found: ${rowCount}`);
 | |
|             
 | |
|             if (rowCount > 0) {
 | |
|                 // Get the first event details
 | |
|                 const firstRow = eventRows.first();
 | |
|                 const title = await firstRow.locator('a.url').innerText();
 | |
|                 const statusElement = await firstRow.locator('td').first();
 | |
|                 const statusText = await statusElement.innerText();
 | |
|                 
 | |
|                 console.log(`First event title: ${title}`);
 | |
|                 console.log(`Status: ${statusText}`);
 | |
|                 
 | |
|                 // Check for Edit link
 | |
|                 const editLink = firstRow.locator('a:has-text("Edit")');
 | |
|                 if (await editLink.count() > 0) {
 | |
|                     console.log('Edit link found');
 | |
|                     
 | |
|                     // Click Edit link to test modification
 | |
|                     await editLink.click();
 | |
|                     await page.waitForLoadState('networkidle');
 | |
|                     
 | |
|                     const editUrl = page.url();
 | |
|                     console.log('Edit page URL:', editUrl);
 | |
|                     await page.screenshot({ path: `test-results/screenshots/edit-${statuses[i].toLowerCase()}-event.png` });
 | |
|                     
 | |
|                     // Try to modify the event
 | |
|                     const updatedEvent = {
 | |
|                         ...eventData,
 | |
|                         title: `Updated ${title}`,
 | |
|                         description: 'This event has been updated.'
 | |
|                     };
 | |
|                     
 | |
|                     await modifyEventPage.fillEventDetails(updatedEvent);
 | |
|                     
 | |
|                     // Check for Update button
 | |
|                     if (await modifyEventPage.isUpdateButtonVisible()) {
 | |
|                         console.log('Update button found');
 | |
|                         await modifyEventPage.updateEvent();
 | |
|                     } else {
 | |
|                         console.log('Update button not found, trying submit');
 | |
|                         await createEventPage.submitEvent();
 | |
|                     }
 | |
|                     
 | |
|                     await page.waitForLoadState('networkidle');
 | |
|                     const afterUpdateUrl = page.url();
 | |
|                     console.log('After update URL:', afterUpdateUrl);
 | |
|                     
 | |
|                     // Go back to My Events
 | |
|                     await page.goto(`${STAGING_URL}/my-events/`);
 | |
|                     await page.waitForLoadState('networkidle');
 | |
|                     break; // Only test modification on the first found event
 | |
|                 }
 | |
|             }
 | |
|             
 | |
|             await page.screenshot({ path: `test-results/screenshots/my-events-${statuses[i].toLowerCase()}.png` });
 | |
|         }
 | |
|         
 | |
|         // Finally, check the dashboard again
 | |
|         await page.goto(PATHS.dashboard);
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         const finalDashboardCount = await dashboardPage.getEventCount();
 | |
|         console.log('Final dashboard event count:', finalDashboardCount);
 | |
|         await page.screenshot({ path: 'test-results/screenshots/final-dashboard.png' });
 | |
|     });
 | |
| }); |