mirror of
https://github.com/hansjone/netxops.git
synced 2026-10-20 02:43:21 +08:00
Fix preset publication, volatile settings and client form binding
This commit is contained in:
parent
fe0fe70d33
commit
0b9a3a82bc
66 changed files with 8546 additions and 3690 deletions
93
tests/timeout-nullish.test.mjs
Normal file
93
tests/timeout-nullish.test.mjs
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
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')
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue