mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-30 06:32:24 +00:00
125 lines
4.1 KiB
TypeScript
125 lines
4.1 KiB
TypeScript
import { browser, expect } from '@wdio/globals';
|
|
|
|
import { waitForApp, waitForAppReady } from '../helpers/app-helpers';
|
|
import { triggerAuthDeepLinkBypass } from '../helpers/deep-link-helpers';
|
|
import {
|
|
clickButton,
|
|
dumpAccessibilityTree,
|
|
hasAppChrome,
|
|
textExists,
|
|
waitForText,
|
|
waitForWebView,
|
|
waitForWindowVisible,
|
|
} from '../helpers/element-helpers';
|
|
import { isTauriDriver } from '../helpers/platform';
|
|
import { navigateViaHash } from '../helpers/shared-flows';
|
|
import { clearRequestLog, startMockServer, stopMockServer } from '../mock-server';
|
|
|
|
function stepLog(message: string, context?: unknown): void {
|
|
const stamp = new Date().toISOString();
|
|
if (context === undefined) {
|
|
console.log(`[ScreenIntelligenceE2E][${stamp}] ${message}`);
|
|
return;
|
|
}
|
|
console.log(`[ScreenIntelligenceE2E][${stamp}] ${message}`, JSON.stringify(context, null, 2));
|
|
}
|
|
|
|
async function waitForCaptureOutcome(timeoutMs = 20_000): Promise<'success' | 'failure'> {
|
|
const deadline = Date.now() + timeoutMs;
|
|
while (Date.now() < deadline) {
|
|
if (
|
|
(await textExists('Success')) &&
|
|
((await textExists('windowed')) || (await textExists('fullscreen')))
|
|
) {
|
|
return 'success';
|
|
}
|
|
if (
|
|
(await textExists('Failed')) ||
|
|
(await textExists('screen recording permission is not granted')) ||
|
|
(await textExists('screen capture is unsupported on this platform')) ||
|
|
(await textExists('screen capture failed'))
|
|
) {
|
|
return 'failure';
|
|
}
|
|
await browser.pause(500);
|
|
}
|
|
throw new Error('Timed out waiting for screen capture outcome');
|
|
}
|
|
|
|
describe('Screen Intelligence', () => {
|
|
before(async () => {
|
|
stepLog('Starting Screen Intelligence E2E');
|
|
await startMockServer();
|
|
await waitForApp();
|
|
clearRequestLog();
|
|
});
|
|
|
|
after(async () => {
|
|
await stopMockServer();
|
|
});
|
|
|
|
it('authenticates and reaches the app shell', async () => {
|
|
await triggerAuthDeepLinkBypass('e2e-screen-intelligence-user');
|
|
await waitForWindowVisible(25_000);
|
|
await waitForWebView(15_000);
|
|
await waitForAppReady(15_000);
|
|
expect(await hasAppChrome()).toBe(true);
|
|
});
|
|
|
|
it('opens the Screen Intelligence settings route', async function () {
|
|
if (!isTauriDriver()) {
|
|
this.skip();
|
|
return;
|
|
}
|
|
|
|
await navigateViaHash('/settings/screen-intelligence');
|
|
const currentHash = await browser.execute(() => window.location.hash);
|
|
stepLog('Navigated to screen intelligence route', { currentHash });
|
|
|
|
expect(currentHash).toContain('/settings/screen-intelligence');
|
|
await waitForText('Screen Intelligence', 10_000);
|
|
await waitForText('Screen Intelligence Policy', 10_000);
|
|
await waitForText('Permissions', 10_000);
|
|
});
|
|
|
|
it('triggers capture test and reaches a stable UI outcome', async function () {
|
|
if (!isTauriDriver()) {
|
|
this.skip();
|
|
return;
|
|
}
|
|
|
|
if (!(await textExists('Screen Intelligence Policy'))) {
|
|
await navigateViaHash('/settings/screen-intelligence');
|
|
await waitForText('Screen Intelligence Policy', 10_000);
|
|
}
|
|
|
|
await clickButton('Expand', 10_000);
|
|
await waitForText('Capture Test', 10_000);
|
|
await clickButton('Test Capture', 10_000);
|
|
|
|
const outcome = await waitForCaptureOutcome();
|
|
stepLog('Capture test outcome', { outcome });
|
|
|
|
if (outcome === 'success') {
|
|
const hasPreviewImage = await browser.execute(() => {
|
|
const img = document.querySelector('img[alt="Capture test result"]');
|
|
return !!img && !!img.getAttribute('src');
|
|
});
|
|
expect(hasPreviewImage).toBe(true);
|
|
expect((await textExists('windowed')) || (await textExists('fullscreen'))).toBe(true);
|
|
return;
|
|
}
|
|
|
|
const hasFailureGuidance =
|
|
(await textExists('Failed')) ||
|
|
(await textExists('screen recording permission is not granted')) ||
|
|
(await textExists('screen capture is unsupported on this platform')) ||
|
|
(await textExists('screen capture failed'));
|
|
if (!hasFailureGuidance) {
|
|
const tree = await dumpAccessibilityTree();
|
|
stepLog('Capture failure outcome missing expected guidance', { tree: tree.slice(0, 4000) });
|
|
}
|
|
expect(hasFailureGuidance).toBe(true);
|
|
});
|
|
});
|