import { FIRST_ARRAY_ELEMENT } from '@/constants/common'; import { reactionsFixture } from '@/models/fixtures/reactionFixture'; import { openReactionDrawerById, openSearchDrawerWithSelectedTab, openSubmapsDrawer, } from '@/redux/drawer/drawer.slice'; import { getReactionsByIds } from '@/redux/reactions/reactions.thunks'; import { StoreType } from '@/redux/store'; import { InitialStoreState, getReduxWrapperWithStore, } from '@/utils/testing/getReduxWrapperWithStore'; import { act, fireEvent, render, screen, waitFor } from '@testing-library/react'; import type {} from 'redux-thunk/extend-redux'; import { Drawer } from './Drawer.component'; const renderComponent = (initialStore?: InitialStoreState): { store: StoreType } => { const { Wrapper, store } = getReduxWrapperWithStore(initialStore); return ( render( <Wrapper> <Drawer /> </Wrapper>, ), { store, } ); }; describe('Drawer - component', () => { it('should render Drawer', () => { renderComponent(); expect(screen.getByRole('drawer')).toBeInTheDocument(); }); it('should not display drawer when its not open', () => { renderComponent(); expect(screen.getByRole('drawer')).not.toHaveClass('translate-x-0'); }); describe('search drawer ', () => { it('should open drawer and display search drawer content', async () => { const { store } = renderComponent(); expect(screen.queryByTestId('search-drawer-content')).not.toBeInTheDocument(); await act(() => { store.dispatch(openSearchDrawerWithSelectedTab('')); }); expect(screen.getByTestId('search-drawer-content')).toBeInTheDocument(); }); it('should close drawer after pressing close button', async () => { const { store } = renderComponent(); await act(() => { store.dispatch(openSearchDrawerWithSelectedTab('')); }); expect(screen.getByTestId('search-drawer-content')).toBeInTheDocument(); const button = screen.getByRole('close-drawer-button'); await act(() => { fireEvent.click(button); }); expect(screen.getByRole('drawer')).not.toHaveClass('translate-x-0'); expect(screen.queryByTestId('search-drawer-content')).not.toBeInTheDocument(); }); }); describe('submap drawer', () => { it('should open drawer and display submaps', async () => { const { store } = renderComponent(); expect(screen.queryByTestId('submap-drawer')).not.toBeInTheDocument(); await act(() => { store.dispatch(openSubmapsDrawer()); }); expect(screen.getByTestId('submap-drawer')).toBeInTheDocument(); }); }); describe('reaction drawer', () => { it('should open drawer and display reaction', async () => { const { id } = reactionsFixture[FIRST_ARRAY_ELEMENT]; const { store } = renderComponent({ reactions: { data: reactionsFixture, loading: 'succeeded', error: { message: '', name: '' }, }, }); expect(screen.queryByTestId('reaction-drawer')).not.toBeInTheDocument(); store.dispatch(getReactionsByIds([id])); store.dispatch(openReactionDrawerById(id)); await waitFor(() => expect(screen.getByTestId('reaction-drawer')).toBeInTheDocument()); }); }); });