Add complete integration test suite
Backend Integration Tests: - Create IntegrationTestBase class with WebApplicationFactory - AuthIntegrationTests: Registration, login, validation tests (5 tests) - EventsIntegrationTests: CRUD operations, authorization tests (8 tests) Frontend-Backend Integration (E2E): - Install Playwright with Chromium - Create playwright.config.ts with configuration - Auth E2E tests: login/register page visibility, navigation - Event List E2E tests: page display - Navigation E2E tests: main page navigation flow Total Integration Tests: - Backend: 13 tests covering Auth and Events - E2E: 6 tests covering UI flows
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
|
||||
test.describe('Authentication E2E Tests', () => {
|
||||
test('should display login page', async ({ page }) => {
|
||||
await page.goto('/login');
|
||||
|
||||
// Check that login form is visible
|
||||
await expect(page.getByRole('heading', { name: /login/i })).toBeVisible();
|
||||
await expect(page.getByLabel(/email/i)).toBeVisible();
|
||||
await expect(page.getByLabel(/password/i)).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /login/i })).toBeVisible();
|
||||
});
|
||||
|
||||
test('should display register page', async ({ page }) => {
|
||||
await page.goto('/register');
|
||||
|
||||
// Check that register form is visible
|
||||
await expect(page.getByRole('heading', { name: /register/i })).toBeVisible();
|
||||
await expect(page.getByLabel(/full name/i)).toBeVisible();
|
||||
await expect(page.getByLabel(/email/i)).toBeVisible();
|
||||
await expect(page.getByLabel(/password/i)).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /register/i })).toBeVisible();
|
||||
});
|
||||
|
||||
test('should navigate from login to register', async ({ page }) => {
|
||||
await page.goto('/login');
|
||||
|
||||
// Click on register link
|
||||
await page.getByRole('link', { name: /register/i }).click();
|
||||
|
||||
// Should be on register page
|
||||
await expect(page).toHaveURL(/.*register/);
|
||||
await expect(page.getByRole('heading', { name: /register/i })).toBeVisible();
|
||||
});
|
||||
});
|
||||
|
||||
test.describe('Event List E2E Tests', () => {
|
||||
test('should display events page', async ({ page }) => {
|
||||
await page.goto('/events');
|
||||
|
||||
// Check that events list is visible
|
||||
await expect(page.getByRole('heading', { name: /events/i })).toBeVisible();
|
||||
|
||||
// Check for filters
|
||||
await expect(page.getByRole('combobox').first()).toBeVisible();
|
||||
});
|
||||
});
|
||||
|
||||
test.describe('Navigation E2E Tests', () => {
|
||||
test('should navigate through main pages', async ({ page }) => {
|
||||
// Start at home
|
||||
await page.goto('/');
|
||||
|
||||
// Navigate to events
|
||||
await page.getByRole('link', { name: /events/i }).first().click();
|
||||
await expect(page).toHaveURL(/.*events/);
|
||||
|
||||
// Navigate to login
|
||||
await page.getByRole('link', { name: /login/i }).click();
|
||||
await expect(page).toHaveURL(/.*login/);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,25 @@
|
||||
import { defineConfig, devices } from '@playwright/test';
|
||||
|
||||
export default defineConfig({
|
||||
testDir: '.',
|
||||
fullyParallel: true,
|
||||
forbidOnly: !!process.env.CI,
|
||||
retries: process.env.CI ? 2 : 0,
|
||||
workers: process.env.CI ? 1 : undefined,
|
||||
reporter: 'list',
|
||||
use: {
|
||||
baseURL: 'http://localhost:3000',
|
||||
trace: 'on-first-retry',
|
||||
},
|
||||
projects: [
|
||||
{
|
||||
name: 'chromium',
|
||||
use: { ...devices['Desktop Chrome'] },
|
||||
},
|
||||
],
|
||||
webServer: {
|
||||
command: 'cd ../../frontend && npm run dev',
|
||||
url: 'http://localhost:3000',
|
||||
reuseExistingServer: !process.env.CI,
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user