From 65f74e124aa79c858f2e1cdffedef75d8cece27f Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Sun, 30 Nov 2025 16:45:59 +0100 Subject: [PATCH] wip --- .../steps/step-13-track-options.e2e.test.ts | 35 ++++++++++++ .../e2e/steps/step-14-time-of-day.e2e.test.ts | 35 ++++++++++++ tests/e2e/steps/step-15-weather.e2e.test.ts | 35 ++++++++++++ .../steps/step-16-race-options.e2e.test.ts | 38 +++++++++++++ .../steps/step-17-team-driving.e2e.test.ts | 54 +++++++++++++++++++ .../step-18-track-conditions.e2e.test.ts | 32 +++++++++++ 6 files changed, 229 insertions(+) create mode 100644 tests/e2e/steps/step-13-track-options.e2e.test.ts create mode 100644 tests/e2e/steps/step-14-time-of-day.e2e.test.ts create mode 100644 tests/e2e/steps/step-15-weather.e2e.test.ts create mode 100644 tests/e2e/steps/step-16-race-options.e2e.test.ts create mode 100644 tests/e2e/steps/step-17-team-driving.e2e.test.ts create mode 100644 tests/e2e/steps/step-18-track-conditions.e2e.test.ts diff --git a/tests/e2e/steps/step-13-track-options.e2e.test.ts b/tests/e2e/steps/step-13-track-options.e2e.test.ts new file mode 100644 index 000000000..2e2bfc3b4 --- /dev/null +++ b/tests/e2e/steps/step-13-track-options.e2e.test.ts @@ -0,0 +1,35 @@ +import { describe, it, expect, beforeEach, afterEach } from 'vitest'; +import type { StepHarness } from '../support/StepHarness'; +import { createStepHarness } from '../support/StepHarness'; + +describe('Step 13 – track options', () => { + let harness: StepHarness; + + beforeEach(async () => { + harness = await createStepHarness(); + }); + + afterEach(async () => { + await harness.dispose(); + }); + + it('executes on Track Options page in mock wizard', async () => { + await harness.navigateToFixtureStep(13); + + const page = harness.adapter.getPage(); + expect(page).not.toBeNull(); + + const sidebarTrackOptions = await page!.textContent( + '#wizard-sidebar-link-set-track-options', + ); + expect(sidebarTrackOptions).toContain('Track Options'); + + const bodyText = await page!.textContent('body'); + expect(bodyText).toContain('Create Starting Grid'); + + const result = await harness.executeStep(13, {}); + + expect(result.success).toBe(true); + expect(result.error).toBeUndefined(); + }); +}); \ No newline at end of file diff --git a/tests/e2e/steps/step-14-time-of-day.e2e.test.ts b/tests/e2e/steps/step-14-time-of-day.e2e.test.ts new file mode 100644 index 000000000..eb601db02 --- /dev/null +++ b/tests/e2e/steps/step-14-time-of-day.e2e.test.ts @@ -0,0 +1,35 @@ +import { describe, it, expect, beforeEach, afterEach } from 'vitest'; +import type { StepHarness } from '../support/StepHarness'; +import { createStepHarness } from '../support/StepHarness'; + +describe('Step 14 – time of day', () => { + let harness: StepHarness; + + beforeEach(async () => { + harness = await createStepHarness(); + }); + + afterEach(async () => { + await harness.dispose(); + }); + + it('executes on Time of Day page in mock wizard', async () => { + await harness.navigateToFixtureStep(14); + + const page = harness.adapter.getPage(); + expect(page).not.toBeNull(); + + const sidebarTimeOfDay = await page!.textContent( + '#wizard-sidebar-link-set-time-of-day', + ); + expect(sidebarTimeOfDay).toContain('Time of Day'); + + const result = await harness.executeStep(14, {}); + + expect(result.success).toBe(true); + expect(result.error).toBeUndefined(); + + const footerText = await page!.textContent('.wizard-footer'); + expect(footerText).toMatch(/Weather/i); + }); +}); \ No newline at end of file diff --git a/tests/e2e/steps/step-15-weather.e2e.test.ts b/tests/e2e/steps/step-15-weather.e2e.test.ts new file mode 100644 index 000000000..05996ed3b --- /dev/null +++ b/tests/e2e/steps/step-15-weather.e2e.test.ts @@ -0,0 +1,35 @@ +import { describe, it, expect, beforeEach, afterEach } from 'vitest'; +import type { StepHarness } from '../support/StepHarness'; +import { createStepHarness } from '../support/StepHarness'; + +describe('Step 15 – weather', () => { + let harness: StepHarness; + + beforeEach(async () => { + harness = await createStepHarness(); + }); + + afterEach(async () => { + await harness.dispose(); + }); + + it('executes on Weather page in mock wizard', async () => { + await harness.navigateToFixtureStep(15); + + const page = harness.adapter.getPage(); + expect(page).not.toBeNull(); + + const sidebarWeather = await page!.textContent( + '#wizard-sidebar-link-set-weather', + ); + expect(sidebarWeather).toContain('Weather'); + + const bodyText = await page!.textContent('body'); + expect(bodyText).toMatch(/Weather Mode|Event weather/i); + + const result = await harness.executeStep(15, { timeOfDay: 800 }); + + expect(result.success).toBe(true); + expect(result.error).toBeUndefined(); + }); +}); \ No newline at end of file diff --git a/tests/e2e/steps/step-16-race-options.e2e.test.ts b/tests/e2e/steps/step-16-race-options.e2e.test.ts new file mode 100644 index 000000000..3ba8f78dc --- /dev/null +++ b/tests/e2e/steps/step-16-race-options.e2e.test.ts @@ -0,0 +1,38 @@ +import { describe, it, expect, beforeEach, afterEach } from 'vitest'; +import type { StepHarness } from '../support/StepHarness'; +import { createStepHarness } from '../support/StepHarness'; + +describe('Step 16 – race options', () => { + let harness: StepHarness; + + beforeEach(async () => { + harness = await createStepHarness(); + }); + + afterEach(async () => { + await harness.dispose(); + }); + + it('executes on Race Options page in mock wizard', async () => { + await harness.navigateToFixtureStep(16); + + const page = harness.adapter.getPage(); + expect(page).not.toBeNull(); + + const sidebarRaceOptions = await page!.textContent( + '#wizard-sidebar-link-set-race-options', + ); + expect(sidebarRaceOptions).toContain('Race Options'); + + const bodyText = await page!.textContent('body'); + expect(bodyText).toMatch(/No Incident Penalty|Select Discipline/i); + + const result = await harness.executeStep(16, {}); + + expect(result.success).toBe(true); + expect(result.error).toBeUndefined(); + + const footerText = await page!.textContent('.wizard-footer'); + expect(footerText).toMatch(/Track Conditions/i); + }); +}); \ No newline at end of file diff --git a/tests/e2e/steps/step-17-team-driving.e2e.test.ts b/tests/e2e/steps/step-17-team-driving.e2e.test.ts new file mode 100644 index 000000000..8585d930f --- /dev/null +++ b/tests/e2e/steps/step-17-team-driving.e2e.test.ts @@ -0,0 +1,54 @@ +import { describe, it, expect, beforeEach, afterEach } from 'vitest'; +import type { StepHarness } from '../support/StepHarness'; +import { createStepHarness } from '../support/StepHarness'; +import { CheckoutConfirmation } from 'packages/domain/value-objects/CheckoutConfirmation'; + +describe('Step 17 – team driving', () => { + let harness: StepHarness; + + beforeEach(async () => { + harness = await createStepHarness(); + }); + + afterEach(async () => { + await harness.dispose(); + }); + + it('executes on Team Driving page and completes without checkout', async () => { + await harness.navigateToFixtureStep(17); + + const page = harness.adapter.getPage(); + expect(page).not.toBeNull(); + + const bodyText = await page!.textContent('body'); + expect(bodyText).toMatch(/Team Driving|Track Conditions/i); + + const result = await harness.executeStep(17, { + trackState: 'medium', + }); + + expect(result.success).toBe(true); + expect(result.error).toBeUndefined(); + }); + + it('requests checkout confirmation and uses the user decision', async () => { + await harness.navigateToFixtureStep(17); + + let called = false; + + harness.adapter.setCheckoutConfirmationCallback(async (price, state) => { + called = true; + expect(price).toBeDefined(); + expect(state).toBeDefined(); + return CheckoutConfirmation.create('confirmed'); + }); + + const result = await harness.executeStep(17, { + trackState: 'medium', + }); + + expect(result.success).toBe(true); + expect(result.error).toBeUndefined(); + expect(called).toBe(true); + }); +}); \ No newline at end of file diff --git a/tests/e2e/steps/step-18-track-conditions.e2e.test.ts b/tests/e2e/steps/step-18-track-conditions.e2e.test.ts new file mode 100644 index 000000000..c31d16f43 --- /dev/null +++ b/tests/e2e/steps/step-18-track-conditions.e2e.test.ts @@ -0,0 +1,32 @@ +import { describe, it, expect, beforeEach, afterEach } from 'vitest'; +import type { StepHarness } from '../support/StepHarness'; +import { createStepHarness } from '../support/StepHarness'; + +describe('Step 18 – track conditions (manual stop)', () => { + let harness: StepHarness; + + beforeEach(async () => { + harness = await createStepHarness(); + }); + + afterEach(async () => { + await harness.dispose(); + }); + + it('does not automate Track Conditions and surfaces unknown-step result', async () => { + await harness.navigateToFixtureStep(18); + + const page = harness.adapter.getPage(); + expect(page).not.toBeNull(); + + const sidebarTrackConditions = await page!.textContent( + '#wizard-sidebar-link-set-track-conditions', + ); + expect(sidebarTrackConditions).toContain('Track Conditions'); + + const result = await harness.executeStep(18, {}); + + expect(result.success).toBe(false); + expect(result.error).toContain('Unknown step: 18'); + }); +}); \ No newline at end of file