netxops/tests/timeout-nullish.test.mjs

93 lines
3.1 KiB
JavaScript

import test from 'node:test'
import assert from 'node:assert/strict'
import {
DEFAULT_API_URL,
DEFAULT_LANG,
DEFAULT_TOKEN_REF,
DEFAULT_TOOL_CALL_TIMEOUT_MS,
mergeConfigSkippingNullish,
resolveApiUrlForConnection,
resolveLang,
resolveTokenCredentialRef,
resolveToolCallTimeoutMs,
} from '../src/index.ts'
const base = {
apiUrl: 'http://127.0.0.1:8890',
lang: 'zh',
thinkingLanguage: 'auto',
replyLanguage: 'follow-user',
tokenCredentialRef: 'NETX_API_TOKEN',
toolCallTimeoutMs: 120_000,
installAgentPreset: true,
alarmPushEnabled: false,
alarmDeliverDsh: true,
alarmDeliverIm: false,
imTargets: '',
imBotId: '',
imTargetId: '',
nmsProvider: 'zte-ume',
groupOpsInPreset: true,
groupOpsPublic: false,
groupTopologyInPreset: false,
groupTopologyPublic: false,
groupBizMonitorInPreset: true,
groupBizMonitorPublic: false,
kbRoot: '',
groupKbInPreset: true,
groupKbPublic: false,
}
test('mergeConfigSkippingNullish ignores null/undefined volatile fields', () => {
const merged = mergeConfigSkippingNullish(base, {
apiUrl: null,
toolCallTimeoutMs: null,
lang: 'en',
groupOpsPublic: undefined,
})
assert.equal(merged.apiUrl, 'http://127.0.0.1:8890')
assert.equal(merged.toolCallTimeoutMs, 120_000)
assert.equal(merged.lang, 'en')
assert.equal(merged.groupOpsPublic, false)
})
test('resolveToolCallTimeoutMs rejects null / NaN / non-positive', () => {
assert.equal(resolveToolCallTimeoutMs(null), DEFAULT_TOOL_CALL_TIMEOUT_MS)
assert.equal(resolveToolCallTimeoutMs(undefined), DEFAULT_TOOL_CALL_TIMEOUT_MS)
assert.equal(resolveToolCallTimeoutMs(Number.NaN), DEFAULT_TOOL_CALL_TIMEOUT_MS)
assert.equal(resolveToolCallTimeoutMs(0), DEFAULT_TOOL_CALL_TIMEOUT_MS)
assert.equal(resolveToolCallTimeoutMs(-1), DEFAULT_TOOL_CALL_TIMEOUT_MS)
assert.equal(resolveToolCallTimeoutMs(90_000), 90_000)
})
test('resolveApiUrlForConnection falls back on null/empty; rejects bad schemes', () => {
assert.deepEqual(resolveApiUrlForConnection(null), {
url: DEFAULT_API_URL,
usedDefault: true,
})
assert.deepEqual(resolveApiUrlForConnection(''), {
url: DEFAULT_API_URL,
usedDefault: true,
})
assert.deepEqual(resolveApiUrlForConnection('http://10.0.0.1:8890/'), {
url: 'http://10.0.0.1:8890',
usedDefault: false,
})
assert.equal(resolveApiUrlForConnection('file:///tmp').url, '')
assert.equal(resolveApiUrlForConnection('file:///tmp').error, 'unsupported_scheme')
})
test('resolveTokenCredentialRef heals null/invalid to NETX_API_TOKEN', () => {
assert.equal(resolveTokenCredentialRef(null), DEFAULT_TOKEN_REF)
assert.equal(resolveTokenCredentialRef(''), DEFAULT_TOKEN_REF)
assert.equal(resolveTokenCredentialRef('bad-name'), DEFAULT_TOKEN_REF)
assert.equal(resolveTokenCredentialRef('NETX_API_TOKEN'), 'NETX_API_TOKEN')
assert.equal(resolveTokenCredentialRef('CUSTOM_TOKEN'), 'CUSTOM_TOKEN')
})
test('resolveLang heals null/empty to zh', () => {
assert.equal(resolveLang(null), DEFAULT_LANG)
assert.equal(resolveLang(undefined), DEFAULT_LANG)
assert.equal(resolveLang(''), DEFAULT_LANG)
assert.equal(resolveLang('en'), 'en')
})