iofficeai--aionui
130 行
5.2 KiB
TypeScript
130 行
5.2 KiB
TypeScript
/**
|
|
* WebUI Service – start / stop and configuration tests.
|
|
*
|
|
* Covers:
|
|
* - WebUI settings page loads
|
|
* - Enable/disable toggle is visible
|
|
* - Port display and access URL
|
|
* - Allow-remote toggle
|
|
* - Start / stop lifecycle (via the Switch toggle)
|
|
*/
|
|
import { test, expect } from '../fixtures';
|
|
import { goToSettings, expectBodyContainsAny, ARCO_SWITCH, takeScreenshot, waitForClassChange } from '../helpers';
|
|
|
|
test.describe('WebUI Service', () => {
|
|
/** Navigate to the WebUI settings tab. */
|
|
async function goToWebui(page: import('@playwright/test').Page): Promise<void> {
|
|
await goToSettings(page, 'webui');
|
|
}
|
|
|
|
// ── Page loads ───────────────────────────────────────────────────────────
|
|
|
|
test('webui settings page renders', async ({ page }) => {
|
|
await goToWebui(page);
|
|
await expectBodyContainsAny(page, ['WebUI', 'Web UI', 'Enable', '启用', 'webui']);
|
|
});
|
|
|
|
// ── Enable toggle ──────────────────────────────────────────────────────
|
|
|
|
test('enable toggle is visible', async ({ page }) => {
|
|
await goToWebui(page);
|
|
|
|
const switches = page.locator(ARCO_SWITCH);
|
|
await expect(switches.first()).toBeVisible({ timeout: 5000 });
|
|
});
|
|
|
|
// ── Port & URL ─────────────────────────────────────────────────────────
|
|
|
|
test('displays default port 25808', async ({ page }) => {
|
|
await goToWebui(page);
|
|
|
|
const body = await page.locator('body').textContent();
|
|
// Port may appear in UI text or may only appear when service is running.
|
|
// Verify the WebUI panel itself is rendered (desktop mode).
|
|
const hasPort = body?.includes('25808');
|
|
const hasWebUIPanel = body?.includes('WebUI') || body?.includes('Enable');
|
|
expect(hasPort || hasWebUIPanel).toBeTruthy();
|
|
});
|
|
|
|
test('displays localhost access URL', async ({ page }) => {
|
|
await goToWebui(page);
|
|
|
|
const body = await page.locator('body').textContent();
|
|
// The URL (http://localhost:25808) is only shown when the service is running.
|
|
// In test environment, the service may not be started, so just verify
|
|
// the WebUI page renders properly with relevant content.
|
|
const hasUrl = body?.includes('localhost');
|
|
const hasWebUIContent = body?.includes('WebUI') || body?.includes('Enable') || body?.includes('启用');
|
|
expect(hasUrl || hasWebUIContent).toBeTruthy();
|
|
});
|
|
|
|
// ── Allow remote toggle ────────────────────────────────────────────────
|
|
|
|
test('allow-remote switch is present', async ({ page }) => {
|
|
await goToWebui(page);
|
|
|
|
// There should be at least 2 switches: enable WebUI + allow remote
|
|
const switches = page.locator(ARCO_SWITCH);
|
|
const count = await switches.count();
|
|
expect(count).toBeGreaterThanOrEqual(2);
|
|
});
|
|
|
|
// ── Start / Stop lifecycle ─────────────────────────────────────────────
|
|
|
|
test('can toggle WebUI service on and off', async ({ page }) => {
|
|
await goToWebui(page);
|
|
|
|
const switches = page.locator(ARCO_SWITCH);
|
|
await expect(switches.first()).toBeVisible({ timeout: 5000 });
|
|
|
|
const enableSwitch = switches.first();
|
|
const classBefore = await enableSwitch.getAttribute('class');
|
|
const wasRunning = classBefore?.includes('arco-switch-checked');
|
|
|
|
// Toggle on
|
|
if (!wasRunning) {
|
|
await enableSwitch.click();
|
|
// Wait for server startup: observe class change or running indicator
|
|
try {
|
|
await page.waitForFunction(
|
|
() => {
|
|
const text = document.body.textContent || '';
|
|
return (
|
|
text.includes('✓') || text.includes('Running') || text.includes('运行中') || text.includes('running')
|
|
);
|
|
},
|
|
{ timeout: 5000 }
|
|
);
|
|
} catch {
|
|
// Server may not start in test env – continue
|
|
}
|
|
|
|
const body = await page.locator('body').textContent();
|
|
const isRunning =
|
|
body?.includes('✓') || body?.includes('Running') || body?.includes('运行中') || body?.includes('running');
|
|
|
|
// If it started, toggle off to clean up
|
|
if (isRunning) {
|
|
await enableSwitch.click();
|
|
await waitForClassChange(enableSwitch, 2000);
|
|
}
|
|
} else {
|
|
// Was already running – toggle off then back on
|
|
await enableSwitch.click();
|
|
await waitForClassChange(enableSwitch, 2000);
|
|
|
|
// Toggle back on to restore
|
|
await enableSwitch.click();
|
|
await waitForClassChange(enableSwitch, 2000);
|
|
}
|
|
});
|
|
|
|
// ── Screenshot ─────────────────────────────────────────────────────────
|
|
|
|
test('screenshot: webui settings', async ({ page }) => {
|
|
test.skip(!process.env.E2E_SCREENSHOTS, 'screenshots disabled');
|
|
await goToWebui(page);
|
|
await takeScreenshot(page, 'webui-settings');
|
|
});
|
|
});
|