import { act, renderHook } from '@testing-library/react';
import { createMemoryHistory } from 'history';
import { Router } from 'react-router-dom';
import useUrlQuery from './useUrlQuery';
describe('useUrlQuery', () => {
test('returns URLSearchParams object for the current URL search', () => {
const history = createMemoryHistory({
initialEntries: ['/test?param1=value1¶m2=value2'],
});
const { result } = renderHook(() => useUrlQuery(), {
wrapper: ({ children }) => {children},
});
expect(result.current.get('param1')).toBe('value1');
expect(result.current.get('param2')).toBe('value2');
});
test('updates URLSearchParams object when URL search changes', () => {
const history = createMemoryHistory({
initialEntries: ['/test?param1=value1'],
});
const { result, rerender } = renderHook(() => useUrlQuery(), {
wrapper: ({ children }) => {children},
});
expect(result.current.get('param1')).toBe('value1');
expect(result.current.get('param2')).toBe(null);
act(() => {
history.push('/test?param1=newValue1¶m2=value2');
});
rerender();
expect(result.current.get('param1')).toBe('newValue1');
expect(result.current.get('param2')).toBe('value2');
});
test('returns empty URLSearchParams object when no query parameters are present', () => {
const history = createMemoryHistory({
initialEntries: ['/test'],
});
const { result } = renderHook(() => useUrlQuery(), {
wrapper: ({ children }) => {children},
});
expect(result.current.toString()).toBe('');
expect(result.current.get('param1')).toBe(null);
expect(result.current.get('param2')).toBe(null);
});
});