OpenMAIC-React / e2e /tests /full-happy-path.spec.ts
muthuk1's picture
Add missing files: LICENSE, Dockerfile, .github, tests, e2e, eval, scripts, configs
a0ebf39 verified
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();
}
});
});