From d6a654afe713a1ebc7b3c9ccf19b9605c253d9eb Mon Sep 17 00:00:00 2001 From: Caleb Cox Date: Fri, 30 Aug 2024 15:01:51 -0500 Subject: [PATCH] Add finish page tests --- pages/setup/finish.page.test.tsx | 114 +++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 pages/setup/finish.page.test.tsx diff --git a/pages/setup/finish.page.test.tsx b/pages/setup/finish.page.test.tsx new file mode 100644 index 000000000..43dd45777 --- /dev/null +++ b/pages/setup/finish.page.test.tsx @@ -0,0 +1,114 @@ +import { GetServerSidePropsContext } from 'next'; +import { ApolloClient, NormalizedCacheObject } from '@apollo/client'; +import { render, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import TestRouter from '__tests__/util/TestRouter'; +import { GqlMockedProvider } from '__tests__/util/graphqlMocking'; +import makeSsrClient from 'src/lib/apollo/ssrClient'; +import AccountPage, { getServerSideProps } from './finish.page'; + +jest.mock('src/lib/apollo/ssrClient'); + +const push = jest.fn(); +const router = { + push, +}; + +const context = {} as unknown as GetServerSidePropsContext; + +const mutationSpy = jest.fn(); + +const TestComponent: React.FC = () => ( + + + + + +); + +describe('Finish account page', () => { + it('immediately sets setup position to finish', async () => { + render(); + + await waitFor(() => + expect(mutationSpy).toHaveGraphqlOperation('UpdateSetupPosition', { + setupPosition: 'finish', + }), + ); + }); + + it('yes button redirects to tools', async () => { + const { getByRole } = render(); + + userEvent.click(getByRole('button', { name: /Yes/ })); + + await waitFor(() => + expect(mutationSpy).toHaveGraphqlOperation('UpdateSetupPosition', { + setupPosition: '', + }), + ); + expect(push).toHaveBeenCalledWith( + '/accountLists/account-list-1/tools?setup=1', + ); + }); + + it('no button redirects to the dashboard', async () => { + const { getByRole } = render(); + + userEvent.click(getByRole('button', { name: /Nope/ })); + + await waitFor(() => + expect(mutationSpy).toHaveGraphqlOperation('UpdateSetupPosition', { + setupPosition: '', + }), + ); + expect(push).toHaveBeenCalledWith('/accountLists/account-list-1'); + }); +}); + +describe('getServerSideProps', () => { + const query = jest.fn(); + const mutate = jest.fn(); + + beforeEach(() => { + (makeSsrClient as jest.MockedFn).mockReturnValue({ + query, + mutate, + } as unknown as ApolloClient); + }); + + it('redirects to the default account page if no default account is set', async () => { + query.mockResolvedValue({ + data: { + user: { + id: 'user-1', + defaultAccountList: null, + }, + }, + }); + + await expect(getServerSideProps(context)).resolves.toEqual({ + redirect: { + destination: '/setup/account', + permanent: false, + }, + }); + }); + + it('retrieves the default account list id', async () => { + query.mockResolvedValue({ + data: { + user: { + id: 'user-1', + defaultAccountList: 'account-list-1', + }, + }, + }); + + await expect(getServerSideProps(context)).resolves.toMatchObject({ + props: { + defaultAccountListId: 'account-list-1', + }, + }); + }); +});