Spaces:
Sleeping
Sleeping
File size: 4,773 Bytes
b6ecafa | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | import os from 'node:os'
import path from 'node:path'
import { beforeEach, describe, expect, it, vi } from 'vitest'
async function loadConfigWithEnv(env: Record<string, string | undefined>) {
vi.resetModules()
const original = {
MISSION_CONTROL_DATA_DIR: process.env.MISSION_CONTROL_DATA_DIR,
MISSION_CONTROL_BUILD_DATA_DIR: process.env.MISSION_CONTROL_BUILD_DATA_DIR,
MISSION_CONTROL_BUILD_DB_PATH: process.env.MISSION_CONTROL_BUILD_DB_PATH,
MISSION_CONTROL_BUILD_TOKENS_PATH: process.env.MISSION_CONTROL_BUILD_TOKENS_PATH,
MISSION_CONTROL_DB_PATH: process.env.MISSION_CONTROL_DB_PATH,
MISSION_CONTROL_TOKENS_PATH: process.env.MISSION_CONTROL_TOKENS_PATH,
NEXT_PHASE: process.env.NEXT_PHASE,
}
for (const [key, value] of Object.entries(env)) {
if (value === undefined) {
delete process.env[key]
} else {
process.env[key] = value
}
}
const mod = await import('./config')
if (original.MISSION_CONTROL_DATA_DIR === undefined) delete process.env.MISSION_CONTROL_DATA_DIR
else process.env.MISSION_CONTROL_DATA_DIR = original.MISSION_CONTROL_DATA_DIR
if (original.MISSION_CONTROL_BUILD_DATA_DIR === undefined) delete process.env.MISSION_CONTROL_BUILD_DATA_DIR
else process.env.MISSION_CONTROL_BUILD_DATA_DIR = original.MISSION_CONTROL_BUILD_DATA_DIR
if (original.MISSION_CONTROL_BUILD_DB_PATH === undefined) delete process.env.MISSION_CONTROL_BUILD_DB_PATH
else process.env.MISSION_CONTROL_BUILD_DB_PATH = original.MISSION_CONTROL_BUILD_DB_PATH
if (original.MISSION_CONTROL_BUILD_TOKENS_PATH === undefined) delete process.env.MISSION_CONTROL_BUILD_TOKENS_PATH
else process.env.MISSION_CONTROL_BUILD_TOKENS_PATH = original.MISSION_CONTROL_BUILD_TOKENS_PATH
if (original.MISSION_CONTROL_DB_PATH === undefined) delete process.env.MISSION_CONTROL_DB_PATH
else process.env.MISSION_CONTROL_DB_PATH = original.MISSION_CONTROL_DB_PATH
if (original.MISSION_CONTROL_TOKENS_PATH === undefined) delete process.env.MISSION_CONTROL_TOKENS_PATH
else process.env.MISSION_CONTROL_TOKENS_PATH = original.MISSION_CONTROL_TOKENS_PATH
if (original.NEXT_PHASE === undefined) delete process.env.NEXT_PHASE
else process.env.NEXT_PHASE = original.NEXT_PHASE
return mod.config
}
describe('config data paths', () => {
beforeEach(() => {
vi.resetModules()
})
it('derives db and token paths from MISSION_CONTROL_DATA_DIR', async () => {
const config = await loadConfigWithEnv({
MISSION_CONTROL_DATA_DIR: '/tmp/mission-control-data',
MISSION_CONTROL_DB_PATH: undefined,
MISSION_CONTROL_TOKENS_PATH: undefined,
})
expect(config.dataDir).toBe('/tmp/mission-control-data')
expect(config.dbPath).toBe('/tmp/mission-control-data/mission-control.db')
expect(config.tokensPath).toBe('/tmp/mission-control-data/mission-control-tokens.json')
})
it('respects explicit db and token path overrides', async () => {
const config = await loadConfigWithEnv({
MISSION_CONTROL_DATA_DIR: '/tmp/mission-control-data',
MISSION_CONTROL_DB_PATH: '/tmp/custom.db',
MISSION_CONTROL_TOKENS_PATH: '/tmp/custom-tokens.json',
})
expect(config.dataDir).toBe('/tmp/mission-control-data')
expect(config.dbPath).toBe('/tmp/custom.db')
expect(config.tokensPath).toBe('/tmp/custom-tokens.json')
})
it('uses a build-scoped worker data dir during next build', async () => {
const config = await loadConfigWithEnv({
NEXT_PHASE: 'phase-production-build',
MISSION_CONTROL_DATA_DIR: '/tmp/runtime-data',
MISSION_CONTROL_BUILD_DATA_DIR: '/tmp/build-scratch',
MISSION_CONTROL_DB_PATH: undefined,
MISSION_CONTROL_TOKENS_PATH: undefined,
})
expect(config.dataDir).toMatch(/^\/tmp\/build-scratch\/worker-\d+$/)
expect(config.dbPath).toMatch(/^\/tmp\/build-scratch\/worker-\d+\/mission-control\.db$/)
expect(config.tokensPath).toMatch(/^\/tmp\/build-scratch\/worker-\d+\/mission-control-tokens\.json$/)
})
it('prefers build-specific db and token overrides during next build', async () => {
const config = await loadConfigWithEnv({
NEXT_PHASE: 'phase-production-build',
MISSION_CONTROL_DATA_DIR: '/tmp/runtime-data',
MISSION_CONTROL_DB_PATH: '/tmp/runtime.db',
MISSION_CONTROL_TOKENS_PATH: '/tmp/runtime-tokens.json',
MISSION_CONTROL_BUILD_DB_PATH: '/tmp/build.db',
MISSION_CONTROL_BUILD_TOKENS_PATH: '/tmp/build-tokens.json',
})
const expectedBuildRoot = path.join(os.tmpdir(), 'mission-control-build')
expect(config.dataDir).toMatch(new RegExp(`^${expectedBuildRoot.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}/worker-\\d+$`))
expect(config.dbPath).toBe('/tmp/build.db')
expect(config.tokensPath).toBe('/tmp/build-tokens.json')
})
})
|