77 lines
2.5 KiB
TypeScript
77 lines
2.5 KiB
TypeScript
import { act, cleanup, renderHook } from '@testing-library/react'
|
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
|
|
import { $changeEventsAvailable, $cronChangeTick, $sessionsChangeTick } from '@/store/live-sync'
|
|
import { $activeSessionId } from '@/store/session'
|
|
|
|
import { useBackgroundSync } from './use-background-sync'
|
|
|
|
const noop = () => undefined
|
|
const requestGateway = async () => ({ sessions: [] })
|
|
|
|
function render(activeGatewayProfile: string, activeConnectionId: string, refreshSessions: () => Promise<void>) {
|
|
return renderHook(
|
|
({ connectionId, profile }: { connectionId: string; profile: string }) => {
|
|
useBackgroundSync({
|
|
activeConnectionId: connectionId,
|
|
activeGatewayProfile: profile,
|
|
activeIsMessaging: false,
|
|
activeSessionId: null,
|
|
activeStoredSessionId: null,
|
|
freshDraftReady: false,
|
|
gatewayState: 'open',
|
|
refreshActiveTranscript: noop,
|
|
refreshCronJobs: noop,
|
|
refreshCurrentModel: noop,
|
|
refreshHermesConfig: noop,
|
|
refreshMessagingSessions: noop,
|
|
refreshSessions,
|
|
requestGateway
|
|
})
|
|
},
|
|
{ initialProps: { connectionId: activeConnectionId, profile: activeGatewayProfile } }
|
|
)
|
|
}
|
|
|
|
describe('useBackgroundSync profile-scoped session refresh', () => {
|
|
beforeEach(() => {
|
|
vi.useFakeTimers()
|
|
$activeSessionId.set(null)
|
|
$changeEventsAvailable.set(false)
|
|
$cronChangeTick.set(0)
|
|
$sessionsChangeTick.set(0)
|
|
})
|
|
|
|
afterEach(() => {
|
|
cleanup()
|
|
vi.useRealTimers()
|
|
})
|
|
|
|
it('refreshes the session list after the active gateway profile changes', async () => {
|
|
const refreshSessions = vi.fn(async () => undefined)
|
|
const hook = render('default', 'local', refreshSessions)
|
|
|
|
await act(async () => undefined)
|
|
expect(refreshSessions).toHaveBeenCalledTimes(1)
|
|
refreshSessions.mockClear()
|
|
|
|
hook.rerender({ connectionId: 'local', profile: 'nova' })
|
|
|
|
await act(async () => undefined)
|
|
expect(refreshSessions).toHaveBeenCalledTimes(1)
|
|
})
|
|
|
|
it('refreshes the session list when the backend changes but the profile name does not', async () => {
|
|
const refreshSessions = vi.fn(async () => undefined)
|
|
const hook = render('default', 'work', refreshSessions)
|
|
|
|
await act(async () => undefined)
|
|
refreshSessions.mockClear()
|
|
|
|
hook.rerender({ connectionId: 'homelab', profile: 'default' })
|
|
|
|
await act(async () => undefined)
|
|
expect(refreshSessions).toHaveBeenCalledTimes(1)
|
|
})
|
|
})
|