mirror of
https://github.com/hansjone/netxops.git
synced 2026-10-20 06:33:18 +08:00
93 lines
3.1 KiB
JavaScript
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')
|
|
})
|