rename to core

This commit is contained in:
2025-12-15 13:46:07 +01:00
parent aedf58643d
commit 5c22f8820c
559 changed files with 415 additions and 767 deletions

View File

@@ -1,14 +1,14 @@
import { describe, it, beforeEach, expect, vi } from 'vitest';
import { Session } from '../../packages/racing/domain/entities/Session';
import { RaceEvent } from '../../packages/racing/domain/entities/RaceEvent';
import { SessionType } from '../../packages/racing/domain/value-objects/SessionType';
import { MainRaceCompletedEvent } from '../../packages/racing/domain/events/MainRaceCompleted';
import { RaceEventStewardingClosedEvent } from '../../packages/racing/domain/events/RaceEventStewardingClosed';
import { SendPerformanceSummaryUseCase } from '../../packages/racing/application/use-cases/SendPerformanceSummaryUseCase';
import { SendFinalResultsUseCase } from '../../packages/racing/application/use-cases/SendFinalResultsUseCase';
import { CloseRaceEventStewardingUseCase } from '../../packages/racing/application/use-cases/CloseRaceEventStewardingUseCase';
import { InMemoryRaceEventRepository } from '../../packages/racing/infrastructure/repositories/InMemoryRaceEventRepository';
import { InMemorySessionRepository } from '../../packages/racing/infrastructure/repositories/InMemorySessionRepository';
import { Session } from '../../core/racing/domain/entities/Session';
import { RaceEvent } from '../../core/racing/domain/entities/RaceEvent';
import { SessionType } from '../../core/racing/domain/value-objects/SessionType';
import { MainRaceCompletedEvent } from '../../core/racing/domain/events/MainRaceCompleted';
import { RaceEventStewardingClosedEvent } from '../../core/racing/domain/events/RaceEventStewardingClosed';
import { SendPerformanceSummaryUseCase } from '../../core/racing/application/use-cases/SendPerformanceSummaryUseCase';
import { SendFinalResultsUseCase } from '../../core/racing/application/use-cases/SendFinalResultsUseCase';
import { CloseRaceEventStewardingUseCase } from '../../core/racing/application/use-cases/CloseRaceEventStewardingUseCase';
import { InMemoryRaceEventRepository } from '../../core/racing/infrastructure/repositories/InMemoryRaceEventRepository';
import { InMemorySessionRepository } from '../../core/racing/infrastructure/repositories/InMemorySessionRepository';
// Mock notification service
const mockNotificationService = {

View File

@@ -3,9 +3,9 @@ import { StepId } from '@gridpilot/automation/domain/value-objects/StepId';
import {
FixtureServer,
PlaywrightAutomationAdapter,
} from 'packages/automation/infrastructure/adapters/automation';
import { IRACING_SELECTORS } from 'packages/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { PinoLogAdapter } from 'packages/automation/infrastructure/adapters/logging/PinoLogAdapter';
} from 'core/automation/infrastructure/adapters/automation';
import { IRACING_SELECTORS } from 'core/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { PinoLogAdapter } from 'core/automation/infrastructure/adapters/logging/PinoLogAdapter';
describe('Real Playwright hosted-session smoke (fixtures, steps 27)', () => {
let server: FixtureServer;

View File

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

View File

@@ -2,12 +2,12 @@ import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import { StepId } from '@gridpilot/automation/domain/value-objects/StepId';
import {
PlaywrightAutomationAdapter,
} from 'packages/automation/infrastructure/adapters/automation';
} from 'core/automation/infrastructure/adapters/automation';
import {
IRACING_SELECTORS,
IRACING_TIMEOUTS,
} from 'packages/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { PinoLogAdapter } from 'packages/automation/infrastructure/adapters/logging/PinoLogAdapter';
} from 'core/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { PinoLogAdapter } from 'core/automation/infrastructure/adapters/logging/PinoLogAdapter';
const shouldRun = process.env.HOSTED_REAL_E2E === '1';
const describeMaybe = shouldRun ? describe : describe.skip;

View File

@@ -2,12 +2,12 @@ import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import { StepId } from '@gridpilot/automation/domain/value-objects/StepId';
import {
PlaywrightAutomationAdapter,
} from 'packages/automation/infrastructure/adapters/automation';
} from 'core/automation/infrastructure/adapters/automation';
import {
IRACING_SELECTORS,
IRACING_TIMEOUTS,
} from 'packages/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { PinoLogAdapter } from 'packages/automation/infrastructure/adapters/logging/PinoLogAdapter';
} from 'core/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { PinoLogAdapter } from 'core/automation/infrastructure/adapters/logging/PinoLogAdapter';
const shouldRun = process.env.HOSTED_REAL_E2E === '1';

