Files
openmaic/OpenMAIC/e2e/tests/managed-provider-620.spec.ts
2026-08-16 14:58:47 +08:00

91 lines
2.9 KiB
TypeScript

import { test, expect } from '../fixtures/base';
import { HomePage } from '../pages/home.page';
import { createSettingsStorage } from '../fixtures/test-data/settings';
/**
* #620 — server-configured providers are admin-managed and not client-overridable.
* On the public learner deployment, provider settings are not exposed at all;
* both managed and unmanaged provider details stay behind the operator surface.
*
* Playwright Chromium locale is en-US.
*/
const SCREENSHOT_DIR = 'e2e/screenshots';
function serverProvidersBody(providers: Record<string, { models?: string[] }>) {
return JSON.stringify({
providers,
tts: {},
asr: {},
pdf: {},
image: {},
video: {},
webSearch: {},
});
}
test.describe.configure({ mode: 'serial' });
test.describe('#620 managed providers stay behind the operator surface', () => {
test.beforeEach(async ({ page }) => {
await page.route('**/api/server-providers', (route) =>
route.fulfill({
status: 200,
headers: { 'Content-Type': 'application/json' },
// Only openai is server-configured (managed); anthropic is not.
body: serverProvidersBody({ openai: { models: ['gpt-4o', 'gpt-4o-mini'] } }),
}),
);
await page.addInitScript(
(settings) => {
localStorage.setItem('maic:account:settings-storage', settings);
},
createSettingsStorage({
modelId: '',
providerId: 'openai',
providersConfig: {
openai: { apiKey: '' },
anthropic: { apiKey: 'sk-ant-local' },
},
autoConfigApplied: true,
}),
);
});
test('managed provider (openai) stays behind the operator surface', async ({ page }) => {
const home = new HomePage(page);
await Promise.all([page.waitForResponse('**/api/server-providers'), home.goto()]);
await expect(home.textarea).toBeVisible();
await expect(page.locator('button:has(svg.lucide-settings)')).toHaveCount(0);
await expect(page.locator('button[aria-label*=" / "]')).toHaveCount(0);
await expect(page.getByRole('dialog')).toHaveCount(0);
await page.screenshot({
path: `${SCREENSHOT_DIR}/620-managed-openai-readonly.png`,
fullPage: true,
animations: 'disabled',
caret: 'hide',
});
});
test('unmanaged provider (anthropic) also stays behind the operator surface', async ({
page,
}) => {
const home = new HomePage(page);
await Promise.all([page.waitForResponse('**/api/server-providers'), home.goto()]);
await expect(home.textarea).toBeVisible();
await expect(page.locator('button:has(svg.lucide-settings)')).toHaveCount(0);
await expect(page.locator('button[aria-label*=" / "]')).toHaveCount(0);
await expect(page.getByRole('dialog')).toHaveCount(0);
await page.screenshot({
path: `${SCREENSHOT_DIR}/620-unmanaged-anthropic-editable.png`,
fullPage: true,
animations: 'disabled',
caret: 'hide',
});
});
});