Files
KVideo/tests/lan-access.test.ts

49 lines
1.7 KiB
TypeScript

import test from 'node:test';
import assert from 'node:assert/strict';
import {
DEFAULT_LAN_ALLOWED_DEV_ORIGINS,
getLanAllowedDevOrigins,
isLanAccessEnabled,
parseBooleanEnv,
parseLanAllowedDevOrigins,
} from '@/lib/config/lan-access';
test('parseBooleanEnv only enables explicit truthy values', () => {
assert.equal(parseBooleanEnv('true'), true);
assert.equal(parseBooleanEnv(' ON '), true);
assert.equal(parseBooleanEnv('1'), true);
assert.equal(parseBooleanEnv('false'), false);
assert.equal(parseBooleanEnv('0'), false);
assert.equal(parseBooleanEnv(undefined), false);
});
test('isLanAccessEnabled supports server and public env names', () => {
assert.equal(isLanAccessEnabled({}), false);
assert.equal(isLanAccessEnabled({ ALLOW_LAN_ACCESS: 'true' }), true);
assert.equal(isLanAccessEnabled({ NEXT_PUBLIC_ALLOW_LAN_ACCESS: 'yes' }), true);
});
test('parseLanAllowedDevOrigins accepts hostnames, URLs, ports, and comma lists', () => {
assert.deepEqual(
parseLanAllowedDevOrigins('http://192.168.1.10:3000, local.kvideo.test:8080 *.lan.test'),
['192.168.1.10', 'local.kvideo.test', '*.lan.test']
);
});
test('getLanAllowedDevOrigins returns defaults and custom origins only when enabled', () => {
assert.deepEqual(getLanAllowedDevOrigins({ LAN_ALLOWED_DEV_ORIGINS: '192.168.50.10' }), []);
const origins = getLanAllowedDevOrigins({
ALLOW_LAN_ACCESS: 'true',
LAN_ALLOWED_DEV_ORIGINS: '192.168.50.10',
});
assert.ok(origins.includes('10.*.*.*'));
assert.ok(origins.includes('172.16.*.*'));
assert.ok(origins.includes('172.31.*.*'));
assert.ok(origins.includes('192.168.*.*'));
assert.ok(origins.includes('192.168.50.10'));
assert.equal(origins.length, DEFAULT_LAN_ALLOWED_DEV_ORIGINS.length + 1);
});