diff --git a/services/platform-service/src/lib/config.test.ts b/services/platform-service/src/lib/config.test.ts new file mode 100644 index 00000000..3388bee4 --- /dev/null +++ b/services/platform-service/src/lib/config.test.ts @@ -0,0 +1,53 @@ +import { afterEach, describe, expect, it, vi } from 'vitest'; + +const REQUIRED_ENV = { + COSMOS_ENDPOINT: 'https://example.documents.azure.com:443/', + COSMOS_KEY: 'test-cosmos-key', + JWT_SECRET: 'test-jwt-secret', +}; + +afterEach(() => { + vi.resetModules(); + vi.unstubAllEnvs(); +}); + +describe('lib/config', () => { + it('parses with defaults when required env vars are set', async () => { + vi.stubEnv('COSMOS_ENDPOINT', REQUIRED_ENV.COSMOS_ENDPOINT); + vi.stubEnv('COSMOS_KEY', REQUIRED_ENV.COSMOS_KEY); + vi.stubEnv('JWT_SECRET', REQUIRED_ENV.JWT_SECRET); + + const { config } = await import('./config.js'); + + expect(config.PORT).toBe(4003); + expect(config.HOST).toBe('0.0.0.0'); + expect(['development', 'test']).toContain(config.NODE_ENV); + expect(config.COSMOS_DATABASE).toBe('lysnrai'); + expect(config.USAGE_WARN_THRESHOLD).toBe(0.8); + }); + + it('respects explicit env overrides', async () => { + vi.stubEnv('COSMOS_ENDPOINT', REQUIRED_ENV.COSMOS_ENDPOINT); + vi.stubEnv('COSMOS_KEY', REQUIRED_ENV.COSMOS_KEY); + vi.stubEnv('JWT_SECRET', REQUIRED_ENV.JWT_SECRET); + vi.stubEnv('PORT', '4999'); + vi.stubEnv('NODE_ENV', 'test'); + vi.stubEnv('SERVICE_NAME', 'platform-service-test'); + vi.stubEnv('USAGE_WARN_THRESHOLD', '0.9'); + + const { config } = await import('./config.js'); + + expect(config.PORT).toBe(4999); + expect(config.NODE_ENV).toBe('test'); + expect(config.SERVICE_NAME).toBe('platform-service-test'); + expect(config.USAGE_WARN_THRESHOLD).toBe(0.9); + }); + + it('throws when required env vars are missing', async () => { + vi.stubEnv('COSMOS_ENDPOINT', ''); + vi.stubEnv('COSMOS_KEY', ''); + vi.stubEnv('JWT_SECRET', ''); + + await expect(import('./config.js')).rejects.toThrow(); + }); +});