File size: 2,969 Bytes
a0ebf39 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | import { test, expect } from '../fixtures/base';
import { HomePage } from '../pages/home.page';
import { GenerationPreviewPage } from '../pages/generation-preview.page';
import { ClassroomPage } from '../pages/classroom.page';
import { createSettingsStorage } from '../fixtures/test-data/settings';
const SETTINGS_STORAGE = createSettingsStorage({ sidebarCollapsed: false });
test.describe('Full Happy Path', () => {
test.beforeEach(async ({ page, mockApi }) => {
// Pre-seed settings in localStorage (all tests do this)
await page.addInitScript((settings) => {
localStorage.setItem('settings-storage', settings);
}, SETTINGS_STORAGE);
// Set up generation API mocks BEFORE any navigation โ
// generation auto-starts when generation-preview mounts.
await mockApi.setupGenerationMocks();
});
test('home โ generation-preview โ classroom with scene navigation', async ({ page }) => {
// โโ Phase 1: Home page โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
const home = new HomePage(page);
await home.goto();
// Core UI elements visible
await expect(home.logo).toBeVisible();
await expect(home.textarea).toBeVisible();
await expect(home.enterButton).toBeDisabled();
// Fill requirement text โ submit button activates
await home.fillRequirement('่ฎฒ่งฃๅ
ๅไฝ็จ');
await expect(home.enterButton).toBeEnabled();
// Submit โ navigate to generation-preview
await home.submit();
await page.waitForURL(/\/generation-preview/);
// โโ Phase 2: Generation preview โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
const preview = new GenerationPreviewPage(page);
// Generation progress UI should be visible
await expect(preview.stepTitle).toBeVisible();
// Wait for mocked generation to complete and auto-redirect to classroom
await preview.waitForRedirectToClassroom();
expect(page.url()).toMatch(/\/classroom\//);
// โโ Phase 3: Classroom โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
const classroom = new ClassroomPage(page);
await classroom.waitForLoaded();
// At least one scene should be visible in the sidebar
await expect(classroom.sidebarScenes.first()).toBeVisible({ timeout: 10_000 });
// First scene title should match mock data
await expect(classroom.getSceneTitle(0)).toContainText('ๅ
ๅไฝ็จ');
// If more than one scene item is rendered, verify scene switching works
const sceneCount = await classroom.sidebarScenes.count();
if (sceneCount > 1) {
await classroom.clickScene(1);
// Verify the clicked scene is visible (active)
await expect(classroom.sidebarScenes.nth(1)).toBeVisible();
}
});
});
|