Add session-level bridge model settings (#811)
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
// @vitest-environment jsdom
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import { mount } from '@vue/test-utils'
|
||||
import { createPinia, setActivePinia } from 'pinia'
|
||||
|
||||
const mockConversationsApi = vi.hoisted(() => ({
|
||||
fetchConversationSummaries: vi.fn(),
|
||||
@@ -38,6 +39,7 @@ function deferred<T>() {
|
||||
describe('ConversationMonitorPane', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
setActivePinia(createPinia())
|
||||
vi.useFakeTimers()
|
||||
mockConversationsApi.fetchConversationSummaries.mockResolvedValue([
|
||||
{
|
||||
|
||||
@@ -12,6 +12,8 @@ const localGetSessionDetailMock = vi.fn()
|
||||
const localSearchSessionsMock = vi.fn()
|
||||
const localDeleteSessionMock = vi.fn()
|
||||
const localRenameSessionMock = vi.fn()
|
||||
const localCreateSessionMock = vi.fn()
|
||||
const localUpdateSessionMock = vi.fn()
|
||||
const getGroupChatServerMock = vi.fn()
|
||||
const getLocalUsageStatsMock = vi.fn()
|
||||
const getActiveProfileNameMock = vi.fn()
|
||||
@@ -55,6 +57,9 @@ vi.mock('../../packages/server/src/db/hermes/session-store', () => ({
|
||||
getSessionDetail: localGetSessionDetailMock,
|
||||
deleteSession: localDeleteSessionMock,
|
||||
renameSession: localRenameSessionMock,
|
||||
createSession: localCreateSessionMock,
|
||||
getSession: getSessionMock,
|
||||
updateSession: localUpdateSessionMock,
|
||||
}))
|
||||
|
||||
vi.mock('../../packages/server/src/db/hermes/usage-store', () => ({
|
||||
@@ -110,6 +115,8 @@ describe('session conversations controller', () => {
|
||||
localSearchSessionsMock.mockReset()
|
||||
localDeleteSessionMock.mockReset()
|
||||
localRenameSessionMock.mockReset()
|
||||
localCreateSessionMock.mockReset()
|
||||
localUpdateSessionMock.mockReset()
|
||||
getGroupChatServerMock.mockReset()
|
||||
getGroupChatServerMock.mockReturnValue(null)
|
||||
getLocalUsageStatsMock.mockReset()
|
||||
@@ -296,6 +303,22 @@ describe('session conversations controller', () => {
|
||||
])
|
||||
})
|
||||
|
||||
it('sets a session model and provider in the local session store', async () => {
|
||||
getSessionMock.mockReturnValue({ id: 'session-1' })
|
||||
|
||||
const mod = await import('../../packages/server/src/controllers/hermes/sessions')
|
||||
const ctx: any = {
|
||||
params: { id: 'session-1' },
|
||||
request: { body: { model: 'grok-4', provider: 'xai' } },
|
||||
body: null,
|
||||
}
|
||||
await mod.setModel(ctx)
|
||||
|
||||
expect(localCreateSessionMock).not.toHaveBeenCalled()
|
||||
expect(localUpdateSessionMock).toHaveBeenCalledWith('session-1', { model: 'grok-4', provider: 'xai' })
|
||||
expect(ctx.body).toEqual({ ok: true })
|
||||
})
|
||||
|
||||
describe('exportSession', () => {
|
||||
it('returns session as JSON download with correct headers (full mode)', async () => {
|
||||
const sessionData = { id: 'abc-123', title: 'Test Session', messages: [{ id: 1, role: 'user', content: 'hello' }] }
|
||||
|
||||
@@ -11,6 +11,7 @@ const getMock = vi.fn(async (ctx: any) => { ctx.body = { session: { id: ctx.para
|
||||
const removeMock = vi.fn(async (ctx: any) => { ctx.body = { ok: true } })
|
||||
const renameMock = vi.fn(async (ctx: any) => { ctx.body = { ok: true } })
|
||||
const setWorkspaceMock = vi.fn(async (ctx: any) => { ctx.body = { ok: true } })
|
||||
const setModelMock = vi.fn(async (ctx: any) => { ctx.body = { ok: true } })
|
||||
const listWorkspaceFoldersMock = vi.fn(async (ctx: any) => { ctx.body = { folders: [] } })
|
||||
const usageBatchMock = vi.fn(async (ctx: any) => { ctx.body = {} })
|
||||
const usageSingleMock = vi.fn(async (ctx: any) => { ctx.body = { input_tokens: 0, output_tokens: 0 } })
|
||||
@@ -32,6 +33,7 @@ vi.mock('../../packages/server/src/controllers/hermes/sessions', () => ({
|
||||
batchRemove: batchRemoveMock,
|
||||
rename: renameMock,
|
||||
setWorkspace: setWorkspaceMock,
|
||||
setModel: setModelMock,
|
||||
listWorkspaceFolders: listWorkspaceFoldersMock,
|
||||
usageBatch: usageBatchMock,
|
||||
usageSingle: usageSingleMock,
|
||||
@@ -51,6 +53,7 @@ describe('session routes', () => {
|
||||
getMock.mockClear()
|
||||
removeMock.mockClear()
|
||||
renameMock.mockClear()
|
||||
setModelMock.mockClear()
|
||||
})
|
||||
|
||||
it('registers conversations, session list, and search routes', async () => {
|
||||
@@ -71,6 +74,7 @@ describe('session routes', () => {
|
||||
'/api/hermes/sessions/:id/export',
|
||||
'/api/hermes/sessions/:id/usage',
|
||||
'/api/hermes/sessions/:id/rename',
|
||||
'/api/hermes/sessions/:id/model',
|
||||
]))
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user