74 lines
3.1 KiB
TypeScript
74 lines
3.1 KiB
TypeScript
import fs from 'node:fs/promises';
|
|
import path from 'node:path';
|
|
import { test, expect } from '@playwright/test';
|
|
|
|
type RoleScenario = {
|
|
roleKey: string;
|
|
schemaId: string;
|
|
profession?: string;
|
|
};
|
|
|
|
const ROLE_SCENARIOS: RoleScenario[] = [
|
|
{ roleKey: 'COMPANY', schemaId: 'company_onboarding_v1' },
|
|
{ roleKey: 'JOB_SEEKER', schemaId: 'jobseeker_onboarding_v1' },
|
|
{ roleKey: 'CUSTOMER', schemaId: 'customer_onboarding_v1' },
|
|
{ roleKey: 'PHOTOGRAPHER', schemaId: 'photographer_onboarding_v1', profession: 'photographer' },
|
|
{ roleKey: 'MAKEUP_ARTIST', schemaId: 'makeup_artist_onboarding_v1', profession: 'makeup_artist' },
|
|
{ roleKey: 'TUTOR', schemaId: 'tutor_onboarding_v1', profession: 'tutor' },
|
|
{ roleKey: 'DEVELOPER', schemaId: 'developer_onboarding_v1', profession: 'developer' },
|
|
{ roleKey: 'VIDEO_EDITOR', schemaId: 'video_editor_onboarding_v1', profession: 'video_editor' },
|
|
{ roleKey: 'GRAPHIC_DESIGNER', schemaId: 'graphic_designer_onboarding_v1', profession: 'graphic_designer' },
|
|
{ roleKey: 'SOCIAL_MEDIA_MANAGER', schemaId: 'social_media_manager_onboarding_v1', profession: 'social_media_manager' },
|
|
{ roleKey: 'FITNESS_TRAINER', schemaId: 'fitness_trainer_onboarding_v1', profession: 'fitness_trainer' },
|
|
{ roleKey: 'CATERING_SERVICES', schemaId: 'catering_services_onboarding_v1', profession: 'catering_services' },
|
|
];
|
|
|
|
const OUTPUT_ROOT = path.join(process.cwd(), 'tests', 'visual-artifacts', 'external-roles');
|
|
|
|
async function ensureFolders() {
|
|
await fs.mkdir(path.join(OUTPUT_ROOT, 'onboarding'), { recursive: true });
|
|
await fs.mkdir(path.join(OUTPUT_ROOT, 'dashboard'), { recursive: true });
|
|
}
|
|
|
|
function roleSlug(roleKey: string) {
|
|
return roleKey.toLowerCase();
|
|
}
|
|
|
|
test('capture onboarding + dashboard screenshots for all external roles', async ({ page }) => {
|
|
test.setTimeout(240_000);
|
|
await ensureFolders();
|
|
await page.setViewportSize({ width: 1440, height: 900 });
|
|
|
|
for (const role of ROLE_SCENARIOS) {
|
|
const params = new URLSearchParams({
|
|
roleKey: role.roleKey,
|
|
schemaId: role.schemaId,
|
|
});
|
|
if (role.profession) {
|
|
params.set('profession', role.profession);
|
|
params.set('intent', 'professional');
|
|
} else if (role.roleKey === 'COMPANY') {
|
|
params.set('intent', 'company');
|
|
} else if (role.roleKey === 'CUSTOMER') {
|
|
params.set('intent', 'customer');
|
|
} else if (role.roleKey === 'JOB_SEEKER') {
|
|
params.set('intent', 'job_seeker');
|
|
}
|
|
|
|
await page.goto(`/onboarding?${params.toString()}`, { waitUntil: 'domcontentloaded' });
|
|
await page.waitForTimeout(1400);
|
|
await expect(page.locator('body')).not.toContainText('TypeError');
|
|
await page.screenshot({
|
|
path: path.join(OUTPUT_ROOT, 'onboarding', `${roleSlug(role.roleKey)}.png`),
|
|
fullPage: true,
|
|
});
|
|
|
|
await page.goto(`/dashboard?_preview=${encodeURIComponent(role.roleKey)}`, { waitUntil: 'domcontentloaded' });
|
|
await page.waitForTimeout(1000);
|
|
await expect(page.locator('body')).not.toContainText('TypeError');
|
|
await page.screenshot({
|
|
path: path.join(OUTPUT_ROOT, 'dashboard', `${roleSlug(role.roleKey)}.png`),
|
|
fullPage: true,
|
|
});
|
|
}
|
|
});
|