Skip to content

Commit 4b48425

Browse files
committed
Fix tests/get 100% coverage
1 parent e6f390b commit 4b48425

File tree

4 files changed

+42
-8
lines changed

4 files changed

+42
-8
lines changed

test/helpers/future-memory-router.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import React from 'react';
2+
import {MemoryRouter} from 'react-router-dom';
3+
4+
// @ts-expect-error does not exist on
5+
const {routerFuture} = global;
6+
7+
export default function FutureMemoryRouter(props: Parameters<typeof MemoryRouter>[0]) {
8+
return <MemoryRouter {...props} future={routerFuture} />;
9+
}

test/src/layouts/landing/footer.test.tsx

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React from 'react';
22
import userEvent from '@testing-library/user-event';
33
import {render, screen, waitFor} from '@testing-library/preact';
44
import {describe, it} from '@jest/globals';
5-
import { MemoryRouter } from 'react-router-dom';
5+
import MR from '~/../../test/helpers/future-memory-router';
66
import { useContactDialog } from '~/layouts/landing/footer/flex';
77

88
const user = userEvent.setup({advanceTimers: jest.advanceTimersByTime});
@@ -31,9 +31,9 @@ describe('flex landing footer', () => {
3131
];
3232

3333
render(
34-
<MemoryRouter initialEntries={['']}>
34+
<MR initialEntries={['']}>
3535
<ShowContactDialog contactFormParams={contactFormParams} />
36-
</MemoryRouter>
36+
</MR>
3737
);
3838
expect(getIframe()).toBeNull();
3939
await user.click(await screen.findByText('Contact Us'));
@@ -48,5 +48,17 @@ describe('flex landing footer', () => {
4848
window.postMessage('CONTACT_FORM_SUBMITTED', '*');
4949
await waitFor(() => expect(getIframe()).toBeNull());
5050
});
51+
it('handles undefined contactFormParams', async () => {
52+
const getIframe = () => document.querySelector('iframe');
53+
54+
render(
55+
<MR initialEntries={['']}>
56+
<ShowContactDialog />
57+
</MR>
58+
);
59+
expect(getIframe()).toBeNull();
60+
await user.click(await screen.findByText('Contact Us'));
61+
expect(getIframe()?.src.endsWith('embedded/contact')).toBe(true);
62+
});
5163
});
5264
});

test/src/pages/details/book-details-context.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React from 'react';
22
import LoaderPage from '~/components/jsx-helpers/loader-page';
33
import ShellContextProvider from '../../../helpers/shell-context';
44
import {DetailsContextProvider, ContextValues} from '~/pages/details/context';
5-
import {MemoryRouter} from 'react-router-dom';
5+
import MR from '~/../../test/helpers/future-memory-router';
66

77
// Tamp down meaningless errors
88
jest.mock('~/models/rex-release', () => jest.fn().mockReturnValue(Promise.resolve({
@@ -30,8 +30,8 @@ export default function BookDetailsLoader({slug, children}: React.PropsWithChild
3030
const absoluteSlug = `/${slug}`;
3131

3232
return (
33-
<MemoryRouter initialEntries={[absoluteSlug]}>
33+
<MR initialEntries={[absoluteSlug]}>
3434
<LoaderPage slug={slug} Child={BookDetailsWithContext} doDocumentSetup props={{children}} />
35-
</MemoryRouter>
35+
</MR>
3636
);
3737
}

test/src/pages/details/get-this-title/get-this-title.test.tsx

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,13 @@ describe('get-this-title', () => {
7575
it('opens give dialog for Webview', async () => {
7676
render(<GTTinContext />);
7777
const wvLink = await screen.findByText('View online');
78-
7978
const closeRecommendedCallout = screen.getByRole('button', {
8079
name: 'close-popup'
8180
});
8281

8382
await user.click(closeRecommendedCallout);
84-
8583
await user.click(wvLink);
84+
8685
expect(screen.getAllByRole('dialog')).toHaveLength(2);
8786
const trackingLink = await screen.findByRole('link', {
8887
name: 'Go to your book'
@@ -98,6 +97,20 @@ describe('get-this-title', () => {
9897
expect(mockTrackLink).toHaveBeenCalled();
9998
mockTrackLink.mockReset();
10099
});
100+
it('renders pluralized expander', async () => {
101+
const extraLinksModel = {
102+
...baseModel,
103+
assignableLink: 'the-assignable-version',
104+
bookshareLink: 'the-bookshare-version'
105+
};
106+
107+
render(<GTTinContext model={extraLinksModel} />);
108+
const expander = await screen.findByText('+ 2 more options...');
109+
110+
await user.click(expander);
111+
screen.getByRole('link', {name: 'Bookshare'});
112+
screen.getByRole('link', {name: 'Download for Kindle'});
113+
});
101114
it('opens give dialog for PDF', async () => {
102115
render(<GTTinContext />);
103116
const pdfLink = await screen.findByText('Download a PDF');

0 commit comments

Comments
 (0)