75 lines
2.8 KiB
TypeScript
75 lines
2.8 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { loadConfig } from '../../src/config.js';
|
|
|
|
const base = {
|
|
DATABASE_URL: 'postgres://localhost/staff',
|
|
STANDALONE_TENANT_ID: '01ARZ3NDEKTSV4RRFFQ69G5FAV',
|
|
STANDALONE_ACTOR_ID: '01J00000000000000000000001',
|
|
};
|
|
|
|
describe('runtime modes', () => {
|
|
it('allows the compatible standalone adapter', () =>
|
|
expect(loadConfig(base).STAFF_RUNTIME_MODE).toBe('standalone'));
|
|
it('fails closed when platform contracts are missing', () =>
|
|
expect(() => loadConfig({ ...base, STAFF_RUNTIME_MODE: 'platform' })).toThrow(
|
|
/PLATFORM_GATEWAY_URL/,
|
|
));
|
|
it('rejects standalone mode in production', () =>
|
|
expect(() => loadConfig({ ...base, NODE_ENV: 'production' })).toThrow(
|
|
/standalone is not allowed/,
|
|
));
|
|
it('requires a standalone tenant ID', () => {
|
|
expect(() => loadConfig({ ...base, STANDALONE_TENANT_ID: undefined })).toThrow(
|
|
/STANDALONE_TENANT_ID/,
|
|
);
|
|
});
|
|
it('allows the placeholder only in development on loopback', () => {
|
|
expect(
|
|
loadConfig({
|
|
...base,
|
|
NODE_ENV: 'development',
|
|
HOST: '127.0.0.1',
|
|
STANDALONE_TENANT_ID: '01J00000000000000000000000',
|
|
}).STANDALONE_TENANT_ID,
|
|
).toBe('01J00000000000000000000000');
|
|
});
|
|
it('rejects the placeholder in test mode and development on a non-loopback host', () => {
|
|
const placeholder = {
|
|
...base,
|
|
STANDALONE_TENANT_ID: '01J00000000000000000000000',
|
|
};
|
|
expect(() => loadConfig({ ...placeholder, NODE_ENV: 'test' })).toThrow(
|
|
/allowed only in development on loopback/,
|
|
);
|
|
expect(() => loadConfig({ ...placeholder, NODE_ENV: 'development', HOST: '0.0.0.0' })).toThrow(
|
|
/allowed only in development on loopback/,
|
|
);
|
|
});
|
|
it('treats empty optional platform variables as absent in compose', () =>
|
|
expect(
|
|
loadConfig({
|
|
...base,
|
|
PLATFORM_GATEWAY_URL: '',
|
|
PLATFORM_JWT_ISSUER: '',
|
|
PLATFORM_JWT_AUDIENCE: '',
|
|
PLATFORM_JWKS_URL: '',
|
|
}).PLATFORM_GATEWAY_URL,
|
|
).toBeUndefined());
|
|
it('requires VAPID keys to be configured together if provided', () => {
|
|
expect(() => loadConfig({ ...base, VAPID_PUBLIC_KEY: 'pubkey' })).toThrow(
|
|
/VAPID_PUBLIC_KEY and VAPID_PRIVATE_KEY must be configured together/,
|
|
);
|
|
expect(() => loadConfig({ ...base, VAPID_PRIVATE_KEY: 'privkey' })).toThrow(
|
|
/VAPID_PUBLIC_KEY and VAPID_PRIVATE_KEY must be configured together/,
|
|
);
|
|
const config = loadConfig({
|
|
...base,
|
|
VAPID_PUBLIC_KEY: 'pubkey',
|
|
VAPID_PRIVATE_KEY: 'privkey',
|
|
VAPID_SUBJECT: 'mailto:ops@krona.local',
|
|
});
|
|
expect(config.VAPID_PUBLIC_KEY).toBe('pubkey');
|
|
expect(config.VAPID_PRIVATE_KEY).toBe('privkey');
|
|
expect(config.VAPID_SUBJECT).toBe('mailto:ops@krona.local');
|
|
});
|
|
});
|