37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
import { test, expect, Page } from '@playwright/test';
|
|
|
|
// Shared login function
|
|
async function login(page: Page, baseURL: string | undefined) {
|
|
const appUrl = baseURL ?? process.env.APP_URL ?? 'http://localhost:8080';
|
|
|
|
await page.goto(appUrl + '/login');
|
|
|
|
const email = process.env.E2E_EMAIL || 'test@tududi.com';
|
|
const password = process.env.E2E_PASSWORD || 'password123';
|
|
|
|
await page.getByLabel('Email').fill(email);
|
|
await page.getByLabel('Password').fill(password);
|
|
await page.getByRole('button', { name: /login/i }).click();
|
|
|
|
await expect(page).toHaveURL(/\/today$/);
|
|
|
|
return appUrl;
|
|
}
|
|
|
|
test('upcoming view loads and displays upcoming section', async ({ page, baseURL }) => {
|
|
const appUrl = await login(page, baseURL);
|
|
|
|
// Navigate to upcoming view
|
|
await page.goto(appUrl + '/upcoming');
|
|
await expect(page).toHaveURL(/\/upcoming/);
|
|
|
|
// Verify the page heading is visible
|
|
await expect(page.getByRole('heading', { name: 'Upcoming' })).toBeVisible();
|
|
|
|
// Wait for content to load
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Verify we don't have the task creation input (upcoming view is read-only)
|
|
const taskInput = page.locator('[data-testid="new-task-input"]');
|
|
await expect(taskInput).not.toBeVisible();
|
|
});
|