import type { AutomationResult } from 'packages/application/ports/AutomationResults'; import { StepId } from 'packages/domain/value-objects/StepId'; import { PlaywrightAutomationAdapter, FixtureServer, } from 'packages/infrastructure/adapters/automation'; import { PinoLogAdapter } from 'packages/infrastructure/adapters/logging/PinoLogAdapter'; export interface StepHarness { server: FixtureServer; adapter: PlaywrightAutomationAdapter; baseUrl: string; getFixtureUrl(step: number): string; navigateToFixtureStep(step: number): Promise; executeStep(step: number, config: Record): Promise; dispose(): Promise; } export async function createStepHarness(): Promise { const server = new FixtureServer(); const { url } = await server.start(); const logger = new PinoLogAdapter(); const adapter = new PlaywrightAutomationAdapter( { headless: true, timeout: 5000, mode: 'mock', }, logger, ); await adapter.connect(); async function navigateToFixtureStep(step: number): Promise { await adapter.navigateToPage(server.getFixtureUrl(step)); await adapter.getPage()?.waitForLoadState('domcontentloaded'); } async function executeStep( step: number, config: Record, ): Promise { return adapter.executeStep(StepId.create(step), config); } async function dispose(): Promise { await adapter.disconnect(); await server.stop(); } return { server, adapter, baseUrl: url, getFixtureUrl: (step) => server.getFixtureUrl(step), navigateToFixtureStep, executeStep, dispose, }; }