Skip to content

Commit 947c252

Browse files
committed
chore(wrapPageElement): improve wrap page element testing
1 parent 8ba5896 commit 947c252

File tree

2 files changed

+57
-41
lines changed

2 files changed

+57
-41
lines changed

src/wrapPageElement.test.tsx

Lines changed: 45 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,36 @@ import { wrapPageElement } from './wrapPageElement';
55
describe('wrapPageElement', () => {
66
afterEach(cleanup);
77

8+
const options: PluginOptions = {
9+
defaultLocale: `en-US`,
10+
siteUrl: 'https://example.com',
11+
locales: [
12+
{
13+
locale: `en-US`,
14+
prefix: `en`,
15+
slugs: {},
16+
messages: {},
17+
},
18+
{
19+
locale: `de-CH`,
20+
prefix: `de`,
21+
slugs: {
22+
'/imprint': '/impressum',
23+
},
24+
messages: {},
25+
},
26+
{
27+
locale: `fr-FR`,
28+
prefix: `fr`,
29+
slugs: {
30+
'/imprint': '/imprimer',
31+
},
32+
messages: {},
33+
},
34+
],
35+
plugins: [],
36+
};
37+
838
it('setup the providers of this plugin', async () => {
939
const element = <div>Child</div>;
1040
const props: any = {
@@ -18,37 +48,23 @@ describe('wrapPageElement', () => {
1848
pathname: '/de/impressum',
1949
},
2050
};
21-
const options: PluginOptions = {
22-
defaultLocale: `en-US`,
23-
siteUrl: 'https://example.com',
24-
locales: [
25-
{
26-
locale: `en-US`,
27-
prefix: `en`,
28-
slugs: {},
29-
messages: {},
30-
},
31-
{
32-
locale: `de-CH`,
33-
prefix: `de`,
34-
slugs: {
35-
'/imprint': '/impressum',
36-
},
37-
messages: {},
38-
},
39-
{
40-
locale: `fr-FR`,
41-
prefix: `fr`,
42-
slugs: {
43-
'/imprint': '/imprimer',
44-
},
45-
messages: {},
46-
},
47-
],
48-
plugins: [],
49-
};
51+
5052
const component = render(<div>{wrapPageElement({ element, props }, options)}</div>);
53+
expect(component.queryAllByText(/Child/)).toBeTruthy();
54+
});
5155

56+
it('setup the providers of this plugin without translations', async () => {
57+
const element = <div>Child</div>;
58+
const props: any = {
59+
pageContext: {
60+
translations: undefined,
61+
},
62+
location: {
63+
pathname: '/de/impressum',
64+
},
65+
};
66+
67+
const component = render(<div>{wrapPageElement({ element, props }, options)}</div>);
5268
expect(component.queryAllByText(/Child/)).toBeTruthy();
5369
});
5470
});

src/wrapPageElement.tsx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
import { PluginOptions, WrapPageElementNodeArgs } from 'gatsby';
22
import { IntlProvider } from 'react-intl';
3-
import { SitePageContext, Translation } from '../types';
3+
import { SitePageContext } from '../types';
44
import { I18nL10nContext } from './contexts/I18nL10nContext';
55

6-
export const wrapPageElement = ({ element, props }: WrapPageElementNodeArgs, options: PluginOptions) => {
7-
const pageContext = props.pageContext as SitePageContext;
8-
const translations = (props.pageContext.translations as Translation[]) || [];
9-
const locale = pageContext.locale ?? options.defaultLocale;
6+
export const wrapPageElement = (
7+
{ element, props }: WrapPageElementNodeArgs<Record<string, unknown>, SitePageContext>,
8+
options: PluginOptions,
9+
) => {
10+
const translations = props.pageContext.translations || [];
11+
const locale = props.pageContext.locale ?? options.defaultLocale;
1012
const currentLocale = options.locales.find((l) => l.locale === locale);
11-
const prefix = pageContext.prefix ?? currentLocale?.prefix;
13+
const prefix = props.pageContext.prefix ?? currentLocale?.prefix;
1214
const currentMessages = { ...currentLocale?.messages, ...currentLocale?.slugs };
1315

14-
if (currentMessages) {
15-
// Inject language names of all available languages into current messages
16-
options.locales.forEach((l) => {
17-
currentMessages[`languages.${l.locale}`] = l.messages.language;
18-
});
19-
}
16+
// Inject language names of all available languages into current messages
17+
options.locales.forEach((l) => {
18+
currentMessages[`languages.${l.locale}`] = l.messages.language;
19+
});
2020

2121
return (
2222
// eslint-disable-next-line react/jsx-no-constructed-context-values

0 commit comments

Comments
 (0)