upskill-event-manager/wordpress-dev/tests/e2e/order-summary.test.ts
bengizmo 11bad93a65 feat: Implement Order Summary page functionality
- Enhanced Order Summary template with detailed information display
- Added comprehensive order details including events, tickets, and notes
- Improved Order Summary Data class with additional functionality
- Added access control to ensure only authorized users can view orders
- Created links from Event Summary page to Order Summary page
- Added E2E test for the Order Summary feature
- Created helper script for Order Summary page creation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-20 09:56:28 -03:00

148 lines
No EOL
6.3 KiB
TypeScript

/**
* @fileoverview E2E Tests for Order Summary page.
* This test suite verifies that trainers can view order details for their events.
*/
import { test, expect } from '@playwright/test';
import { LoginPage } from './pages/LoginPage';
import { DashboardPage } from './pages/DashboardPage';
// Test data
const TEST_USER = {
username: process.env.TEST_TRAINER_USERNAME || 'test_trainer',
password: process.env.TEST_TRAINER_PASSWORD || 'Test_password123'
};
test.describe('Order Summary Page @order-summary', () => {
test.beforeEach(async ({ page }) => {
// Login before each test
const loginPage = new LoginPage(page);
await loginPage.goto();
await loginPage.login(TEST_USER.username, TEST_USER.password);
// Verify we're logged in by checking if we're on the dashboard
const dashboardPage = new DashboardPage(page);
await expect(page).toHaveURL(/.*hvac-dashboard.*/);
await expect(dashboardPage.welcomeMessage).toBeVisible();
});
test('should navigate from dashboard to event summary to order summary', async ({ page }) => {
// Navigate to dashboard
await page.goto('/hvac-dashboard/');
await expect(page).toHaveURL(/.*hvac-dashboard.*/);
// Find an event with tickets and navigate to its event summary
// This depends on having test events with ticket sales
const eventLinks = await page.$$('a[href*="event-summary"]');
if (eventLinks.length === 0) {
test.skip('No events with ticket sales found');
}
// Click the first event link
await eventLinks[0].click();
await expect(page).toHaveURL(/.*event-summary.*/);
await expect(page.locator('h1')).toContainText('Summary');
// Look for order links in the transactions table
const orderLinks = await page.$$('a[href*="order-summary"]');
if (orderLinks.length === 0) {
test.skip('No orders found for this event');
}
// Click the first order link
await orderLinks[0].click();
await expect(page).toHaveURL(/.*order-summary.*/);
await expect(page.locator('h1')).toContainText('Order Summary');
});
test('should display correct order information', async ({ page }) => {
// Navigate directly to an order summary page
// This depends on having an order ID for testing
// For this test, we'll need to get an order ID from an event first
await page.goto('/hvac-dashboard/');
// Find an event and navigate to its summary
const eventLinks = await page.$$('a[href*="event-summary"]');
if (eventLinks.length === 0) {
test.skip('No events with ticket sales found');
}
await eventLinks[0].click();
await expect(page).toHaveURL(/.*event-summary.*/);
// Look for order links and get the first order's ID
const orderLink = await page.$('a[href*="order-summary"]');
if (!orderLink) {
test.skip('No orders found for this event');
}
const href = await orderLink.getAttribute('href');
const orderId = href.match(/order_id=(\d+)/)[1];
// Navigate to order summary page directly
await page.goto(`/order-summary/?order_id=${orderId}`);
await expect(page).toHaveURL(/.*order-summary.*/);
// Check that order details are displayed correctly
await expect(page.locator('h1')).toContainText('Order Summary');
await expect(page.locator('.hvac-details-table')).toBeVisible();
// Check for order number
const orderNumberCell = await page.locator('.hvac-details-table tr', { has: page.locator('th', { hasText: 'Order Number' }) }).locator('td');
await expect(orderNumberCell).toBeVisible();
// Check for tickets table
await expect(page.locator('.hvac-tickets-table')).toBeVisible();
await expect(page.locator('.hvac-tickets-table th', { hasText: 'Attendee' })).toBeVisible();
await expect(page.locator('.hvac-tickets-table th', { hasText: 'Email' })).toBeVisible();
await expect(page.locator('.hvac-tickets-table th', { hasText: 'Ticket Type' })).toBeVisible();
await expect(page.locator('.hvac-tickets-table th', { hasText: 'Event' })).toBeVisible();
});
test('should redirect to login page when not logged in', async ({ page }) => {
// Logout first
await page.goto('/wp-login.php?action=logout');
await page.click('text=log out');
// Attempt to access order summary page directly
await page.goto('/order-summary/?order_id=1');
// Should redirect to login page
await expect(page.locator('text=Authentication Required')).toBeVisible();
await expect(page.locator('text=Please log in to view the order summary')).toBeVisible();
await expect(page.locator('a', { hasText: 'Log In' })).toBeVisible();
});
test('should provide navigation back to event summary', async ({ page }) => {
// Find an event and navigate to its summary
await page.goto('/hvac-dashboard/');
const eventLinks = await page.$$('a[href*="event-summary"]');
if (eventLinks.length === 0) {
test.skip('No events with ticket sales found');
}
await eventLinks[0].click();
await expect(page).toHaveURL(/.*event-summary.*/);
// Get the event ID from the URL
const url = page.url();
const eventId = url.match(/event_id=(\d+)/)[1];
// Look for order links and navigate to an order
const orderLink = await page.$('a[href*="order-summary"]');
if (!orderLink) {
test.skip('No orders found for this event');
}
await orderLink.click();
await expect(page).toHaveURL(/.*order-summary.*/);
// Check for "Back to Event Summary" link
const backLink = page.locator('a', { hasText: 'Back to Event Summary' });
await expect(backLink).toBeVisible();
// Click the link and verify it goes back to the event summary
await backLink.click();
await expect(page).toHaveURL(new RegExp(`.*event-summary.*event_id=${eventId}`));
});
});