Layout.test.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import React from 'react';
  2. import { render, screen, waitFor } from '../../../../tests/test-utils';
  3. import { getTRPCMock, getTRPCMockError } from '../../mocks/getTrpcMock';
  4. import { server } from '../../mocks/server';
  5. import { Layout } from './Layout';
  6. const pushFn = jest.fn();
  7. jest.mock('next/router', () => {
  8. const actualRouter = jest.requireActual('next-router-mock');
  9. return {
  10. ...actualRouter,
  11. useRouter: () => ({
  12. ...actualRouter.useRouter(),
  13. push: pushFn,
  14. }),
  15. };
  16. });
  17. describe('Test: Layout', () => {
  18. it('should render correctly its children', () => {
  19. render(<Layout>test</Layout>);
  20. expect(screen.getByText('test')).toBeInTheDocument();
  21. });
  22. it('should correctly set token in localStorage when refreshToken is called', async () => {
  23. // Arranger
  24. server.use(getTRPCMock({ path: ['auth', 'refreshToken'], type: 'mutation', response: { token: 'fake-token' } }));
  25. render(<Layout>test</Layout>);
  26. // Act
  27. await waitFor(() => {
  28. expect(localStorage.getItem('token')).toBe('fake-token');
  29. });
  30. });
  31. it('should remove token from local storage and redirect to login page on error', async () => {
  32. // Arranger
  33. server.use(getTRPCMockError({ path: ['auth', 'refreshToken'], type: 'mutation', message: 'fake-error' }));
  34. render(<Layout>test</Layout>);
  35. const removeItemSpy = jest.spyOn(localStorage, 'removeItem');
  36. // Act
  37. await waitFor(() => {
  38. expect(removeItemSpy).toBeCalledWith('token');
  39. expect(pushFn).toBeCalledWith('/login');
  40. });
  41. });
  42. });