Files
clawpanel/tests/hermes-session-runtime-config.test.js
2026-05-24 06:49:17 +08:00

80 lines
2.4 KiB
JavaScript

import test from 'node:test'
import assert from 'node:assert/strict'
import {
buildHermesSessionRuntimeConfigValues,
mergeHermesSessionRuntimeConfig,
} from '../scripts/dev-api.js'
test('Hermes 会话运行时配置读取会提供稳定表单默认值', () => {
const values = buildHermesSessionRuntimeConfigValues({})
assert.deepEqual(values, {
sessionResetMode: 'both',
idleMinutes: 1440,
atHour: 4,
groupSessionsPerUser: true,
threadSessionsPerUser: false,
})
})
test('Hermes 会话运行时配置读取会回显 session_reset 与隔离开关', () => {
const values = buildHermesSessionRuntimeConfigValues({
session_reset: {
mode: 'daily',
idle_minutes: 720,
at_hour: 3,
},
group_sessions_per_user: false,
thread_sessions_per_user: true,
})
assert.equal(values.sessionResetMode, 'daily')
assert.equal(values.idleMinutes, 720)
assert.equal(values.atHour, 3)
assert.equal(values.groupSessionsPerUser, false)
assert.equal(values.threadSessionsPerUser, true)
})
test('Hermes 会话运行时配置保存会保留无关 YAML 并写入 snake_case 字段', () => {
const next = mergeHermesSessionRuntimeConfig({
model: { provider: 'anthropic', default: 'claude-sonnet-4-6' },
session_reset: {
mode: 'idle',
idle_minutes: 60,
custom_flag: 'keep-me',
},
streaming: { enabled: true },
}, {
sessionResetMode: 'both',
idleMinutes: '90',
atHour: '6',
groupSessionsPerUser: false,
threadSessionsPerUser: true,
})
assert.deepEqual(next.model, { provider: 'anthropic', default: 'claude-sonnet-4-6' })
assert.deepEqual(next.streaming, { enabled: true })
assert.equal(next.session_reset.mode, 'both')
assert.equal(next.session_reset.idle_minutes, 90)
assert.equal(next.session_reset.at_hour, 6)
assert.equal(next.session_reset.custom_flag, 'keep-me')
assert.equal(next.group_sessions_per_user, false)
assert.equal(next.thread_sessions_per_user, true)
})
test('Hermes 会话运行时配置保存会拒绝非法模式和范围', () => {
assert.throws(
() => mergeHermesSessionRuntimeConfig({}, { sessionResetMode: 'weekly' }),
/session_reset\.mode/,
)
assert.throws(
() => mergeHermesSessionRuntimeConfig({}, { idleMinutes: '0' }),
/idle_minutes/,
)
assert.throws(
() => mergeHermesSessionRuntimeConfig({}, { atHour: '24' }),
/at_hour/,
)
})