Skip to content

Commit d5170d0

Browse files
committed
Add unit test coverage
1 parent 380e607 commit d5170d0

File tree

3 files changed

+107
-48
lines changed

3 files changed

+107
-48
lines changed

src/split-panel/__tests__/common.tsx

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
import React from 'react';
4+
import { render } from '@testing-library/react';
5+
6+
import TestI18nProvider from '../../../lib/components/i18n/testing';
7+
import {
8+
SplitPanelContextProps,
9+
SplitPanelContextProvider,
10+
} from '../../../lib/components/internal/context/split-panel-context';
11+
import SplitPanel, { SplitPanelProps } from '../../../lib/components/split-panel';
12+
import createWrapper from '../../../lib/components/test-utils/dom';
13+
import { defaultSplitPanelContextProps } from './helpers';
14+
15+
const i18nStrings = {
16+
closeButtonAriaLabel: 'closeButtonAriaLabel',
17+
openButtonAriaLabel: 'openButtonAriaLabel',
18+
preferencesTitle: 'preferencesTitle',
19+
preferencesPositionLabel: 'preferencesPositionLabel',
20+
preferencesPositionDescription: 'preferencesPositionDescription',
21+
preferencesPositionSide: 'preferencesPositionSide',
22+
preferencesPositionBottom: 'preferencesPositionBottom',
23+
preferencesConfirm: 'preferencesConfirm',
24+
preferencesCancel: 'preferencesCancel',
25+
resizeHandleAriaLabel: 'resizeHandleAriaLabel',
26+
};
27+
28+
export const defaultProps: SplitPanelProps = {
29+
header: 'Split panel header',
30+
children: <p>Split panel content</p>,
31+
hidePreferencesButton: undefined,
32+
i18nStrings,
33+
};
34+
35+
export function renderSplitPanel({
36+
props,
37+
contextProps,
38+
messages = {},
39+
modalMessages = {},
40+
}: {
41+
props?: Partial<SplitPanelProps>;
42+
contextProps?: Partial<SplitPanelContextProps>;
43+
messages?: Record<string, string>;
44+
modalMessages?: Record<string, string>;
45+
} = {}) {
46+
const { container } = render(
47+
<TestI18nProvider messages={{ 'split-panel': messages, modal: modalMessages }}>
48+
<SplitPanelContextProvider value={{ ...defaultSplitPanelContextProps, ...contextProps }}>
49+
<SplitPanel {...defaultProps} {...props} />
50+
</SplitPanelContextProvider>
51+
</TestI18nProvider>
52+
);
53+
const wrapper = createWrapper(container).findSplitPanel();
54+
return { wrapper };
55+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
import React from 'react';
4+
5+
import { describeEachAppLayout } from '../../app-layout/__tests__/utils';
6+
import { renderSplitPanel } from './common';
7+
8+
describe('Split panel: Header slots', () => {
9+
describeEachAppLayout({ sizes: ['desktop', 'mobile'] }, () => {
10+
test('renders headerActions', () => {
11+
const { wrapper } = renderSplitPanel({
12+
props: { headerActions: <button>Action</button> },
13+
});
14+
expect(wrapper!.findHeaderActions()).not.toBeNull();
15+
expect(wrapper!.findHeaderActions()!.getElement()).toHaveTextContent('Action');
16+
});
17+
18+
test('renders headerBefore', () => {
19+
const { wrapper } = renderSplitPanel({
20+
props: { headerBefore: <span>Before</span> },
21+
});
22+
expect(wrapper!.findHeaderBefore()).not.toBeNull();
23+
expect(wrapper!.findHeaderBefore()!.getElement()).toHaveTextContent('Before');
24+
});
25+
26+
test('renders headerDescription', () => {
27+
const { wrapper } = renderSplitPanel({
28+
props: { headerDescription: 'Header description' },
29+
});
30+
expect(wrapper!.findHeaderDescription()).not.toBeNull();
31+
expect(wrapper!.findHeaderDescription()!.getElement()).toHaveTextContent('Header description');
32+
});
33+
34+
test('renders headerInfo', () => {
35+
const { wrapper } = renderSplitPanel({
36+
props: { headerInfo: <span>Info</span> },
37+
});
38+
expect(wrapper!.findHeaderInfo()).not.toBeNull();
39+
expect(wrapper!.findHeaderInfo()!.getElement()).toHaveTextContent('Info');
40+
});
41+
42+
test('does not render header properties when not provided', () => {
43+
const { wrapper } = renderSplitPanel();
44+
expect(wrapper!.findHeaderActions()).toBeNull();
45+
expect(wrapper!.findHeaderBefore()).toBeNull();
46+
expect(wrapper!.findHeaderDescription()).toBeNull();
47+
expect(wrapper!.findHeaderInfo()).toBeNull();
48+
});
49+
});
50+
});

src/split-panel/__tests__/split-panel.test.tsx

Lines changed: 2 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,11 @@ import { fireEvent, render } from '@testing-library/react';
55

66
import { KeyCode } from '@cloudscape-design/test-utils-core/utils';
77

8-
import TestI18nProvider from '../../../lib/components/i18n/testing';
9-
import {
10-
SplitPanelContextProps,
11-
SplitPanelContextProvider,
12-
} from '../../../lib/components/internal/context/split-panel-context';
13-
import SplitPanel, { SplitPanelProps } from '../../../lib/components/split-panel';
8+
import SplitPanel from '../../../lib/components/split-panel';
149
import createWrapper from '../../../lib/components/test-utils/dom';
1510
import { testIf } from '../../__tests__/utils';
1611
import { describeEachAppLayout } from '../../app-layout/__tests__/utils';
12+
import { defaultProps, renderSplitPanel } from './common';
1713
import { defaultSplitPanelContextProps } from './helpers';
1814

1915
import styles from '../../../lib/components/split-panel/styles.css.js';
@@ -29,48 +25,6 @@ jest.mock('../../../lib/components/app-layout/utils/use-pointer-events', () => (
2925
usePointerEvents: () => onSliderPointerDown,
3026
}));
3127

