From 1df6ffc7ab768cd32192bbf3f6a64af4c91bfa61 Mon Sep 17 00:00:00 2001 From: Bastien DUMONT <bdumont@grandlyon.com> Date: Thu, 16 Nov 2023 14:27:22 +0000 Subject: [PATCH] test(rtl): header --- .../SgeConnectView.spec.tsx.snap | 6 +- src/components/Header/Header.spec.tsx | 97 +++++++++++-------- src/components/Header/Header.tsx | 4 +- .../Header/__snapshots__/Header.spec.tsx.snap | 53 ++++++++++ src/components/Header/header.scss | 2 +- 5 files changed, 116 insertions(+), 46 deletions(-) create mode 100644 src/components/Header/__snapshots__/Header.spec.tsx.snap diff --git a/src/components/Connection/SGEConnect/__snapshots__/SgeConnectView.spec.tsx.snap b/src/components/Connection/SGEConnect/__snapshots__/SgeConnectView.spec.tsx.snap index eb140eabe..921a6dd18 100644 --- a/src/components/Connection/SGEConnect/__snapshots__/SgeConnectView.spec.tsx.snap +++ b/src/components/Connection/SGEConnect/__snapshots__/SgeConnectView.spec.tsx.snap @@ -6,9 +6,7 @@ exports[`SgeConnectView component should be rendered correctly 1`] = ` displaybackarrow="true" titlekey="common.title_sge_connect" /> - <div - class="header" - > + <header> <div class="header-top" > @@ -77,7 +75,7 @@ exports[`SgeConnectView component should be rendered correctly 1`] = ` <div class="header-bar" /> - </div> + </header> <mock-content heightoffset="-48" > diff --git a/src/components/Header/Header.spec.tsx b/src/components/Header/Header.spec.tsx index 939b20f15..d76305f56 100644 --- a/src/components/Header/Header.spec.tsx +++ b/src/components/Header/Header.spec.tsx @@ -1,6 +1,6 @@ -import IconButton from '@material-ui/core/IconButton' +import { render, screen } from '@testing-library/react' +import userEvent from '@testing-library/user-event' import Header from 'components/Header/Header' -import { mount } from 'enzyme' import React from 'react' import { Provider } from 'react-redux' import * as ModalAction from 'store/modal/modal.slice' @@ -12,71 +12,90 @@ jest.mock('react-router-dom', () => ({ useNavigate: () => mockedNavigate, })) -const mockSetHeaderHeight = jest.fn() - describe('Header component', () => { const store = createMockEcolyoStore() it('should be rendered correctly', () => { - const wrapper = mount( + const { container } = render( <Provider store={store}> - <Header - setHeaderHeight={mockSetHeaderHeight} - desktopTitleKey="mockKey" - /> + <Header setHeaderHeight={jest.fn()} desktopTitleKey="mockKey" /> </Provider> ) - expect(wrapper.find('.header')).toHaveLength(1) + expect(container).toMatchSnapshot() + expect(container.getElementsByTagName('header')[0]).toBeInTheDocument() }) it('should display title and back button when desktopTitle key provided and displayBackArrow is true', () => { - const wrapper = mount( + const key = 'titleKey' + render( <Provider store={store}> <Header - desktopTitleKey="KEY" + desktopTitleKey={key} displayBackArrow={true} - setHeaderHeight={mockSetHeaderHeight} + setHeaderHeight={jest.fn()} /> </Provider> ) - expect(wrapper.find('.header-text-desktop').first().text()).toEqual('KEY') + expect(screen.getByText(key)).toBeInTheDocument() expect( - wrapper.find(IconButton).find('.header-back-button').first() - ).toHaveLength(1) + screen.getByRole('button', { name: 'header.accessibility.button_back' }) + ).toBeInTheDocument() }) - - it('should call handleClickBack when back button is clicked', () => { - const wrapper = mount( + it('should NOT display back button when displayBackArrow is false', async () => { + render( <Provider store={store}> <Header - desktopTitleKey="KEY" - displayBackArrow={true} - setHeaderHeight={mockSetHeaderHeight} + desktopTitleKey="test" + displayBackArrow={false} + setHeaderHeight={jest.fn()} /> </Provider> ) - wrapper - .find(IconButton) - .find('.header-back-button') - .first() - .simulate('click') - expect(mockedNavigate).toHaveBeenCalled() + 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() + }) }) - it('should call handleClickFeedbacks when feedback button is clicked', () => { - const wrapper = mount( + it('should call handleClickFeedbacks when feedback button is clicked', async () => { + render( <Provider store={store}> - <Header - setHeaderHeight={mockSetHeaderHeight} - desktopTitleKey="mockKey" - /> + <Header setHeaderHeight={jest.fn()} desktopTitleKey="mockKey" /> </Provider> ) const updateModalSpy = jest.spyOn(ModalAction, 'openFeedbackModal') - wrapper - .find(IconButton) - .find('.header-feedbacks-button') - .first() - .simulate('click') + await userEvent.click(screen.getAllByRole('button')[0]) expect(updateModalSpy).toHaveBeenCalledWith(true) }) }) diff --git a/src/components/Header/Header.tsx b/src/components/Header/Header.tsx index db54fd297..9eba353d6 100644 --- a/src/components/Header/Header.tsx +++ b/src/components/Header/Header.tsx @@ -54,7 +54,7 @@ const Header = ({ }, [screenType, children, setHeaderHeight]) return ( - <div className="header" ref={header}> + <header ref={header}> <div className="header-top"> <div className="header-content"> <div @@ -100,7 +100,7 @@ const Header = ({ </div> </div> <div className="header-bar" /> - </div> + </header> ) } diff --git a/src/components/Header/__snapshots__/Header.spec.tsx.snap b/src/components/Header/__snapshots__/Header.spec.tsx.snap new file mode 100644 index 000000000..3bd790584 --- /dev/null +++ b/src/components/Header/__snapshots__/Header.spec.tsx.snap @@ -0,0 +1,53 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Header component should be rendered correctly 1`] = ` +<div> + <header> + <div + class="header-top" + > + <div + class="header-content" + > + <div + class="header-content-top" + > + <div + class="header-text-desktop text-14-normal-uppercase" + > + <span> + mockKey + </span> + </div> + <button + aria-label="header.accessibility.button_open_feedbacks" + class="MuiButtonBase-root MuiIconButton-root header-feedbacks-button" + tabindex="0" + type="button" + > + <span + class="MuiIconButton-label" + > + <svg + class="styles__icon___23x3R" + height="40" + width="40" + > + <use + xlink:href="#test-file-stub" + /> + </svg> + </span> + <span + class="MuiTouchRipple-root" + /> + </button> + </div> + </div> + </div> + <div + class="header-bar" + /> + </header> +</div> +`; diff --git a/src/components/Header/header.scss b/src/components/Header/header.scss index 755efde66..2817543e8 100644 --- a/src/components/Header/header.scss +++ b/src/components/Header/header.scss @@ -2,7 +2,7 @@ @import 'src/styles/base/color'; @import 'src/styles/base/z-index'; -.header { +header { display: flex; align-items: center; flex-direction: column; -- GitLab