Skip to content
Snippets Groups Projects
Header.spec.tsx 3.23 KiB
Newer Older
  • Learn to ignore specific revisions
  • Bastien DUMONT's avatar
    Bastien DUMONT committed
    import { render, screen } from '@testing-library/react'
    import userEvent from '@testing-library/user-event'
    
    import Header from 'components/Header/Header'
    import React from 'react'
    
    Yoan VALLET's avatar
    Yoan VALLET committed
    import { Provider } from 'react-redux'
    
    import * as ModalAction from 'store/modal/modal.slice'
    
    import { createMockEcolyoStore } from 'tests/__mocks__/store'
    
    Yoan VALLET's avatar
    Yoan VALLET committed
    
    
    const mockedNavigate = jest.fn()
    
    jest.mock('react-router-dom', () => ({
    
      ...jest.requireActual('react-router-dom'),
      useNavigate: () => mockedNavigate,
    
    describe('Header component', () => {
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
      const store = createMockEcolyoStore()
    
      it('should be rendered correctly', () => {
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
        const { container } = render(
    
    Yoan VALLET's avatar
    Yoan VALLET committed
          <Provider store={store}>
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
            <Header setHeaderHeight={jest.fn()} desktopTitleKey="mockKey" />
    
    Yoan VALLET's avatar
    Yoan VALLET committed
          </Provider>
        )
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
        expect(container).toMatchSnapshot()
        expect(container.getElementsByTagName('header')[0]).toBeInTheDocument()
    
    Yoan VALLET's avatar
    Yoan VALLET committed
      })
    
      it('should display title and back button when desktopTitle key provided and displayBackArrow is true', () => {
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
        const key = 'titleKey'
        render(
    
    Yoan VALLET's avatar
    Yoan VALLET committed
          <Provider store={store}>
            <Header
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
              desktopTitleKey={key}
    
    Yoan VALLET's avatar
    Yoan VALLET committed
              displayBackArrow={true}
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
              setHeaderHeight={jest.fn()}
    
    Yoan VALLET's avatar
    Yoan VALLET committed
            />
          </Provider>
        )
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
        expect(screen.getByText(key)).toBeInTheDocument()
    
    Yoan VALLET's avatar
    Yoan VALLET committed
        expect(
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
          screen.getByRole('button', { name: 'header.accessibility.button_back' })
        ).toBeInTheDocument()
    
    Yoan VALLET's avatar
    Yoan VALLET committed
      })
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
      it('should NOT display back button when displayBackArrow is false', async () => {
        render(
    
    Yoan VALLET's avatar
    Yoan VALLET committed
          <Provider store={store}>
            <Header
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
              desktopTitleKey="test"
              displayBackArrow={false}
              setHeaderHeight={jest.fn()}
    
    Yoan VALLET's avatar
    Yoan VALLET committed
            />
          </Provider>
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
        expect(
          screen.queryByRole('button', {
            name: 'header.accessibility.button_back',
          })
        ).not.toBeInTheDocument()
      })
    
      describe('back functions', () => {
        it('should call navigate -1 when back button is clicked with NO back fn', async () => {
          render(
            <Provider store={store}>
              <Header
                desktopTitleKey="KEY"
                displayBackArrow={true}
                setHeaderHeight={jest.fn()}
              />
            </Provider>
          )
          await userEvent.click(screen.getAllByRole('button')[0])
          expect(mockedNavigate).toHaveBeenCalled()
        })
        it('should call custom back fn when back button is clicked', async () => {
          const mockBack = jest.fn()
          render(
            <Provider store={store}>
              <Header
                desktopTitleKey="KEY"
                displayBackArrow={true}
                setHeaderHeight={jest.fn()}
                backFunction={mockBack}
              />
            </Provider>
          )
          await userEvent.click(screen.getAllByRole('button')[0])
          expect(mockBack).toHaveBeenCalled()
        })
    
    Yoan VALLET's avatar
    Yoan VALLET committed
    
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
      it('should call handleClickFeedbacks when feedback button is clicked', async () => {
        render(
    
    Yoan VALLET's avatar
    Yoan VALLET committed
          <Provider store={store}>
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
            <Header setHeaderHeight={jest.fn()} desktopTitleKey="mockKey" />
    
    Yoan VALLET's avatar
    Yoan VALLET committed
          </Provider>
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
        const updateModalSpy = jest.spyOn(ModalAction, 'openFeedbackModal')
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
        await userEvent.click(screen.getAllByRole('button')[0])
    
    Yoan VALLET's avatar
    Yoan VALLET committed
        expect(updateModalSpy).toHaveBeenCalledWith(true)