1
import { renderHook } from '@testing-library/react';
2
import { describe, expect, it, vi } from 'vitest';
4
import { useQueryRoute } from './useQueryRoute';
7
vi.mock('next/navigation', () => ({
8
useRouter: vi.fn(() => ({
9
push: vi.fn((href) => href),
10
replace: vi.fn((href) => href),
13
vi.mock('@/hooks/useQuery', () => ({
14
useQuery: vi.fn(() => ({ foo: 'bar' })),
16
vi.mock('@/utils/env', () => ({
17
isOnServerSide: false,
20
describe('useQueryRoute', () => {
21
it('should generate correct href without hash and replace', () => {
22
const { result } = renderHook(() =>
23
useQueryRoute().push('/example', {
24
query: { baz: 'qux' },
28
expect(result.current).toBe('/example?baz=qux&foo=bar');
31
it('should replace entire query string when replace is true', () => {
32
const { result } = renderHook(() =>
33
useQueryRoute().push('/example', {
35
query: { baz: 'qux' },
39
expect(result.current).toBe('/example?baz=qux');
42
it('should append hash to the URL', () => {
43
const { result } = renderHook(() =>
44
useQueryRoute().push('/example', {
46
query: { foo: 'bar' },
51
expect(result.current).toBe('/example?foo=bar#section1');
54
it('should handle scenarios when on server side', () => {
55
const { result } = renderHook(() =>
56
useQueryRoute().push('/example', {
57
query: { foo: 'bar' },
62
expect(result.current).toBe('/example?foo=bar#section1');
65
it('should handle cases with empty query and hash', () => {
66
const { result } = renderHook(() =>
67
useQueryRoute().replace('/example', {
74
expect(result.current).toBe('/example');
77
it('should handle cases without hash when on server side', () => {
78
const { result } = renderHook(() =>
79
useQueryRoute().replace('/example', {
80
query: { foo: 'bar' },
84
expect(result.current).toBe('/example?foo=bar');