Files
wehub-resource-sync c48612c494
CI / E2E Tests (push) Has been cancelled
CI / Lint, Typecheck & Unit Tests (push) Has been cancelled
Docs Build / Build docs site (push) Has been cancelled
Publish @openmaic packages / Build, validate & publish (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:03:23 +08:00

145 lines
4.4 KiB
TypeScript

import { test, expect } from '../fixtures/base';
import { GenerationPreviewPage } from '../pages/generation-preview.page';
import { createSettingsStorage } from '../fixtures/test-data/settings';
import { mockOutlines } from '../fixtures/test-data/scene-outlines';
const SETTINGS_STORAGE = createSettingsStorage();
const REVIEW_SETTINGS_STORAGE = createSettingsStorage({ reviewOutlineEnabled: true });
const GENERATION_SESSION = JSON.stringify({
sessionId: 'e2e-test-session',
requirements: {
requirement: '讲解光合作用',
language: 'zh-CN',
},
pdfText: '',
pdfImages: [],
imageStorageIds: [],
sceneOutlines: null,
currentStep: 'generating',
});
const PERSISTED_REVIEW_SESSION = JSON.stringify({
sessionId: 'e2e-review-session',
requirements: {
requirement: '讲解光合作用',
language: 'zh-CN',
},
pdfText: '',
pdfImages: [],
imageStorageIds: [],
sceneOutlines: mockOutlines,
languageDirective: 'Use Chinese for the generated course.',
currentStep: 'generating',
previewPhase: 'review',
});
test.describe('Generation Flow', () => {
test.beforeEach(async ({ page }) => {
await page.addInitScript(
({ settings, session }) => {
localStorage.setItem('settings-storage', settings);
sessionStorage.setItem('generationSession', session);
},
{ settings: SETTINGS_STORAGE, session: GENERATION_SESSION },
);
});
test('completes generation pipeline and redirects to classroom', async ({ page, mockApi }) => {
// Set up all API mocks
await mockApi.setupGenerationMocks();
const preview = new GenerationPreviewPage(page);
await preview.goto();
// Generation card with progress dots should be visible
await expect(preview.stepTitle).toBeVisible();
// Wait for auto-redirect to classroom
await preview.waitForRedirectToClassroom();
expect(page.url()).toMatch(/\/classroom\//);
});
test('opens outline editor from preview review opportunity and resumes generation', async ({
page,
mockApi,
}) => {
await mockApi.setupGenerationMocks();
const preview = new GenerationPreviewPage(page);
await preview.goto();
await preview.waitForReviewOpportunity();
await preview.openOutlineReview();
await expect(preview.editorTitle).toBeVisible();
await preview.confirmOutlines();
await preview.waitForRedirectToClassroom();
expect(page.url()).toMatch(/\/classroom\//);
});
test('persists always review preference from the outline editor', async ({ page, mockApi }) => {
await mockApi.setupGenerationMocks();
const preview = new GenerationPreviewPage(page);
await preview.goto();
await preview.waitForReviewOpportunity();
await preview.openOutlineReview();
await preview.enableAlwaysReview();
const persistedPreference = await page.evaluate(() => {
const raw = localStorage.getItem('settings-storage');
return raw ? JSON.parse(raw).state.reviewOutlineEnabled : undefined;
});
expect(persistedPreference).toBe(true);
await preview.confirmOutlines();
await preview.waitForRedirectToClassroom();
});
test('automatically opens outline editor when always review is enabled', async ({
page,
mockApi,
}) => {
await page.addInitScript(
({ settings, session }) => {
localStorage.setItem('settings-storage', settings);
sessionStorage.setItem('generationSession', session);
},
{ settings: REVIEW_SETTINGS_STORAGE, session: GENERATION_SESSION },
);
await mockApi.setupGenerationMocks();
const preview = new GenerationPreviewPage(page);
await preview.goto();
await preview.waitForEditor();
await expect(preview.editorTitle).toBeVisible();
await preview.confirmOutlines();
await preview.waitForRedirectToClassroom();
});
});
test('resumes generation from a persisted outline review session', async ({ page, mockApi }) => {
await page.addInitScript(
({ settings, session }) => {
localStorage.setItem('settings-storage', settings);
sessionStorage.setItem('generationSession', session);
},
{ settings: SETTINGS_STORAGE, session: PERSISTED_REVIEW_SESSION },
);
await mockApi.setupGenerationMocks();
const preview = new GenerationPreviewPage(page);
await preview.goto();
await preview.waitForEditor();
await preview.confirmOutlines();
await preview.waitForRedirectToClassroom();
expect(page.url()).toMatch(/\/classroom\//);
});