Files
metabuilder/frontends/nextjs/e2e/crud.spec.ts
2025-12-25 13:33:54 +00:00

59 lines
1.9 KiB
TypeScript

import { test, expect } from '@playwright/test';
// Helper function to navigate to login page
async function navigateToLogin(page: any) {
await page.goto('/');
// Click "Sign In" button to navigate to login page
await page.getByRole('button', { name: /sign in|get started/i }).first().click();
// Wait for login form to appear
await page.waitForLoadState('networkidle');
}
test.describe('Application Interface', () => {
test('should have landing page with navigation options', async ({ page }) => {
await page.goto('/');
await page.waitForLoadState('domcontentloaded');
// Check for navigation buttons
const signInButton = page.getByRole('button', { name: /sign in/i });
await expect(signInButton).toBeVisible();
});
test('should navigate to login when clicking sign in', async ({ page }) => {
await page.goto('/');
// Click sign in
await page.getByRole('button', { name: /sign in|get started/i }).first().click();
// Should see login form
await expect(page.getByLabel(/username/i)).toBeVisible({ timeout: 5000 });
});
test('should have descriptive content on landing page', async ({ page }) => {
await page.goto('/');
await page.waitForLoadState('networkidle');
// Check if landing page has meaningful content
const bodyText = await page.textContent('body');
expect(bodyText).toBeTruthy();
expect(bodyText!.length).toBeGreaterThan(100);
});
});
test.describe('Login Interface', () => {
test('should have username and password fields', async ({ page }) => {
await navigateToLogin(page);
// Check for form elements
await expect(page.getByLabel(/username/i)).toBeVisible();
await expect(page.getByLabel(/password/i)).toBeVisible();
});
test('should have submit button', async ({ page }) => {
await navigateToLogin(page);
// Check for login button
await expect(page.getByRole('button', { name: /login|sign in/i })).toBeVisible();
});
});