Files
Final-Year-Project/Backend/tests/env.test.ts

67 lines
2.2 KiB
TypeScript

import { afterEach, describe, expect, test } from 'bun:test';
import { getBetterAuthBaseUrl, getDeviceOnlineStaleSeconds, getFirstDefinedEnv, getRequiredEnv } from '../utils/env';
const ORIGINAL_ENV = { ...process.env };
afterEach(() => {
process.env = { ...ORIGINAL_ENV };
});
describe('env helpers', () => {
test('getFirstDefinedEnv returns first set value', () => {
process.env.TEST_A = '';
process.env.TEST_B = ' value-b ';
expect(getFirstDefinedEnv('TEST_A', 'TEST_B')).toBe('value-b');
});
test('getBetterAuthBaseUrl prefers BETTER_AUTH_BASE_URL over legacy var', () => {
process.env.BETTER_AUTH_BASE_URL = 'http://base-url:4000';
process.env.BETTER_AUTH_URL = 'http://legacy:3000';
expect(getBetterAuthBaseUrl()).toBe('http://base-url:4000');
});
test('getBetterAuthBaseUrl falls back to localhost with current port', () => {
delete process.env.BETTER_AUTH_BASE_URL;
delete process.env.BETTER_AUTH_URL;
process.env.PORT = '8088';
expect(getBetterAuthBaseUrl()).toBe('http://localhost:8088');
});
test('getRequiredEnv returns a trimmed value', () => {
process.env.EXAMPLE_SECRET = ' super-secret ';
expect(getRequiredEnv('EXAMPLE_SECRET')).toBe('super-secret');
});
test('getRequiredEnv throws for missing values', () => {
delete process.env.MISSING_SECRET;
expect(() => getRequiredEnv('MISSING_SECRET')).toThrow('MISSING_SECRET is required');
});
test('getDeviceOnlineStaleSeconds defaults to 30', () => {
delete process.env.DEVICE_ONLINE_STALE_SECONDS;
expect(getDeviceOnlineStaleSeconds()).toBe(30);
});
test('getDeviceOnlineStaleSeconds parses valid positive integer values', () => {
process.env.DEVICE_ONLINE_STALE_SECONDS = '45';
expect(getDeviceOnlineStaleSeconds()).toBe(45);
});
test('getDeviceOnlineStaleSeconds falls back to default on invalid values', () => {
process.env.DEVICE_ONLINE_STALE_SECONDS = '0';
expect(getDeviceOnlineStaleSeconds()).toBe(30);
process.env.DEVICE_ONLINE_STALE_SECONDS = '-2';
expect(getDeviceOnlineStaleSeconds()).toBe(30);
process.env.DEVICE_ONLINE_STALE_SECONDS = 'abc';
expect(getDeviceOnlineStaleSeconds()).toBe(30);
});
});