All files / platform/ui/src/hooks useSessionStorage.test.js

0% Statements 0/63
100% Branches 0/0
0% Functions 0/16
0% Lines 0/62

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104                                                                                                                                                                                                               
import { act } from 'react';
import { renderHook } from '@testing-library/react';
import useSessionStorage from './useSessionStorage';
 
const SESSION_STORAGE_KEY = 'test';
 
describe('Hook Session Storage', () => {
  beforeEach(() => {
    window.sessionStorage.removeItem(SESSION_STORAGE_KEY);
  });
 
  it('hook should return state and setState', () => {
    const data = { test: 1 };
    const { result } = renderHook(() =>
      useSessionStorage({ key: SESSION_STORAGE_KEY, defaultValue: data })
    );
    const [hookState, setHookState] = result.current;
    expect(hookState).toStrictEqual(data);
    expect(typeof setHookState).toBe('function');
  });
 
  it('hook should store data on sessionStorage', () => {
    const data = { test: 2 };
    renderHook(() => useSessionStorage({ key: SESSION_STORAGE_KEY, defaultValue: data }));
 
    const dataStr = JSON.stringify(data);
    const dataSessionStorage = window.sessionStorage.getItem(SESSION_STORAGE_KEY);
    expect(dataSessionStorage).toEqual(dataStr);
  });
 
  it('hook should return stored data from sessionStorage', () => {
    const data = { test: 3 };
    const dataToCompare = { test: 4 };
 
    window.sessionStorage.setItem(SESSION_STORAGE_KEY, JSON.stringify(dataToCompare));
 
    const { result } = renderHook(() =>
      useSessionStorage({ key: SESSION_STORAGE_KEY, defaultValue: data })
    );
    const [hookState, setHookState] = result.current;
 
    expect(hookState).toStrictEqual(dataToCompare);
  });
 
  it('hook should provide a setState method which updates its state', () => {
    const data = { test: 5 };
    const dataToCompare = { test: 6 };
    const { result } = renderHook(() =>
      useSessionStorage({ key: SESSION_STORAGE_KEY, defaultValue: data })
    );
    const [hookState, setHookState] = result.current;
 
    act(() => {
      setHookState(dataToCompare);
    });
 
    const dataToCompareStr = JSON.stringify(dataToCompare);
    const dataSessionStorage = window.sessionStorage.getItem(SESSION_STORAGE_KEY);
 
    const [hookStateToCompare] = result.current;
    expect(dataSessionStorage).toEqual(dataToCompareStr);
    expect(hookStateToCompare).toStrictEqual(dataToCompare);
  });
 
  it('hook state must be preserved in case rerender', () => {
    const data = { test: 7 };
    const { result, rerender } = renderHook(() =>
      useSessionStorage({ key: SESSION_STORAGE_KEY, defaultValue: data })
    );
 
    rerender();
 
    const [hookState, setHookState] = result.current;
 
    const dataToCompareStr = JSON.stringify(data);
    const dataSessionStorage = window.sessionStorage.getItem(SESSION_STORAGE_KEY);
 
    expect(dataSessionStorage).toEqual(dataToCompareStr);
    expect(hookState).toStrictEqual(data);
  });
 
  it('hook state must be preserved in case multiple operations and rerender', () => {
    const data = { test: 8 };
    const dataToCompare = { test: 9 };
    const { result, rerender } = renderHook(() =>
      useSessionStorage({ key: SESSION_STORAGE_KEY, defaultValue: data })
    );
    const [hookState, setHookState] = result.current;
 
    act(() => {
      setHookState(dataToCompare);
    });
 
    rerender();
 
    const dataToCompareStr = JSON.stringify(dataToCompare);
    const dataSessionStorage = window.sessionStorage.getItem(SESSION_STORAGE_KEY);
 
    const [hookStateToCompare] = result.current;
    expect(dataSessionStorage).toEqual(dataToCompareStr);
    expect(hookStateToCompare).toStrictEqual(dataToCompare);
  });
});