chore: establish learning module baseline
This commit is contained in:
commit
2d04197f3f
2409 files changed
+533050
No files matched your search
@@ -0,0 +1,149 @@
|
||||
import { test, expect } from '../fixtures/base';
|
||||
import { GenerationPreviewPage } from '../pages/generation-preview.page';
|
||||
import { createSettingsStorage, SETTINGS_KV_KEY } 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('maic:account: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();
|
||||
|
||||
// The persist write goes through the KVStore and is asynchronous, so poll
|
||||
// rather than reading once straight after the toggle.
|
||||
await expect
|
||||
.poll(() =>
|
||||
page.evaluate((key) => {
|
||||
const raw = localStorage.getItem(key);
|
||||
return raw ? JSON.parse(raw).state.reviewOutlineEnabled : undefined;
|
||||
}, SETTINGS_KV_KEY),
|
||||
)
|
||||
.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('maic:account: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('maic:account: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\//);
|
||||
});
|
||||
Reference in new issue
Block a user