This commit is contained in:
2025-12-01 17:27:56 +01:00
parent e7ada8aa23
commit 98a09a3f2b
41 changed files with 2341 additions and 1525 deletions

View File

@@ -0,0 +1,102 @@
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import {
PlaywrightAutomationAdapter,
FixtureServer,
} from 'packages/infrastructure/adapters/automation';
import { StepId } from 'packages/domain/value-objects/StepId';
import { PinoLogAdapter } from 'packages/infrastructure/adapters/logging/PinoLogAdapter';
import { IRACING_SELECTORS } from 'packages/infrastructure/adapters/automation/dom/IRacingSelectors';
import { executeStepWithAutoNavigationGuard } from '../support/AutoNavGuard';
describe('Workflow hosted session autonav slice (fixture-backed, real stack)', () => {
let server: FixtureServer;
let adapter: PlaywrightAutomationAdapter;
let baseUrl: string;
beforeAll(async () => {
server = new FixtureServer();
const info = await server.start();
baseUrl = info.url;
const logger = new PinoLogAdapter();
adapter = new PlaywrightAutomationAdapter(
{
headless: true,
timeout: 15_000,
baseUrl,
mode: 'real',
userDataDir: '',
},
logger,
);
const result = await adapter.connect(false);
expect(result.success).toBe(true);
expect(adapter.isConnected()).toBe(true);
});
afterAll(async () => {
await adapter.disconnect();
await server.stop();
});
async function expectStepOnContainer(
expectedContainer: keyof typeof IRACING_SELECTORS.wizard.stepContainers,
) {
const page = adapter.getPage();
expect(page).not.toBeNull();
const selector = IRACING_SELECTORS.wizard.stepContainers[expectedContainer];
const container = page!.locator(selector).first();
await container.waitFor({ state: 'attached', timeout: 10_000 });
expect(await container.count()).toBeGreaterThan(0);
}
it(
'navigates via autonav across representative steps (1 → 3 → 7 → 9 → 13 → 17)',
async () => {
await adapter.navigateToPage(server.getFixtureUrl(1));
const step1Result = await executeStepWithAutoNavigationGuard(adapter, 1, {});
expect(step1Result.success).toBe(true);
await adapter.navigateToPage(server.getFixtureUrl(3));
const step3Result = await executeStepWithAutoNavigationGuard(adapter, 3, {
sessionName: 'Autonav workflow session',
password: 'autonav',
description: 'Fixture-backed autonav slice',
});
expect(step3Result.success).toBe(true);
await expectStepOnContainer('raceInformation');
await adapter.navigateToPage(server.getFixtureUrl(7));
const step7Result = await executeStepWithAutoNavigationGuard(adapter, 7, {
practice: 10,
qualify: 10,
race: 20,
});
expect(step7Result.success).toBe(true);
await expectStepOnContainer('timeLimit');
await adapter.navigateToPage(server.getFixtureUrl(9));
const step9Result = await executeStepWithAutoNavigationGuard(adapter, 9, {
carSearch: 'Acura ARX-06',
});
expect(step9Result.success).toBe(true);
await expectStepOnContainer('cars');
await adapter.navigateToPage(server.getFixtureUrl(13));
const step13Result = await executeStepWithAutoNavigationGuard(adapter, 13, {
trackSearch: 'Spa',
});
expect(step13Result.success).toBe(true);
await expectStepOnContainer('trackOptions');
await adapter.navigateToPage(server.getFixtureUrl(17));
const step17Result = await executeStepWithAutoNavigationGuard(adapter, 17, {
trackState: 'medium',
});
expect(step17Result.success).toBe(true);
await expectStepOnContainer('raceOptions');
},
120_000,
);
});