cookies-next
Version:
Set, Get, Remove cookies on both client and server side with Next.js
104 lines (78 loc) • 2.63 kB
text/typescript
import { renderHook, act } from '@testing-library/react';
import {
getCookie,
setCookie,
useDeleteCookie,
useGetCookie,
useGetCookies,
useHasCookie,
useSetCookie,
} from '../index';
describe('Hooks operations.', () => {
test('useGetCookies should return all cookies.', () => {
const { result } = renderHook(() => useGetCookies());
setCookie('key1', 'value1');
setCookie('key2', 'value2');
const getCookies = result.current;
let cookies = null;
act(() => {
cookies = getCookies();
});
expect(cookies).toEqual({ key1: 'value1', key2: 'value2' });
});
test('useSetCookie should set a cookie', () => {
const { result } = renderHook(() => useSetCookie());
const setCookie = result.current;
act(() => {
setCookie('testKey', 'testValue');
});
expect(document.cookie).toContain('testKey=testValue');
});
test('useDeleteCookie should remove a cookie', () => {
const { result } = renderHook(() => useDeleteCookie());
const deleteCookie = result.current;
document.cookie = 'testKey3=testValue3';
act(() => {
deleteCookie('testKey3');
});
expect(document.cookie).not.toContain('testKey3=testValue3');
});
test('useHasCookie should return true for existing cookie', () => {
const { result } = renderHook(() => useHasCookie());
const hasCookie = result.current;
document.cookie = 'testKey4=testValue4';
let exists = null;
act(() => {
exists = hasCookie('testKey4');
});
expect(exists).toBe(true);
});
test('useHasCookie should return false for non-existing cookie', () => {
const { result } = renderHook(() => useHasCookie());
const hasCookie = result.current;
let exists = null;
act(() => {
exists = hasCookie('nonExistentKey5');
});
expect(exists).toBe(false);
});
test('useGetCookie should return undefined for non-existing cookie', () => {
const { result } = renderHook(() => useGetCookie());
const getCookie = result.current;
let value = null;
act(() => {
value = getCookie('nonExistentKey');
});
expect(value).toBeUndefined();
});
test('useSetCookie should handle complex values', () => {
const complexValue = { key: 'value', nested: { array: [1, 2, 3] } };
const { result } = renderHook(() => useSetCookie());
const setCookie = result.current;
act(() => {
setCookie('complexKey', complexValue);
});
let retrievedValue = getCookie('complexKey');
expect(typeof retrievedValue === 'string' ? JSON.parse(retrievedValue) : {}).toEqual(complexValue);
});
});