55 lines
1.9 KiB
TypeScript
55 lines
1.9 KiB
TypeScript
import { act, renderHook } from '@testing-library/react';
|
|
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
const navigateMock = vi.hoisted(() => vi.fn());
|
|
const routerState = vi.hoisted(() => ({ searchParams: new URLSearchParams() }));
|
|
|
|
vi.mock('react-router', () => ({
|
|
useNavigate: () => navigateMock,
|
|
useLocation: () => ({ pathname: '/pair', search: routerState.searchParams.toString() }),
|
|
useSearchParams: () => [routerState.searchParams, vi.fn()],
|
|
}));
|
|
|
|
vi.mock('../acp/sessions', () => ({
|
|
acpGetSessionListItem: vi.fn(() => new Promise(() => {})),
|
|
acpListRecentSessions: vi.fn().mockResolvedValue([]),
|
|
}));
|
|
|
|
vi.mock('../contexts/ChatContext', () => ({
|
|
useChatContext: () => ({ chat: { sessionId: undefined } }),
|
|
}));
|
|
|
|
import { useNavigationSessions } from './useNavigationSessions';
|
|
|
|
const injectedSessionId = 'session-1&shouldStartAgent=true';
|
|
|
|
function expectSingleSessionParameter(target: string) {
|
|
const url = new URL(target, 'http://localhost');
|
|
expect(url.searchParams.get('resumeSessionId')).toBe(injectedSessionId);
|
|
expect(url.searchParams.get('shouldStartAgent')).toBeNull();
|
|
}
|
|
|
|
describe('useNavigationSessions', () => {
|
|
beforeEach(() => {
|
|
navigateMock.mockReset();
|
|
routerState.searchParams = new URLSearchParams();
|
|
});
|
|
|
|
it('keeps a selected session ID in one query parameter', () => {
|
|
const { result } = renderHook(() => useNavigationSessions());
|
|
|
|
act(() => result.current.handleSessionClick(injectedSessionId));
|
|
|
|
expectSingleSessionParameter(navigateMock.mock.calls[0][0]);
|
|
});
|
|
|
|
it('keeps a retained session ID in one query parameter', () => {
|
|
routerState.searchParams = new URLSearchParams({ resumeSessionId: injectedSessionId });
|
|
const { result } = renderHook(() => useNavigationSessions());
|
|
|
|
act(() => result.current.handleNavClick('/pair'));
|
|
|
|
expectSingleSessionParameter(navigateMock.mock.calls[0][0]);
|
|
});
|
|
});
|