58 lines
1.9 KiB
TypeScript
58 lines
1.9 KiB
TypeScript
|
|
import { assertEquals, assertThrows } from '@std/assert'
|
||
|
|
import { loadConfig } from '../src/core/config.ts'
|
||
|
|
|
||
|
|
const REQUIRED = {
|
||
|
|
BUNKER_URL: 'bunker://abc?relay=wss://r.example&secret=s',
|
||
|
|
AUTHOR_PUBKEY_HEX: '4fa5d1c413e2b45e10d40bf3562ab701a5331206e359c90baae0e99bfd6c6e41',
|
||
|
|
BOOTSTRAP_RELAY: 'wss://relay.damus.io',
|
||
|
|
}
|
||
|
|
|
||
|
|
Deno.test('loadConfig: liest alle pflicht-keys aus env', () => {
|
||
|
|
const cfg = loadConfig((k) => REQUIRED[k as keyof typeof REQUIRED])
|
||
|
|
assertEquals(cfg.bunkerUrl, REQUIRED.BUNKER_URL)
|
||
|
|
assertEquals(cfg.authorPubkeyHex, REQUIRED.AUTHOR_PUBKEY_HEX)
|
||
|
|
assertEquals(cfg.bootstrapRelay, REQUIRED.BOOTSTRAP_RELAY)
|
||
|
|
})
|
||
|
|
|
||
|
|
Deno.test('loadConfig: liefert defaults für optionale keys', () => {
|
||
|
|
const cfg = loadConfig((k) => REQUIRED[k as keyof typeof REQUIRED])
|
||
|
|
assertEquals(cfg.contentRoot, '../content/posts')
|
||
|
|
assertEquals(cfg.clientTag, '')
|
||
|
|
assertEquals(cfg.minRelayAcks, 2)
|
||
|
|
})
|
||
|
|
|
||
|
|
Deno.test('loadConfig: optionale keys können überschrieben werden', () => {
|
||
|
|
const env = {
|
||
|
|
...REQUIRED,
|
||
|
|
CONTENT_ROOT: '../blog',
|
||
|
|
CLIENT_TAG: 'my-site',
|
||
|
|
MIN_RELAY_ACKS: '3',
|
||
|
|
}
|
||
|
|
const cfg = loadConfig((k) => env[k as keyof typeof env])
|
||
|
|
assertEquals(cfg.contentRoot, '../blog')
|
||
|
|
assertEquals(cfg.clientTag, 'my-site')
|
||
|
|
assertEquals(cfg.minRelayAcks, 3)
|
||
|
|
})
|
||
|
|
|
||
|
|
Deno.test('loadConfig: wirft bei fehlender pflicht-variable', () => {
|
||
|
|
assertThrows(() => loadConfig(() => undefined), Error, 'BUNKER_URL')
|
||
|
|
})
|
||
|
|
|
||
|
|
Deno.test('loadConfig: validiert pubkey-format (64 hex)', () => {
|
||
|
|
const env = { ...REQUIRED, AUTHOR_PUBKEY_HEX: 'zzz' }
|
||
|
|
assertThrows(
|
||
|
|
() => loadConfig((k) => env[k as keyof typeof env]),
|
||
|
|
Error,
|
||
|
|
'AUTHOR_PUBKEY_HEX',
|
||
|
|
)
|
||
|
|
})
|
||
|
|
|
||
|
|
Deno.test('loadConfig: MIN_RELAY_ACKS muss positiv sein', () => {
|
||
|
|
const env = { ...REQUIRED, MIN_RELAY_ACKS: '0' }
|
||
|
|
assertThrows(
|
||
|
|
() => loadConfig((k) => env[k as keyof typeof env]),
|
||
|
|
Error,
|
||
|
|
'MIN_RELAY_ACKS',
|
||
|
|
)
|
||
|
|
})
|