View File

@@ -4,12 +4,12 @@ import path from 'path';
import { StepId } from '@gridpilot/automation/domain/value-objects/StepId';
import {
PlaywrightAutomationAdapter,
} from 'packages/automation/infrastructure/adapters/automation';
} from 'core/automation/infrastructure/adapters/automation';
import {
IRACING_SELECTORS,
IRACING_TIMEOUTS,
} from 'packages/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { PinoLogAdapter } from 'packages/automation/infrastructure/adapters/logging/PinoLogAdapter';
} from 'core/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { PinoLogAdapter } from 'core/automation/infrastructure/adapters/logging/PinoLogAdapter';
const shouldRun = process.env.HOSTED_REAL_E2E === '1';
const describeMaybe = shouldRun ? describe : describe.skip;

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 { IRACING_SELECTORS } from 'packages/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { IRACING_SELECTORS } from 'core/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
describe('Step 2 create race', () => {
let harness: StepHarness;

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 { IRACING_SELECTORS } from 'packages/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { IRACING_SELECTORS } from 'core/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
describe('Step 3 race information', () => {
let harness: StepHarness;

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 { IRACING_SELECTORS } from 'packages/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { IRACING_SELECTORS } from 'core/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
describe('Step 4 server details', () => {
let harness: StepHarness;

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 { IRACING_SELECTORS } from 'packages/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { IRACING_SELECTORS } from 'core/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
describe('Step 5 set admins', () => {
let harness: StepHarness;

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 { IRACING_SELECTORS } from 'packages/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { IRACING_SELECTORS } from 'core/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
describe('Step 6 admins', () => {
let harness: StepHarness;

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 { IRACING_SELECTORS } from 'packages/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { IRACING_SELECTORS } from 'core/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
describe('Step 7 time limits', () => {
let harness: StepHarness;

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 { IRACING_SELECTORS } from 'packages/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { IRACING_SELECTORS } from 'core/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
describe('Step 8 cars', () => {
let harness: StepHarness;

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 { IRACING_SELECTORS } from 'packages/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { IRACING_SELECTORS } from 'core/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
describe('Step 13 track options', () => {
let harness: StepHarness;

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 { IRACING_SELECTORS } from 'packages/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { IRACING_SELECTORS } from 'core/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
describe('Step 14 time of day', () => {
let harness: StepHarness;

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 { IRACING_SELECTORS } from 'packages/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { IRACING_SELECTORS } from 'core/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
describe('Step 15 weather', () => {
let harness: StepHarness;

View File

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

View File

@@ -1,10 +1,10 @@
import type { AutomationResult } from 'packages/automation/application/ports/AutomationResults';
import type { AutomationResult } from 'core/automation/application/ports/AutomationResults';
import { StepId } from '@gridpilot/automation/domain/value-objects/StepId';
import {
PlaywrightAutomationAdapter,
FixtureServer,
} from 'packages/automation/infrastructure/adapters/automation';
import { PinoLogAdapter } from 'packages/automation/infrastructure/adapters/logging/PinoLogAdapter';
} from 'core/automation/infrastructure/adapters/automation';
import { PinoLogAdapter } from 'core/automation/infrastructure/adapters/logging/PinoLogAdapter';
export interface StepHarness {
server: FixtureServer;

View File

@@ -2,9 +2,9 @@ import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import {
PlaywrightAutomationAdapter,
FixtureServer,
} from 'packages/automation/infrastructure/adapters/automation';
} from 'core/automation/infrastructure/adapters/automation';
import { StepId } from '@gridpilot/automation/domain/value-objects/StepId';
import { PinoLogAdapter } from 'packages/automation/infrastructure/adapters/logging/PinoLogAdapter';
import { PinoLogAdapter } from 'core/automation/infrastructure/adapters/logging/PinoLogAdapter';
import { executeStepWithAutoNavigationGuard } from '../support/AutoNavGuard';
describe('Hosted validator guards (fixture-backed, real stack)', () => {

View File

@@ -2,10 +2,10 @@ import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import {
PlaywrightAutomationAdapter,
FixtureServer,
} from 'packages/automation/infrastructure/adapters/automation';
} from 'core/automation/infrastructure/adapters/automation';
import { StepId } from '@gridpilot/automation/domain/value-objects/StepId';
import { PinoLogAdapter } from 'packages/automation/infrastructure/adapters/logging/PinoLogAdapter';
import { IRACING_SELECTORS } from 'packages/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { PinoLogAdapter } from 'core/automation/infrastructure/adapters/logging/PinoLogAdapter';
import { IRACING_SELECTORS } from 'core/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { executeStepWithAutoNavigationGuard } from '../support/AutoNavGuard';
describe('Workflow hosted session autonav slice (fixture-backed, real stack)', () => {

View File

@@ -2,12 +2,12 @@ import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import {
PlaywrightAutomationAdapter,
FixtureServer,
} from 'packages/automation/infrastructure/adapters/automation';
import { InMemorySessionRepository } from 'packages/automation/infrastructure/repositories/InMemorySessionRepository';
import { AutomationEngineAdapter } from 'packages/automation/infrastructure/adapters/automation/engine/AutomationEngineAdapter';
import { StartAutomationSessionUseCase } from 'packages/automation/application/use-cases/StartAutomationSessionUseCase';
} from 'core/automation/infrastructure/adapters/automation';
import { InMemorySessionRepository } from 'core/automation/infrastructure/repositories/InMemorySessionRepository';
import { AutomationEngineAdapter } from 'core/automation/infrastructure/adapters/automation/engine/AutomationEngineAdapter';
import { StartAutomationSessionUseCase } from 'core/automation/application/use-cases/StartAutomationSessionUseCase';
import { StepId } from '@gridpilot/automation/domain/value-objects/StepId';
import { PinoLogAdapter } from 'packages/automation/infrastructure/adapters/logging/PinoLogAdapter';
import { PinoLogAdapter } from 'core/automation/infrastructure/adapters/logging/PinoLogAdapter';
describe('Workflow hosted session end-to-end (fixture-backed, real stack)', () => {
let server: FixtureServer;

View File

@@ -2,10 +2,10 @@ import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import {
PlaywrightAutomationAdapter,
FixtureServer,
} from 'packages/automation/infrastructure/adapters/automation';
} from 'core/automation/infrastructure/adapters/automation';
import { StepId } from '@gridpilot/automation/domain/value-objects/StepId';
import { IRACING_SELECTORS } from 'packages/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { PinoLogAdapter } from 'packages/automation/infrastructure/adapters/logging/PinoLogAdapter';
import { IRACING_SELECTORS } from 'core/automation/infrastructure/adapters/automation/dom/IRacingSelectors';
import { PinoLogAdapter } from 'core/automation/infrastructure/adapters/logging/PinoLogAdapter';
describe('Workflow steps 79 cars flow (fixture-backed, real stack)', () => {
let adapter: PlaywrightAutomationAdapter;

View File

@@ -87,7 +87,7 @@ describe('Browser Mode Integration - GREEN Phase', () => {
});
const { PlaywrightAutomationAdapter } = await import(
'packages/automation/infrastructure/adapters/automation'
'core/automation/infrastructure/adapters/automation'
);
adapter = new PlaywrightAutomationAdapter({
@@ -111,7 +111,7 @@ describe('Browser Mode Integration - GREEN Phase', () => {
});
const { PlaywrightAutomationAdapter } = await import(
'packages/automation/infrastructure/adapters/automation'
'core/automation/infrastructure/adapters/automation'
);
adapter = new PlaywrightAutomationAdapter({
@@ -135,7 +135,7 @@ describe('Browser Mode Integration - GREEN Phase', () => {
});
const { PlaywrightAutomationAdapter } = await import(
'packages/automation/infrastructure/adapters/automation'
'core/automation/infrastructure/adapters/automation'
);
adapter = new PlaywrightAutomationAdapter({
@@ -164,7 +164,7 @@ describe('Browser Mode Integration - GREEN Phase', () => {
});
const { PlaywrightAutomationAdapter } = await import(
'packages/automation/infrastructure/adapters/automation'
'core/automation/infrastructure/adapters/automation'
);
adapter = new PlaywrightAutomationAdapter({
@@ -185,7 +185,7 @@ describe('Browser Mode Integration - GREEN Phase', () => {
});
const { PlaywrightAutomationAdapter } = await import(
'packages/automation/infrastructure/adapters/automation'
'core/automation/infrastructure/adapters/automation'
);
adapter = new PlaywrightAutomationAdapter({
@@ -228,7 +228,7 @@ describe('Browser Mode Integration - GREEN Phase', () => {
};
const { PlaywrightAutomationAdapter } = await import(
'packages/automation/infrastructure/adapters/automation'
'core/automation/infrastructure/adapters/automation'
);
adapter = new PlaywrightAutomationAdapter(
@@ -259,7 +259,7 @@ describe('Browser Mode Integration - GREEN Phase', () => {
});
const { PlaywrightAutomationAdapter } = await import(
'packages/automation/infrastructure/adapters/automation'
'core/automation/infrastructure/adapters/automation'
);
const userDataDir = path.join(process.cwd(), 'test-browser-data');
@@ -290,10 +290,10 @@ describe('Browser Mode Integration - GREEN Phase', () => {
configurable: true
});
const { PlaywrightAutomationAdapter } = await import(
'packages/automation/infrastructure/adapters/automation'
'core/automation/infrastructure/adapters/automation'
);
const { BrowserModeConfigLoader } = await import(
'../../../packages/automation/infrastructure/config/BrowserModeConfig'
'../../../core/automation/infrastructure/config/BrowserModeConfig'
);
// Create loader and set to headed

View File

@@ -1,6 +1,6 @@
import { describe, it, expect, beforeEach, vi } from 'vitest';
import { Result } from '../../../packages/shared/result/Result';
import { CheckoutPriceExtractor } from '../../../packages/automation/infrastructure/adapters/automation/CheckoutPriceExtractor';
import { Result } from '../../../core/shared/result/Result';
import { CheckoutPriceExtractor } from '../../../core/automation/infrastructure/adapters/automation/CheckoutPriceExtractor';
import { CheckoutStateEnum } from '@gridpilot/automation/domain/value-objects/CheckoutState';
/**

View File

@@ -3,7 +3,7 @@
*/
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import { FixtureServer, getAllStepFixtureMappings, PlaywrightAutomationAdapter } from 'packages/automation/infrastructure/adapters/automation';
import { FixtureServer, getAllStepFixtureMappings, PlaywrightAutomationAdapter } from 'core/automation/infrastructure/adapters/automation';
declare const getComputedStyle: any;
declare const document: any;

View File

@@ -1,5 +1,5 @@
import { describe, it, expect, beforeEach } from 'vitest';
import { InMemorySessionRepository } from '../../../packages/automation/infrastructure/repositories/InMemorySessionRepository';
import { InMemorySessionRepository } from '../../../core/automation/infrastructure/repositories/InMemorySessionRepository';
import { AutomationSession } from '@gridpilot/automation/domain/entities/AutomationSession';
import { StepId } from '@gridpilot/automation/domain/value-objects/StepId';

View File

@@ -1,5 +1,5 @@
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
import { MockBrowserAutomationAdapter } from 'packages/automation/infrastructure/adapters/automation';
import { MockBrowserAutomationAdapter } from 'core/automation/infrastructure/adapters/automation';
import { StepId } from '@gridpilot/automation/domain/value-objects/StepId';
describe('MockBrowserAutomationAdapter Integration Tests', () => {

View File

@@ -1,6 +1,6 @@
import { describe, test, expect } from 'vitest'
import type { Page } from 'playwright'
import { PlaywrightAutomationAdapter } from 'packages/automation/infrastructure/adapters/automation'
import { PlaywrightAutomationAdapter } from 'core/automation/infrastructure/adapters/automation'
describe('CarsFlow integration', () => {
test('adapter emits panel-attached then action-started then action-complete for performAddCar', async () => {

View File

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

View File

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

View File

@@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { DIContainer } from '../../../..//apps/companion/main/di-container';
import type { HostedSessionConfig } from '@gridpilot/automation/domain/types/HostedSessionConfig';
import { StepId } from '@gridpilot/automation/domain/value-objects/StepId';
import { PlaywrightAutomationAdapter } from '../../../..//packages/automation/infrastructure/adapters/automation';
import { PlaywrightAutomationAdapter } from '../../../..//core/automation/infrastructure/adapters/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 '@gridpilot/automation/domain/types/HostedSessionConfig';
import { PlaywrightAutomationAdapter } from '../../../..//packages/automation/infrastructure/adapters/automation';
import { PlaywrightAutomationAdapter } from '../../../..//core/automation/infrastructure/adapters/automation';
describe('companion start automation - browser connection failure before steps', () => {
const originalEnv = { ...process.env };

View File

@@ -1,8 +1,8 @@
import { describe, it, expect } from 'vitest';
import { MockAutomationLifecycleEmitter } from '../../../mocks/MockAutomationLifecycleEmitter';
import { OverlaySyncService } from 'packages/automation/application/services/OverlaySyncService';
import type { AutomationEvent } from 'packages/automation/application/ports/IAutomationEventPublisher';
import type { OverlayAction } from 'packages/automation/application/ports/IOverlaySyncPort';
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';
type RendererOverlayState =
| { status: 'idle' }

View File

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

View File

@@ -1,13 +1,13 @@
import { describe, it, expect, beforeEach, vi } from 'vitest';
import { DIContainer } from '../../apps/companion/main/di-container';
import { StartAutomationSessionUseCase } from '../../packages/automation/application/use-cases/StartAutomationSessionUseCase';
import { CheckAuthenticationUseCase } from '../../packages/automation/application/use-cases/CheckAuthenticationUseCase';
import { InitiateLoginUseCase } from '../../packages/automation/application/use-cases/InitiateLoginUseCase';
import { ClearSessionUseCase } from '../../packages/automation/application/use-cases/ClearSessionUseCase';
import { ConfirmCheckoutUseCase } from '../../packages/automation/application/use-cases/ConfirmCheckoutUseCase';
import { PlaywrightAutomationAdapter } from 'packages/automation/infrastructure/adapters/automation';
import { InMemorySessionRepository } from '../../packages/automation/infrastructure/repositories/InMemorySessionRepository';
import { NoOpLogAdapter } from '../../packages/automation/infrastructure/adapters/logging/NoOpLogAdapter';
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 { PlaywrightAutomationAdapter } from 'core/automation/infrastructure/adapters/automation';
import { InMemorySessionRepository } from '../../core/automation/infrastructure/repositories/InMemorySessionRepository';
import { NoOpLogAdapter } from '../../core/automation/infrastructure/adapters/logging/NoOpLogAdapter';
// Mock Electron's app module
vi.mock('electron', () => ({

View File

@@ -1,6 +1,6 @@
import { describe, it, expect, afterEach, beforeAll, afterAll } from 'vitest';
import { PlaywrightAutomationAdapter, FixtureServer } from 'packages/automation/infrastructure/adapters/automation';
import { NoOpLogAdapter } from '../../packages/automation/infrastructure/adapters/logging/NoOpLogAdapter';
import { PlaywrightAutomationAdapter, FixtureServer } from 'core/automation/infrastructure/adapters/automation';
import { NoOpLogAdapter } from '../../core/automation/infrastructure/adapters/logging/NoOpLogAdapter';
describe('Playwright Adapter Smoke Tests', () => {
let adapter: PlaywrightAutomationAdapter | undefined;

View File

@@ -1,4 +1,4 @@
import { AnalyticsEntityId } from '../../../../../packages/analytics/domain/value-objects/AnalyticsEntityId';
import { AnalyticsEntityId } from '../../../../../core/analytics/domain/value-objects/AnalyticsEntityId';
describe('AnalyticsEntityId', () => {
it('creates a valid AnalyticsEntityId from a non-empty string', () => {

View File

@@ -1,4 +1,4 @@
import { AnalyticsSessionId } from '../../../../../packages/analytics/domain/value-objects/AnalyticsSessionId';
import { AnalyticsSessionId } from '../../../../../core/analytics/domain/value-objects/AnalyticsSessionId';
describe('AnalyticsSessionId', () => {
it('creates a valid AnalyticsSessionId from a non-empty string', () => {

View File

@@ -1,4 +1,4 @@
import { PageViewId } from '../../../../../packages/analytics/domain/value-objects/PageViewId';
import { PageViewId } from '../../../../../core/analytics/domain/value-objects/PageViewId';
describe('PageViewId', () => {
it('creates a valid PageViewId from a non-empty string', () => {

View File

@@ -1,8 +1,8 @@
import { describe, expect, test } from 'vitest'
import { OverlayAction, ActionAck } from '../../../../packages/automation/application/ports/IOverlaySyncPort'
import { IAutomationEventPublisher, AutomationEvent } from '../../../../packages/automation/application/ports/IAutomationEventPublisher'
import { IAutomationLifecycleEmitter, LifecycleCallback } from '../../../../packages/automation/infrastructure/adapters/IAutomationLifecycleEmitter'
import { OverlaySyncService } from '../../../../packages/automation/application/services/OverlaySyncService'
import { OverlayAction, ActionAck } from '../../../../core/automation/application/ports/IOverlaySyncPort'
import { IAutomationEventPublisher, AutomationEvent } from '../../../../core/automation/application/ports/IAutomationEventPublisher'
import { IAutomationLifecycleEmitter, LifecycleCallback } from '../../../../core/automation/infrastructure/adapters/IAutomationLifecycleEmitter'
import { OverlaySyncService } from '../../../../core/automation/application/services/OverlaySyncService'
class MockLifecycleEmitter implements IAutomationLifecycleEmitter {
private callbacks: Set<LifecycleCallback> = new Set()

View File

@@ -1,7 +1,7 @@
import { describe, expect, test } from 'vitest'
import { OverlayAction } from '../../../../packages/automation/application/ports/OverlaySyncPort'
import { IAutomationLifecycleEmitter, LifecycleCallback } from '../../../../packages/automation/infrastructure/adapters/IAutomationLifecycleEmitter'
import { OverlaySyncService } from '../../../../packages/automation/application/services/OverlaySyncService'
import { OverlayAction } from '../../../../core/automation/application/ports/OverlaySyncPort'
import { IAutomationLifecycleEmitter, LifecycleCallback } from '../../../../core/automation/infrastructure/adapters/IAutomationLifecycleEmitter'
import { OverlaySyncService } from '../../../../core/automation/application/services/OverlaySyncService'
class MockLifecycleEmitter implements IAutomationLifecycleEmitter {
private callbacks: Set<LifecycleCallback> = new Set()

View File

@@ -1,9 +1,9 @@
import { describe, it, expect, beforeEach, vi, Mock } from 'vitest';
import { CheckAuthenticationUseCase } from '../../../../packages/automation/application/use-cases/CheckAuthenticationUseCase';
import { CheckAuthenticationUseCase } from '../../../../core/automation/application/use-cases/CheckAuthenticationUseCase';
import { AuthenticationState } from '@gridpilot/automation/domain/value-objects/AuthenticationState';
import { BrowserAuthenticationState } from '@gridpilot/automation/domain/value-objects/BrowserAuthenticationState';
import { Result } from '../../../../packages/shared/result/Result';
import type { AuthenticationServicePort } from '../../../../packages/automation/application/ports/AuthenticationServicePort';
import { Result } from '../../../../core/shared/result/Result';
import type { AuthenticationServicePort } from '../../../../core/automation/application/ports/AuthenticationServicePort';
interface ISessionValidator {
validateSession(): Promise<Result<boolean>>;

View File

@@ -1,9 +1,9 @@
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { CompleteRaceCreationUseCase } from '../../../../packages/automation/application/use-cases/CompleteRaceCreationUseCase';
import { Result } from '../../../../packages/shared/result/Result';
import { CompleteRaceCreationUseCase } from '../../../../core/automation/application/use-cases/CompleteRaceCreationUseCase';
import { Result } from '../../../../core/shared/result/Result';
import { RaceCreationResult } from '@gridpilot/automation/domain/value-objects/RaceCreationResult';
import { CheckoutPrice } from '@gridpilot/automation/domain/value-objects/CheckoutPrice';
import type { CheckoutServicePort } from '../../../../packages/automation/application/ports/CheckoutServicePort';
import type { CheckoutServicePort } from '../../../../core/automation/application/ports/CheckoutServicePort';
import { CheckoutState } from '@gridpilot/automation/domain/value-objects/CheckoutState';
describe('CompleteRaceCreationUseCase', () => {

View File

@@ -1,9 +1,9 @@
import { describe, it, expect, beforeEach, vi, Mock } from 'vitest';
import { Result } from '../../../../packages/shared/result/Result';
import { ConfirmCheckoutUseCase } from '../../../../packages/automation/application/use-cases/ConfirmCheckoutUseCase';
import type { CheckoutServicePort } from '../../../../packages/automation/application/ports/CheckoutServicePort';
import type { CheckoutConfirmationPort } from '../../../../packages/automation/application/ports/CheckoutConfirmationPort';
import type { CheckoutInfoDTO } from '../../../../packages/automation/application/dto/CheckoutInfoDTO';
import { Result } from '../../../../core/shared/result/Result';
import { ConfirmCheckoutUseCase } from '../../../../core/automation/application/use-cases/ConfirmCheckoutUseCase';
import type { CheckoutServicePort } from '../../../../core/automation/application/ports/CheckoutServicePort';
import type { CheckoutConfirmationPort } from '../../../../core/automation/application/ports/CheckoutConfirmationPort';
import type { CheckoutInfoDTO } from '../../../../core/automation/application/dto/CheckoutInfoDTO';
import { CheckoutPrice } from '@gridpilot/automation/domain/value-objects/CheckoutPrice';
import { CheckoutState, CheckoutStateEnum } from '@gridpilot/automation/domain/value-objects/CheckoutState';
import { CheckoutConfirmation } from '@gridpilot/automation/domain/value-objects/CheckoutConfirmation';

View File

@@ -1,8 +1,8 @@
import { describe, it, expect, vi, beforeEach, Mock } from 'vitest';
import { StartAutomationSessionUseCase } from '../../../../packages/automation/application/use-cases/StartAutomationSessionUseCase';
import { AutomationEnginePort as IAutomationEngine } from '../../../../packages/automation/application/ports/AutomationEnginePort';
import { IBrowserAutomation as IScreenAutomation } from '../../../../packages/automation/application/ports/ScreenAutomationPort';
import { SessionRepositoryPort as ISessionRepository } from '../../../../packages/automation/application/ports/SessionRepositoryPort';
import { StartAutomationSessionUseCase } from '../../../../core/automation/application/use-cases/StartAutomationSessionUseCase';
import { AutomationEnginePort as IAutomationEngine } from '../../../../core/automation/application/ports/AutomationEnginePort';
import { IBrowserAutomation as IScreenAutomation } from '../../../../core/automation/application/ports/ScreenAutomationPort';
import { SessionRepositoryPort as ISessionRepository } from '../../../../core/automation/application/ports/SessionRepositoryPort';
import { AutomationSession } from '@gridpilot/automation/domain/entities/AutomationSession';
describe('StartAutomationSessionUseCase', () => {

View File

@@ -1,7 +1,7 @@
import { describe, it, expect, beforeEach, vi } from 'vitest';
import { VerifyAuthenticatedPageUseCase } from '../../../../packages/automation/application/use-cases/VerifyAuthenticatedPageUseCase';
import { AuthenticationServicePort as IAuthenticationService } from '../../../../packages/automation/application/ports/AuthenticationServicePort';
import { Result } from '../../../../packages/shared/result/Result';
import { VerifyAuthenticatedPageUseCase } from '../../../../core/automation/application/use-cases/VerifyAuthenticatedPageUseCase';
import { AuthenticationServicePort as IAuthenticationService } from '../../../../core/automation/application/ports/AuthenticationServicePort';
import { Result } from '../../../../core/shared/result/Result';
import { BrowserAuthenticationState } from '@gridpilot/automation/domain/value-objects/BrowserAuthenticationState';
import { AuthenticationState } from '@gridpilot/automation/domain/value-objects/AuthenticationState';

View File

@@ -1,6 +1,6 @@
import { describe, it, expect } from 'vitest';
import { calculateRaceDates, getNextWeekday, type ScheduleConfig } from '../../../../packages/racing/domain/services/ScheduleCalculator';
import type { Weekday } from '../../../../packages/racing/domain/types/Weekday';
import { calculateRaceDates, getNextWeekday, type ScheduleConfig } from '../../../../core/racing/domain/services/ScheduleCalculator';
import type { Weekday } from '../../../../core/racing/domain/types/Weekday';
describe('ScheduleCalculator', () => {
describe('calculateRaceDates', () => {

View File

@@ -1,5 +1,5 @@
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
import { loadAutomationConfig, getAutomationMode, AutomationMode } from '../../../packages/automation/infrastructure/config/AutomationConfig';
import { loadAutomationConfig, getAutomationMode, AutomationMode } from '../../../core/automation/infrastructure/config/AutomationConfig';
describe('AutomationConfig', () => {
const originalEnv = process.env;

View File

@@ -1,12 +1,12 @@
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
import type { Page, BrowserContext } from 'playwright';
import { PlaywrightAuthSessionService } from '../../../../packages/automation/infrastructure/adapters/automation/auth/PlaywrightAuthSessionService';
import type { PlaywrightBrowserSession } from '../../../../packages/automation/infrastructure/adapters/automation/core/PlaywrightBrowserSession';
import type { SessionCookieStore } from '../../../../packages/automation/infrastructure/adapters/automation/auth/SessionCookieStore';
import type { IPlaywrightAuthFlow } from '../../../../packages/automation/infrastructure/adapters/automation/auth/PlaywrightAuthFlow';
import type { LoggerPort as ILogger } from '../../../../packages/automation/application/ports/LoggerPort';
import { PlaywrightAuthSessionService } from '../../../../core/automation/infrastructure/adapters/automation/auth/PlaywrightAuthSessionService';
import type { PlaywrightBrowserSession } from '../../../../core/automation/infrastructure/adapters/automation/core/PlaywrightBrowserSession';
import type { SessionCookieStore } from '../../../../core/automation/infrastructure/adapters/automation/auth/SessionCookieStore';
import type { IPlaywrightAuthFlow } from '../../../../core/automation/infrastructure/adapters/automation/auth/PlaywrightAuthFlow';
import type { LoggerPort as ILogger } from '../../../../core/automation/application/ports/LoggerPort';
import { AuthenticationState } from '@gridpilot/automation/domain/value-objects/AuthenticationState';
import { Result } from '../../../../packages/shared/result/Result';
import { Result } from '../../../../core/shared/result/Result';
describe('PlaywrightAuthSessionService.initiateLogin browser mode behaviour', () => {
const originalEnv = { ...process.env };

View File

@@ -1,13 +1,13 @@
import { describe, it, expect, vi } from 'vitest';
import type { Page, Locator } from 'playwright';
import { PlaywrightAuthSessionService } from '../../../../packages/automation/infrastructure/adapters/automation/auth/PlaywrightAuthSessionService';
import { PlaywrightAuthSessionService } from '../../../../core/automation/infrastructure/adapters/automation/auth/PlaywrightAuthSessionService';
import { AuthenticationState } from '@gridpilot/automation/domain/value-objects/AuthenticationState';
import { BrowserAuthenticationState } from '@gridpilot/automation/domain/value-objects/BrowserAuthenticationState';
import type { LoggerPort as ILogger } from '../../../../packages/automation/application/ports/LoggerPort';
import type { Result } from '../../../../packages/shared/result/Result';
import type { PlaywrightBrowserSession } from '../../../../packages/automation/infrastructure/adapters/automation/core/PlaywrightBrowserSession';
import type { SessionCookieStore } from '../../../../packages/automation/infrastructure/adapters/automation/auth/SessionCookieStore';
import type { IPlaywrightAuthFlow } from '../../../../packages/automation/infrastructure/adapters/automation/auth/PlaywrightAuthFlow';
import type { LoggerPort as ILogger } from '../../../../core/automation/application/ports/LoggerPort';
import type { Result } from '../../../../core/shared/result/Result';
import type { PlaywrightBrowserSession } from '../../../../core/automation/infrastructure/adapters/automation/core/PlaywrightBrowserSession';
import type { SessionCookieStore } from '../../../../core/automation/infrastructure/adapters/automation/auth/SessionCookieStore';
import type { IPlaywrightAuthFlow } from '../../../../core/automation/infrastructure/adapters/automation/auth/PlaywrightAuthFlow';
describe('PlaywrightAuthSessionService.verifyPageAuthentication', () => {
function createService(deps: {

View File

@@ -1,5 +1,5 @@
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { BrowserModeConfigLoader } from '../../../../packages/automation/infrastructure/config/BrowserModeConfig';
import { BrowserModeConfigLoader } from '../../../../core/automation/infrastructure/config/BrowserModeConfig';
/**
* Unit tests for BrowserModeConfig - GREEN PHASE

View File

@@ -1,4 +1,4 @@
import { MediaUrl } from '../../../../../packages/media/domain/value-objects/MediaUrl';
import { MediaUrl } from '../../../../../core/media/domain/value-objects/MediaUrl';
describe('MediaUrl', () => {
it('creates from valid http/https URLs', () => {

View File

@@ -1,5 +1,5 @@
import { NotificationId } from '../../../../../packages/notifications/domain/value-objects/NotificationId';
import { NotificationDomainError } from '../../../../../packages/notifications/domain/errors/NotificationDomainError';
import { NotificationId } from '../../../../../core/notifications/domain/value-objects/NotificationId';
import { NotificationDomainError } from '../../../../../core/notifications/domain/errors/NotificationDomainError';
describe('NotificationId', () => {
it('creates a valid NotificationId from a non-empty string', () => {

View File

@@ -1,4 +1,4 @@
import { QuietHours } from '../../../../../packages/notifications/domain/value-objects/QuietHours';
import { QuietHours } from '../../../../../core/notifications/domain/value-objects/QuietHours';
describe('QuietHours', () => {
it('creates a valid normal-range window', () => {

View File

@@ -20,17 +20,17 @@ interface TsFile {
function classifyFile(filePath: string): PackageKind {
const normalized = filePath.replace(/\\/g, '/');
// Bounded-context domain lives under packages/racing/domain
if (normalized.includes('/packages/racing/domain/')) {
// Bounded-context domain lives under core/racing/domain
if (normalized.includes('/core/racing/domain/')) {
return 'racing-domain';
}
if (normalized.includes('/packages/racing-application/')) {
if (normalized.includes('/core/racing-application/')) {
return 'racing-application';
}
if (normalized.includes('/packages/racing-infrastructure/')) {
if (normalized.includes('/core/racing-infrastructure/')) {
return 'racing-infrastructure';
}
if (normalized.includes('/packages/racing-demo-infrastructure/')) {
if (normalized.includes('/core/racing-demo-infrastructure/')) {
return 'racing-demo-infrastructure';
}
@@ -129,7 +129,7 @@ describe('Package dependency structure for racing slice', () => {
if (violations.length > 0) {
const message =
'Found forbidden imports in racing domain layer (packages/racing/domain):\n' +
'Found forbidden imports in racing domain layer (core/racing/domain):\n' +
violations
.map(
(v) =>
@@ -197,7 +197,7 @@ describe('Package dependency structure for racing slice', () => {
if (violations.length > 0) {
const message =
'Found forbidden imports in packages/racing-application:\n' +
'Found forbidden imports in core/racing-application:\n' +
violations
.map(
(v) =>