fix(companion): resolve fixtures path correctly in Electron runtime

This commit is contained in:
2025-11-22 16:55:13 +01:00
parent 6ac9701be8
commit 515aef71bb
2 changed files with 97 additions and 14 deletions

View File

@@ -0,0 +1,66 @@
import { describe, it, expect } from 'vitest';
import * as path from 'path';
import { resolveFixturesPath } from '@/apps/companion/main/di-container';
describe('DIContainer path resolution', () => {
describe('resolveFixturesPath', () => {
it('should resolve fixtures path to monorepo root when app path is apps/companion/dist/main', () => {
// Given: The app path as it would be in Electron runtime (apps/companion/dist/main)
const mockAppPath = '/Users/test/Projects/gridpilot/apps/companion/dist/main';
const relativePath = './resources/iracing-hosted-sessions';
// When: Resolving the fixtures path
const resolved = resolveFixturesPath(relativePath, mockAppPath);
// Then: Should resolve to monorepo root (4 levels up from apps/companion/dist/main)
// Level 0: apps/companion/dist/main (app.getAppPath())
// Level 1: apps/companion/dist (../)
// Level 2: apps/companion (../../)
// Level 3: apps (../../../)
// Level 4: gridpilot (monorepo root) (../../../../) ← CORRECT
const expectedPath = '/Users/test/Projects/gridpilot/resources/iracing-hosted-sessions';
expect(resolved).toBe(expectedPath);
});
it('should return absolute paths unchanged', () => {
// Given: An absolute path
const absolutePath = '/some/absolute/path/to/fixtures';
const mockAppPath = '/Users/test/Projects/gridpilot/apps/companion/dist/main';
// When: Resolving an absolute path
const resolved = resolveFixturesPath(absolutePath, mockAppPath);
// Then: Should return the absolute path unchanged
expect(resolved).toBe(absolutePath);
});
it('should navigate exactly 4 levels up from app path', () => {
// Given: A path that demonstrates the 4-level navigation
const mockAppPath = '/level4/level3/level2/level1';
const relativePath = './target';
// When: Resolving the fixtures path
const resolved = resolveFixturesPath(relativePath, mockAppPath);
// Then: Should resolve to the path 4 levels up (root /)
// Level 0: /level4/level3/level2/level1 (appPath)
// Level 1: /level4/level3/level2 (../)
// Level 2: /level4/level3 (../../)
// Level 3: /level4 (../../../)
// Level 4: / (../../../../) ← monorepo root equivalent
expect(resolved).toBe('/target');
});
it('should work with different relative path formats', () => {
// Given: Various relative path formats
const mockAppPath = '/Users/test/Projects/gridpilot/apps/companion/dist/main';
// When/Then: Different relative formats should all work
expect(resolveFixturesPath('resources/fixtures', mockAppPath))
.toBe('/Users/test/Projects/gridpilot/resources/fixtures');
expect(resolveFixturesPath('./resources/fixtures', mockAppPath))
.toBe('/Users/test/Projects/gridpilot/resources/fixtures');
});
});
});