1
import { renderHook } from '@testing-library/react';
2
import urlJoin from 'url-join';
3
import { describe, expect, it, vi } from 'vitest';
5
import { INBOX_SESSION_ID } from '@/const/session';
6
import { useIsMobile } from '@/hooks/useIsMobile';
7
import { useGlobalStore } from '@/store/global';
8
import { ChatSettingsTabs, SettingsTabs, SidebarTabKey } from '@/store/global/initialState';
9
import { useSessionStore } from '@/store/session';
11
import { useOpenChatSettings, useOpenSettings } from './useInterceptingRoutes';
14
vi.mock('next/navigation', () => ({
15
useRouter: vi.fn(() => ({
16
push: vi.fn((href) => href),
17
replace: vi.fn((href) => href),
20
vi.mock('@/hooks/useQuery', () => ({
21
useQuery: vi.fn(() => ({})),
23
vi.mock('@/hooks/useIsMobile', () => ({
26
vi.mock('@/store/session', () => ({
27
useSessionStore: vi.fn(),
29
vi.mock('@/store/global', () => ({
35
describe('useOpenSettings', () => {
36
it('should handle mobile route correctly', () => {
37
vi.mocked(useIsMobile).mockReturnValue(true);
38
const { result } = renderHook(() => useOpenSettings(SettingsTabs.Common));
39
expect(result.current()).toBe('/settings/common');
42
it('should handle desktop route correctly', () => {
43
vi.mocked(useIsMobile).mockReturnValue(false);
44
const { result } = renderHook(() => useOpenSettings(SettingsTabs.Agent));
45
expect(result.current()).toBe('/settings/modal?tab=agent');
49
describe('useOpenChatSettings', () => {
50
it('should handle inbox session id correctly', () => {
51
vi.mocked(useSessionStore).mockReturnValue(INBOX_SESSION_ID);
52
const { result } = renderHook(() => useOpenChatSettings());
54
expect(result.current()).toBe('/settings/modal?session=inbox&tab=agent');
57
it('should handle mobile route for chat settings', () => {
58
vi.mocked(useSessionStore).mockReturnValue('123');
59
vi.mocked(useIsMobile).mockReturnValue(true);
60
const { result } = renderHook(() => useOpenChatSettings(ChatSettingsTabs.Meta));
61
expect(result.current()).toBe('/chat/settings');
64
it('should handle desktop route for chat settings with session and tab', () => {
65
vi.mocked(useSessionStore).mockReturnValue('456');
66
vi.mocked(useIsMobile).mockReturnValue(false);
67
const { result } = renderHook(() => useOpenChatSettings(ChatSettingsTabs.Meta));
68
expect(result.current()).toBe('/chat/settings/modal?session=456&tab=meta');