Files
openmaic/OpenMAIC/e2e/tests/deployment-role-boundary.spec.ts
2026-08-16 14:58:47 +08:00

73 lines
2.4 KiB
TypeScript

import { expect, test } from '../fixtures/base';
import { createSettingsStorage } from '../fixtures/test-data/settings';
const SETTINGS_STORAGE = createSettingsStorage();
test.describe('deployment role boundary', () => {
test.beforeEach(async ({ page }) => {
await page.addInitScript((settings) => {
localStorage.setItem('maic:account:settings-storage', settings);
localStorage.setItem('locale', 'en-US');
}, SETTINGS_STORAGE);
});
test('learner deployment hides and rejects the operations workbench', async ({ page }) => {
await page.goto('/');
await expect(page.locator('button:has(svg.lucide-layers)')).toHaveCount(0);
await expect(page.locator('button:has(svg.lucide-settings)')).toHaveCount(0);
await expect(page.locator('button[aria-label*=" / "]')).toHaveCount(0);
const catalogEntry = page.getByRole('button', { name: 'Open learner catalog' });
await expect(catalogEntry).toBeVisible();
await catalogEntry.click();
await expect(page).toHaveURL(/\/learn$/);
const response = await page.request.get('/api/courses');
expect(response.status()).toBe(403);
await expect(response.json()).resolves.toMatchObject({
success: false,
errorCode: 'FORBIDDEN',
});
await page.goto('/courses');
await expect(page).toHaveURL(/\/$/);
await page.goto('/publish');
await expect(page).toHaveURL(/\/$/);
});
test('learner task panel loads single-courseware jobs without probing ops courses', async ({
page,
}) => {
let courseRequestCount = 0;
page.on('request', (request) => {
if (new URL(request.url()).pathname === '/api/courses') courseRequestCount += 1;
});
await page.route('**/api/generate-classroom?limit=50', async (route) => {
await route.fulfill({
contentType: 'application/json',
body: JSON.stringify({
items: [
{
jobId: 'single-course-job',
status: 'queued',
step: 'queued',
progress: 0,
message: 'Waiting',
createdAt: '2026-08-15T00:00:00.000Z',
requirement: 'A learner-created single courseware',
scenesGenerated: 0,
done: false,
},
],
}),
});
});
await page.goto('/tasks');
await expect(page.getByText('A learner-created single courseware')).toBeVisible();
expect(courseRequestCount).toBe(0);
});
});