banatie-service/tests/e2e/landing.spec.ts

39 lines
1.3 KiB
TypeScript

import { test, expect } from '@playwright/test';
import { queryDb } from './helpers/db';
test.describe('Landing page', () => {
test('hero section renders with email capture form', async ({ page }) => {
await page.goto('/');
await expect(page.getByRole('heading', { level: 1 })).toContainText('AI Image Generation');
const heroForm = page.locator('#get-access');
await expect(heroForm.getByPlaceholder(/email/i)).toBeVisible();
await expect(heroForm.getByRole('button', { name: /early access/i })).toBeVisible();
await page.screenshot({ path: 'test-results/screenshots/landing-hero.png', fullPage: true });
});
test('page loads without console errors', async ({ page }) => {
const errors: string[] = [];
page.on('console', (msg) => {
if (msg.type() === 'error') errors.push(msg.text());
});
await page.goto('/');
await page.waitForLoadState('networkidle');
expect(errors).toEqual([]);
});
});
test.describe('Database cross-check', () => {
test('dev postgres is reachable and has expected tables', async () => {
const tables = queryDb<{ table_name: string }>(
"SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' ORDER BY table_name",
);
const names = tables.map((t) => t.table_name);
expect(names).toContain('api_keys');
});
});