move automation out of core

This commit is contained in:
2025-12-16 14:31:43 +01:00
parent 29dc11deb9
commit 29410708c8
145 changed files with 378 additions and 1532 deletions

View File

@@ -1,5 +1,5 @@
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import { StepId } from '@core/automation/domain/value-objects/StepId';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
import {
FixtureServer,
PlaywrightAutomationAdapter,

View File

@@ -1,7 +1,7 @@
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import { DIContainer } from '../../../apps/companion/main/di-container';
import { StepId } from '@core/automation/domain/value-objects/StepId';
import type { HostedSessionConfig } from '@core/automation/domain/types/HostedSessionConfig';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
import type { HostedSessionConfig } from 'apps/companion/main/automation/domain/types/HostedSessionConfig';
import { PlaywrightAutomationAdapter } from 'core/automation/infrastructure//automation';
describe('Companion UI - hosted workflow via fixture-backed real stack', () => {

View File

@@ -1,5 +1,5 @@
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import { StepId } from '@core/automation/domain/value-objects/StepId';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
import {
PlaywrightAutomationAdapter,
} from 'core/automation/infrastructure//automation';

View File

@@ -1,5 +1,5 @@
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import { StepId } from '@core/automation/domain/value-objects/StepId';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
import {
PlaywrightAutomationAdapter,
} from 'core/automation/infrastructure//automation';

View File

@@ -1,7 +1,7 @@
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import { promises as fs } from 'fs';
import path from 'path';
import { StepId } from '@core/automation/domain/value-objects/StepId';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
import {
PlaywrightAutomationAdapter,
} from 'core/automation/infrastructure//automation';

View File

@@ -1,7 +1,7 @@
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import type { StepHarness } from '../support/StepHarness';
import { createStepHarness } from '../support/StepHarness';
import { CheckoutConfirmation } from '@core/automation/domain/value-objects/CheckoutConfirmation';
import { CheckoutConfirmation } from 'apps/companion/main/automation/domain/value-objects/CheckoutConfirmation';
describe('Step 17 team driving', () => {
let harness: StepHarness;

View File

@@ -1,6 +1,6 @@
import { StepId } from '@core/automation/domain/value-objects/StepId';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
import type { PlaywrightAutomationAdapter } from 'core/automation/infrastructure//automation';
import type { AutomationResult } from 'core/automation/application/ports/AutomationResults';
import type { AutomationResult } from 'apps/companion/main/automation/application/ports/AutomationResults';
export function assertAutoNavigationConfig(config: Record<string, unknown>): void {
const skipFixtureNavigationFlag =

View File

@@ -1,5 +1,5 @@
import type { AutomationResult } from 'core/automation/application/ports/AutomationResults';
import { StepId } from '@core/automation/domain/value-objects/StepId';
import type { AutomationResult } from 'apps/companion/main/automation/application/ports/AutomationResults';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
import {
PlaywrightAutomationAdapter,
FixtureServer,

View File

@@ -3,7 +3,7 @@ import {
PlaywrightAutomationAdapter,
FixtureServer,
} from 'core/automation/infrastructure//automation';
import { StepId } from '@core/automation/domain/value-objects/StepId';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
import { PinoLogAdapter } from 'core/automation/infrastructure//logging/PinoLogAdapter';
import { executeStepWithAutoNavigationGuard } from '../support/AutoNavGuard';

View File

@@ -3,7 +3,7 @@ import {
PlaywrightAutomationAdapter,
FixtureServer,
} from 'core/automation/infrastructure//automation';
import { StepId } from '@core/automation/domain/value-objects/StepId';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
import { PinoLogAdapter } from 'core/automation/infrastructure//logging/PinoLogAdapter';
import { IRACING_SELECTORS } from 'core/automation/infrastructure//automation/dom/IRacingSelectors';
import { executeStepWithAutoNavigationGuard } from '../support/AutoNavGuard';

View File

@@ -3,10 +3,10 @@ import {
PlaywrightAutomationAdapter,
FixtureServer,
} from 'core/automation/infrastructure//automation';
import { InMemorySessionRepository } from 'core/automation/infrastructure/repositories/InMemorySessionRepository';
import { InMemorySessionRepository } from 'apps/companion/main/automation/infrastructure/repositories/InMemorySessionRepository';
import { AutomationEngineAdapter } from 'core/automation/infrastructure//automation/engine/AutomationEngineAdapter';
import { StartAutomationSessionUseCase } from 'core/automation/application/use-cases/StartAutomationSessionUseCase';
import { StepId } from '@core/automation/domain/value-objects/StepId';
import { StartAutomationSessionUseCase } from 'apps/companion/main/automation/application/use-cases/StartAutomationSessionUseCase';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
import { PinoLogAdapter } from 'core/automation/infrastructure//logging/PinoLogAdapter';
describe('Workflow hosted session end-to-end (fixture-backed, real stack)', () => {

View File

@@ -3,7 +3,7 @@ import {
PlaywrightAutomationAdapter,
FixtureServer,
} from 'core/automation/infrastructure//automation';
import { StepId } from '@core/automation/domain/value-objects/StepId';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
import { IRACING_SELECTORS } from 'core/automation/infrastructure//automation/dom/IRacingSelectors';
import { PinoLogAdapter } from 'core/automation/infrastructure//logging/PinoLogAdapter';

View File

@@ -1,8 +1,8 @@
import { describe, it, expect, beforeEach, afterEach, beforeAll, afterAll } from 'vitest';
import * as fs from 'fs';
import * as path from 'path';
import type { LoggerPort } from '@core/automation/application/ports/LoggerPort';
import type { LogContext } from '@core/automation/application/ports/LoggerContext';
import type { LoggerPort } from 'apps/companion/main/automation/application/ports/LoggerPort';
import type { LogContext } from 'apps/companion/main/automation/application/ports/LoggerContext';
/**
* Integration tests for Browser Mode in PlaywrightAutomationAdapter - GREEN PHASE
@@ -293,7 +293,7 @@ describe('Browser Mode Integration - GREEN Phase', () => {
'core/automation/infrastructure//automation'
);
const { BrowserModeConfigLoader } = await import(
'../../../core/automation/infrastructure/config/BrowserModeConfig'
'../../../apps/companion/main/automation/infrastructure/config/BrowserModeConfig'
);
// Create loader and set to headed

View File

@@ -1,7 +1,7 @@
import { describe, it, expect, beforeEach, vi } from 'vitest';
import { Result } from '../../../core/shared/result/Result';
import { CheckoutPriceExtractor } from '../../../core/automation/infrastructure//automation/CheckoutPriceExtractor';
import { CheckoutStateEnum } from '@core/automation/domain/value-objects/CheckoutState';
import { CheckoutPriceExtractor } from '../../../apps/companion/main/automation/infrastructure/automation/CheckoutPriceExtractor';
import { CheckoutStateEnum } from 'apps/companion/main/automation/domain/value-objects/CheckoutState';
/**
* CheckoutPriceExtractor Integration Tests - GREEN PHASE

View File

@@ -1,7 +1,7 @@
import { describe, it, expect, beforeEach } from 'vitest';
import { InMemorySessionRepository } from '../../../core/automation/infrastructure/repositories/InMemorySessionRepository';
import { AutomationSession } from '@core/automation/domain/entities/AutomationSession';
import { StepId } from '@core/automation/domain/value-objects/StepId';
import { InMemorySessionRepository } from '../../../apps/companion/main/automation/infrastructure/repositories/InMemorySessionRepository';
import { AutomationSession } from 'apps/companion/main/automation/domain/entities/AutomationSession';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
describe('InMemorySessionRepository Integration Tests', () => {
let repository: InMemorySessionRepository;

View File

@@ -1,6 +1,6 @@
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
import { MockBrowserAutomationAdapter } from 'core/automation/infrastructure//automation';
import { StepId } from '@core/automation/domain/value-objects/StepId';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
describe('MockBrowserAutomationAdapter Integration Tests', () => {
let adapter: MockBrowserAutomationAdapter;

View File

@@ -1,6 +1,6 @@
import { describe, it, expect } from 'vitest';
import { OverlaySyncService } from 'core/automation/application/services/OverlaySyncService';
import type { AutomationEvent } from 'core/automation/application/ports/IAutomationEventPublisher';
import { OverlaySyncService } from 'apps/companion/main/automation/application/services/OverlaySyncService';
import type { AutomationEvent } from 'apps/companion/main/automation/application/ports/IAutomationEventPublisher';
import type {
IAutomationLifecycleEmitter,
LifecycleCallback,
@@ -8,7 +8,7 @@ import type {
import type {
OverlayAction,
ActionAck,
} from 'core/automation/application/ports/IOverlaySyncPort';
} from 'apps/companion/main/automation/application/ports/IOverlaySyncPort';
class TestLifecycleEmitter implements IAutomationLifecycleEmitter {
private callbacks: Set<LifecycleCallback> = new Set();

View File

@@ -1,8 +1,8 @@
import { describe, it, expect } from 'vitest';
import { PageStateValidator } from '@core/automation/domain/services/PageStateValidator';
import { StepTransitionValidator } from '@core/automation/domain/services/StepTransitionValidator';
import { StepId } from '@core/automation/domain/value-objects/StepId';
import { SessionState } from '@core/automation/domain/value-objects/SessionState';
import { PageStateValidator } from 'apps/companion/main/automation/domain/services/PageStateValidator';
import { StepTransitionValidator } from 'apps/companion/main/automation/domain/services/StepTransitionValidator';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
import { SessionState } from 'apps/companion/main/automation/domain/value-objects/SessionState';
describe('Validator conformance (integration)', () => {
describe('PageStateValidator with hosted-session selectors', () => {

View File

@@ -1,8 +1,8 @@
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { DIContainer } from '../../../..//apps/companion/main/di-container';
import type { HostedSessionConfig } from '@core/automation/domain/types/HostedSessionConfig';
import { StepId } from '@core/automation/domain/value-objects/StepId';
import { PlaywrightAutomationAdapter } from '../../../..//core/automation/infrastructure//automation';
import type { HostedSessionConfig } from 'apps/companion/main/automation/domain/types/HostedSessionConfig';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
import { PlaywrightAutomationAdapter } from '../../../../apps/companion/main/automation/infrastructure/automation';
describe('companion start automation - browser mode refresh wiring', () => {
const originalEnv = { ...process.env };

View File

@@ -1,8 +1,8 @@
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { DIContainer } from '../../../..//apps/companion/main/di-container';
import type { HostedSessionConfig } from '@core/automation/domain/types/HostedSessionConfig';
import { StepId } from '@core/automation/domain/value-objects/StepId';
import { PlaywrightAutomationAdapter } from '../../../..//core/automation/infrastructure//automation';
import type { HostedSessionConfig } from 'apps/companion/main/automation/domain/types/HostedSessionConfig';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
import { PlaywrightAutomationAdapter } from '../../../../apps/companion/main/automation/infrastructure/automation';
describe('companion start automation - browser not connected at step 1', () => {
const originalEnv = { ...process.env };

View File

@@ -1,7 +1,7 @@
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
import { DIContainer } from '../../../..//apps/companion/main/di-container';
import type { HostedSessionConfig } from '@core/automation/domain/types/HostedSessionConfig';
import { PlaywrightAutomationAdapter } from '../../../..//core/automation/infrastructure//automation';
import type { HostedSessionConfig } from 'apps/companion/main/automation/domain/types/HostedSessionConfig';
import { PlaywrightAutomationAdapter } from '../../../../apps/companion/main/automation/infrastructure/automation';
describe('companion start automation - browser connection failure before steps', () => {
const originalEnv = { ...process.env };

View File

@@ -1,7 +1,7 @@
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { DIContainer } from '../../../..//apps/companion/main/di-container';
import type { HostedSessionConfig } from '@core/automation/domain/types/HostedSessionConfig';
import { StepId } from '@core/automation/domain/value-objects/StepId';
import type { HostedSessionConfig } from 'apps/companion/main/automation/domain/types/HostedSessionConfig';
import { StepId } from 'apps/companion/main/automation/domain/value-objects/StepId';
describe('companion start automation - happy path', () => {
const originalEnv = { ...process.env };

View File

@@ -1,8 +1,8 @@
import { describe, it, expect } from 'vitest';
import { MockAutomationLifecycleEmitter } from '../../../mocks/MockAutomationLifecycleEmitter';
import { OverlaySyncService } from 'core/automation/application/services/OverlaySyncService';
import type { AutomationEvent } from 'core/automation/application/ports/IAutomationEventPublisher';
import type { OverlayAction } from 'core/automation/application/ports/IOverlaySyncPort';
import { OverlaySyncService } from 'apps/companion/main/automation/application/services/OverlaySyncService';
import type { AutomationEvent } from 'apps/companion/main/automation/application/ports/IAutomationEventPublisher';
import type { OverlayAction } from 'apps/companion/main/automation/application/ports/IOverlaySyncPort';
type RendererOverlayState =
| { status: 'idle' }

View File

@@ -1,6 +1,6 @@
import { describe, expect, test } from 'vitest'
import { MockAutomationLifecycleEmitter } from '../../../mocks/MockAutomationLifecycleEmitter'
import { OverlaySyncService } from 'core/automation/application/services/OverlaySyncService'
import { OverlaySyncService } from 'apps/companion/main/automation/application/services/OverlaySyncService'
describe('renderer overlay integration', () => {
test('renderer shows confirmed only after main acks confirmed', async () => {

View File

@@ -1,12 +1,12 @@
import { describe, it, expect, beforeEach, vi } from 'vitest';
import { DIContainer } from '@apps/companion/main/di-container';
import { StartAutomationSessionUseCase } from '@core/automation/application/use-cases/StartAutomationSessionUseCase';
import { CheckAuthenticationUseCase } from '@core/automation/application/use-cases/CheckAuthenticationUseCase';
import { InitiateLoginUseCase } from '@core/automation/application/use-cases/InitiateLoginUseCase';
import { ClearSessionUseCase } from '@core/automation/application/use-cases/ClearSessionUseCase';
import { ConfirmCheckoutUseCase } from '@core/automation/application/use-cases/ConfirmCheckoutUseCase';
import { StartAutomationSessionUseCase } from 'apps/companion/main/automation/application/use-cases/StartAutomationSessionUseCase';
import { CheckAuthenticationUseCase } from 'apps/companion/main/automation/application/use-cases/CheckAuthenticationUseCase';
import { InitiateLoginUseCase } from 'apps/companion/main/automation/application/use-cases/InitiateLoginUseCase';
import { ClearSessionUseCase } from 'apps/companion/main/automation/application/use-cases/ClearSessionUseCase';
import { ConfirmCheckoutUseCase } from 'apps/companion/main/automation/application/use-cases/ConfirmCheckoutUseCase';
import { PlaywrightAutomationAdapter } from 'core/automation/infrastructure//automation';
import { InMemorySessionRepository } from '@core/automation/infrastructure/repositories/InMemorySessionRepository';
import { InMemorySessionRepository } from 'apps/companion/main/automation/infrastructure/repositories/InMemorySessionRepository';
import { NoOpLogAdapter } from '@core/automation/infrastructure//logging/NoOpLogAdapter';
// Mock Electron's app module