import { test, expect } from '@playwright/test'; // Test 1: Login page displays correctly (unauthenticated) test('login page displays correctly', async ({ page }, testInfo) => { // Skip if running with authenticated storageState if (testInfo.project.name === 'default') { testInfo.skip(); } await page.goto('/login'); // Wait for page to load and check for German text await expect(page.getByText('Mit ChurchTools anmelden')).toBeVisible({ timeout: 15000 }); // Check OAuth button is visible await expect(page.getByTestId('login-oauth-button')).toBeVisible(); // Check Test Login button is visible (local env only) await expect(page.getByTestId('login-test-button')).toBeVisible(); // Check German text is present await expect(page.getByText('Melde dich mit deinem ChurchTools-Konto an, um fortzufahren.')).toBeVisible(); }); // Test 2: Dummy test login works (authenticated via storageState) test('dummy test login works', async ({ page }) => { // Already logged in via storageState from auth.setup.ts await page.goto('/dashboard'); // Wait for page to fully load await page.waitForLoadState('networkidle'); // Verify we're on dashboard (not redirected to login) // Note: If this fails, the storageState session may have expired await expect(page).toHaveURL(/.*dashboard/); }); // Test 3: Logout works (authenticated via storageState) test('logout works', async ({ page }) => { await page.goto('/dashboard'); // Wait for page to fully load await page.waitForLoadState('networkidle'); // Verify we're on dashboard first await expect(page).toHaveURL(/.*dashboard/); // Get XSRF token from cookies for CSRF protection const cookies = await page.context().cookies(); const xsrfCookie = cookies.find((c) => c.name === 'XSRF-TOKEN'); const xsrfToken = xsrfCookie ? decodeURIComponent(xsrfCookie.value) : ''; // Make a POST request to logout endpoint with CSRF token await page.request.post('/logout', { headers: { 'X-XSRF-TOKEN': xsrfToken, }, }); // Navigate to dashboard to verify we're logged out await page.goto('/dashboard'); // Should redirect to login await expect(page).toHaveURL(/.*login/); }); // Test 4: Protected routes redirect to login when unauthenticated test('protected routes redirect to login', async ({ page }, testInfo) => { // Skip if running with authenticated storageState if (testInfo.project.name === 'default') { testInfo.skip(); } // Try to access protected route await page.goto('/services'); // Should redirect to login await expect(page).toHaveURL(/.*login/); }); // Test 5: OAuth button links to correct ChurchTools URL test('oauth button links to churchtools', async ({ page }, testInfo) => { // Skip if running with authenticated storageState if (testInfo.project.name === 'default') { testInfo.skip(); } await page.goto('/login'); // Wait for page to load await expect(page.getByText('Mit ChurchTools anmelden')).toBeVisible({ timeout: 15000 }); const oauthButton = page.getByTestId('login-oauth-button'); // Verify button has href attribute pointing to churchtools await expect(oauthButton).toHaveAttribute('href', /churchtools/); });