97 lines
3.2 KiB
JavaScript
97 lines
3.2 KiB
JavaScript
/**
|
|
* WebDriverIO config for Electrobun stack E2E tests.
|
|
*
|
|
* Extends shared config with WebKitWebDriver lifecycle and optional
|
|
* PTY daemon management. Port: 9761 (per project convention).
|
|
*/
|
|
|
|
import { execSync } from 'node:child_process';
|
|
import { resolve, dirname } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
import { existsSync, rmSync } from 'node:fs';
|
|
import { sharedConfig } from './wdio.shared.conf.js';
|
|
|
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
const projectRoot = resolve(__dirname, '../..');
|
|
const electrobunRoot = resolve(projectRoot, 'ui-electrobun');
|
|
|
|
// Use the Electrobun fixture generator (different groups.json format)
|
|
let fixture;
|
|
try {
|
|
const { createTestFixture } = await import('../../ui-electrobun/tests/e2e/fixtures.ts');
|
|
fixture = createTestFixture('agor-ebun-unified');
|
|
} catch {
|
|
// Fall back to the Tauri fixture generator if Electrobun fixtures not available
|
|
const { createTestFixture } = await import('./infra/fixtures.ts');
|
|
fixture = createTestFixture('agor-ebun-unified');
|
|
}
|
|
|
|
process.env.AGOR_TEST = '1';
|
|
process.env.AGOR_TEST_DATA_DIR = fixture.dataDir;
|
|
process.env.AGOR_TEST_CONFIG_DIR = fixture.configDir;
|
|
|
|
const WEBDRIVER_PORT = 9761;
|
|
|
|
console.log(`[electrobun] Test fixture at ${fixture.rootDir ?? fixture.configDir}`);
|
|
|
|
export const config = {
|
|
...sharedConfig,
|
|
|
|
port: WEBDRIVER_PORT,
|
|
|
|
capabilities: [{
|
|
'wdio:enforceWebDriverClassic': true,
|
|
browserName: 'webkit',
|
|
}],
|
|
|
|
onPrepare() {
|
|
// Try multiple binary paths (dev vs canary vs production)
|
|
const candidates = [
|
|
resolve(electrobunRoot, 'build/dev-linux-x64/AgentOrchestrator-dev/AgentOrchestrator-dev'),
|
|
resolve(electrobunRoot, 'build/Agent Orchestrator'),
|
|
resolve(electrobunRoot, 'build/AgentOrchestrator'),
|
|
];
|
|
const electrobunBinary = candidates.find(p => existsSync(p));
|
|
|
|
if (!electrobunBinary && !process.env.SKIP_BUILD) {
|
|
console.log('Building Electrobun...');
|
|
try {
|
|
execSync('npx vite build', { cwd: electrobunRoot, stdio: 'inherit' });
|
|
// electrobun build may not be available — skip if missing
|
|
try { execSync('electrobun build --env=dev', { cwd: electrobunRoot, stdio: 'inherit' }); } catch {}
|
|
} catch (e) {
|
|
console.warn('Build failed:', e.message);
|
|
}
|
|
}
|
|
|
|
const finalBinary = candidates.find(p => existsSync(p));
|
|
if (!finalBinary) {
|
|
console.warn('Electrobun binary not found — tests will use WebKitWebDriver with dev server');
|
|
}
|
|
},
|
|
|
|
async before() {
|
|
// Wait for Electrobun app to load
|
|
await browser.waitUntil(
|
|
async () => {
|
|
const hasEl = await browser.execute(() =>
|
|
document.querySelector('.app-shell') !== null
|
|
|| document.querySelector('.project-grid') !== null
|
|
|| document.querySelector('.status-bar') !== null
|
|
);
|
|
return hasEl;
|
|
},
|
|
{ timeout: 20_000, interval: 500, timeoutMsg: 'Electrobun app did not load in 20s' },
|
|
);
|
|
console.log('[electrobun] App loaded.');
|
|
},
|
|
|
|
afterSession() {
|
|
const cleanup = fixture.cleanup ?? (() => {
|
|
try {
|
|
if (fixture.rootDir) rmSync(fixture.rootDir, { recursive: true, force: true });
|
|
} catch { /* best-effort */ }
|
|
});
|
|
cleanup();
|
|
},
|
|
};
|