32-
const i18nStrings = {
33-
closeButtonAriaLabel: 'closeButtonAriaLabel',
34-
openButtonAriaLabel: 'openButtonAriaLabel',
35-
preferencesTitle: 'preferencesTitle',
36-
preferencesPositionLabel: 'preferencesPositionLabel',
37-
preferencesPositionDescription: 'preferencesPositionDescription',
38-
preferencesPositionSide: 'preferencesPositionSide',
39-
preferencesPositionBottom: 'preferencesPositionBottom',
40-
preferencesConfirm: 'preferencesConfirm',
41-
preferencesCancel: 'preferencesCancel',
42-
resizeHandleAriaLabel: 'resizeHandleAriaLabel',
43-
};
44-
45-
const defaultProps: SplitPanelProps = {
46-
header: 'Split panel header',
47-
children: <p>Split panel content</p>,
48-
hidePreferencesButton: undefined,
49-
i18nStrings,
50-
};
51-
52-
function renderSplitPanel({
53-
props,
54-
contextProps,
55-
messages = {},
56-
modalMessages = {},
57-
}: {
58-
props?: Partial<SplitPanelProps>;
59-
contextProps?: Partial<SplitPanelContextProps>;
60-
messages?: Record<string, string>;
61-
modalMessages?: Record<string, string>;
62-
} = {}) {
63-
const { container } = render(
64-
<TestI18nProvider messages={{ 'split-panel': messages, modal: modalMessages }}>
65-
<SplitPanelContextProvider value={{ ...defaultSplitPanelContextProps, ...contextProps }}>
66-
<SplitPanel {...defaultProps} {...props} />
67-
</SplitPanelContextProvider>
68-
</TestI18nProvider>
69-
);
70-
const wrapper = createWrapper(container).findSplitPanel();
71-
return { wrapper };
72-
}
73-
7428
afterEach(() => {
7529
jest.clearAllMocks();
7630
});

0 commit comments

Comments
 (0)