mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-15 14:22:43 +00:00
62 lines
2.4 KiB
TypeScript
62 lines
2.4 KiB
TypeScript
'use strict'
|
|
|
|
import assert from 'node:assert/strict'
|
|
import fs from 'node:fs'
|
|
import path from 'node:path'
|
|
import test from 'node:test'
|
|
|
|
const ELECTRON_DIR = import.meta.dirname
|
|
|
|
function readElectronFile(name) {
|
|
return fs.readFileSync(path.join(ELECTRON_DIR, name), 'utf8').replace(/\r\n/g, '\n')
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// prepareProfileDeleteRequest must return the torn-down profile name so the
|
|
// caller can skip ensureBackend for that profile (issue #52279).
|
|
// ---------------------------------------------------------------------------
|
|
|
|
test('prepareProfileDeleteRequest returns the torn-down profile name', () => {
|
|
const source = readElectronFile('main.ts')
|
|
|
|
// Locate the function definition and its closing brace.
|
|
const fnStart = source.indexOf('async function prepareProfileDeleteRequest(')
|
|
assert.notEqual(fnStart, -1, 'prepareProfileDeleteRequest function not found')
|
|
|
|
// The function must contain "return profile" (pool and primary paths).
|
|
const fnBody = source.slice(fnStart, fnStart + 800)
|
|
const returnProfileCount = (fnBody.match(/return profile/g) || []).length
|
|
assert.ok(
|
|
returnProfileCount >= 2,
|
|
`expected at least 2 "return profile" statements (primary + pool paths), found ${returnProfileCount}`
|
|
)
|
|
|
|
// The early-exit guard must return null (not void/undefined).
|
|
assert.match(fnBody, /return null/, 'early-exit guard should return null, not undefined')
|
|
})
|
|
|
|
test('hermes:api handler routes profile-delete requests to the primary backend', () => {
|
|
const source = readElectronFile('main.ts')
|
|
|
|
// The handler must capture prepareProfileDeleteRequest's return value.
|
|
assert.match(
|
|
source,
|
|
/const tornDownProfile = await prepareProfileDeleteRequest\(request\)/,
|
|
'handler should capture the return value of prepareProfileDeleteRequest'
|
|
)
|
|
|
|
// The handler must use the return value to skip ensureBackend for the
|
|
// torn-down profile, routing to the primary (null) instead.
|
|
assert.match(
|
|
source,
|
|
/const routeProfile = tornDownProfile \? null : profile/,
|
|
'handler should route to primary backend when a profile was just torn down'
|
|
)
|
|
|
|
// ensureBackend must be called with the conditional route profile.
|
|
assert.match(
|
|
source,
|
|
/const connection = await ensureBackend\(routeProfile\)/,
|
|
'handler should pass routeProfile (not raw profile) to ensureBackend'
|
|
)
|
|
})
|