Skip to content

Commit 07cb663

Browse files
committed
fix: split-panel.test.tsx
1 parent bc89b6a commit 07cb663

File tree

1 file changed

+54
-24
lines changed

1 file changed

+54
-24
lines changed

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

Lines changed: 54 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0
33
import React, { useState } from 'react';
4-
import { screen } from '@testing-library/react';
4+
import { screen, waitFor } from '@testing-library/react';
55

66
import AppLayout from '../../../lib/components/app-layout';
77
import { AppLayoutProps } from '../../../lib/components/app-layout/interfaces';
@@ -55,7 +55,7 @@ afterEach(() => {
5555
});
5656

5757
describeEachAppLayout({ sizes: ['desktop'] }, ({ theme }) => {
58-
test('should render split panel in bottom position', () => {
58+
test('should render split panel in bottom position', async () => {
5959
const { wrapper } = renderComponent(
6060
<AppLayout
6161
splitPanel={defaultSplitPanel}
@@ -65,10 +65,13 @@ describeEachAppLayout({ sizes: ['desktop'] }, ({ theme }) => {
6565
onSplitPanelPreferencesChange={noop}
6666
/>
6767
);
68-
expect(wrapper.findSplitPanel()!.findOpenPanelBottom()).not.toBeNull();
68+
69+
await waitFor(() => {
70+
expect(wrapper.findSplitPanel()!.findOpenPanelBottom()).not.toBeNull();
71+
});
6972
});
7073

71-
test('should render split panel in side position', () => {
74+
test('should render split panel in side position', async () => {
7275
isMocked = true;
7376
const { wrapper } = renderComponent(
7477
<AppLayout
@@ -79,20 +82,27 @@ describeEachAppLayout({ sizes: ['desktop'] }, ({ theme }) => {
7982
onSplitPanelPreferencesChange={noop}
8083
/>
8184
);
82-
expect(wrapper.findSplitPanel()!.findOpenPanelSide()).not.toBeNull();
85+
86+
await waitFor(() => {
87+
expect(wrapper.findSplitPanel()!.findOpenPanelSide()).not.toBeNull();
88+
});
8389
isMocked = false;
8490
});
8591

8692
describe.each(['bottom', 'side'] as const)('%s position', position => {
87-
test('split panel can open and close', () => {
93+
test('split panel can open and close', async () => {
8894
const { wrapper } = renderComponent(
8995
<AppLayout
9096
splitPanel={defaultSplitPanel}
9197
splitPanelPreferences={{ position }}
9298
onSplitPanelPreferencesChange={noop}
9399
/>
94100
);
95-
expect(wrapper.findSplitPanelOpenButton()).not.toBeNull();
101+
102+
await waitFor(() => {
103+
expect(wrapper.findSplitPanelOpenButton()).not.toBeNull();
104+
});
105+
96106
wrapper.findSplitPanelOpenButton()!.click();
97107
if (theme === 'classic' || (theme === 'refresh' && position === 'bottom')) {
98108
expect(wrapper.findSplitPanelOpenButton()).toBeNull();
@@ -103,27 +113,34 @@ describeEachAppLayout({ sizes: ['desktop'] }, ({ theme }) => {
103113
expect(wrapper.findSplitPanelOpenButton()).not.toBeNull();
104114
});
105115

106-
test('Moves focus to slider when opened', () => {
116+
test('Moves focus to slider when opened', async () => {
107117
const { wrapper } = renderComponent(
108118
<AppLayout
109119
splitPanel={defaultSplitPanel}
110120
splitPanelPreferences={{ position }}
111121
onSplitPanelPreferencesChange={noop}
112122
/>
113123
);
114-
wrapper.findSplitPanelOpenButton()!.click();
124+
125+
await waitFor(() => {
126+
wrapper.findSplitPanelOpenButton()!.click();
127+
});
128+
115129
expect(wrapper.findSplitPanel()!.findSlider()!.getElement()).toHaveFocus();
116130
});
117131

118-
test('Moves focus to open button when closed', () => {
132+
test('Moves focus to open button when closed', async () => {
119133
const { wrapper } = renderComponent(
120134
<AppLayout
121135
splitPanel={defaultSplitPanel}
122136
splitPanelPreferences={{ position }}
123137
onSplitPanelPreferencesChange={noop}
124138
/>
125139
);
126-
wrapper.findSplitPanelOpenButton()!.click();
140+
141+
await waitFor(() => {
142+
wrapper.findSplitPanelOpenButton()!.click();
143+
});
127144
wrapper.findSplitPanel()!.findCloseButton()!.click();
128145
const button =
129146
position === 'side'
@@ -132,7 +149,7 @@ describeEachAppLayout({ sizes: ['desktop'] }, ({ theme }) => {
132149
expect(button!.getElement()).toHaveFocus();
133150
});
134151

135-
test(`Moves focus to the slider when focusSplitPanel() is called`, () => {
152+
test(`Moves focus to the slider when focusSplitPanel() is called`, async () => {
136153
const ref: React.MutableRefObject<AppLayoutProps.Ref | null> = React.createRef();
137154
const { wrapper } = renderComponent(
138155
<AppLayout
@@ -143,8 +160,11 @@ describeEachAppLayout({ sizes: ['desktop'] }, ({ theme }) => {
143160
onSplitPanelPreferencesChange={noop}
144161
/>
145162
);
146-
ref.current!.focusSplitPanel();
147-
expect(wrapper.findSplitPanel()!.findSlider()!.getElement()).toHaveFocus();
163+
164+
await waitFor(() => {
165+
ref.current!.focusSplitPanel();
166+
expect(wrapper.findSplitPanel()!.findSlider()!.getElement()).toHaveFocus();
167+
});
148168
});
149169

150170
test(`Does nothing when focusSplitPanel() is called but split panel is closed`, () => {
@@ -163,14 +183,16 @@ describeEachAppLayout({ sizes: ['desktop'] }, ({ theme }) => {
163183
});
164184
});
165185

166-
test('should not render split panel when it is not defined', () => {
186+
test('should not render split panel when it is not defined', async () => {
167187
const { wrapper, rerender } = renderComponent(<AppLayout splitPanel={defaultSplitPanel} />);
168-
expect(wrapper.findSplitPanel()).toBeTruthy();
188+
await waitFor(() => {
189+
expect(wrapper.findSplitPanel()).toBeTruthy();
190+
});
169191
rerender(<AppLayout />);
170192
expect(wrapper.findSplitPanel()).toBeFalsy();
171193
});
172194

173-
test('should fire split panel toggle event', () => {
195+
test('should fire split panel toggle event', async () => {
174196
const onSplitPanelToggle = jest.fn();
175197
const { wrapper } = renderComponent(
176198
<AppLayout
@@ -180,14 +202,16 @@ describeEachAppLayout({ sizes: ['desktop'] }, ({ theme }) => {
180202
onSplitPanelPreferencesChange={noop}
181203
/>
182204
);
183-
wrapper.findSplitPanel()!.findOpenButton()!.click();
205+
await waitFor(() => {
206+
wrapper.findSplitPanel()!.findOpenButton()!.click();
207+
});
184208
expect(onSplitPanelToggle).toHaveBeenCalledWith({ open: true });
185209
onSplitPanelToggle.mockClear();
186210
wrapper.findSplitPanel()!.findCloseButton()!.click();
187211
expect(onSplitPanelToggle).toHaveBeenCalledWith({ open: false });
188212
});
189213

190-
test('should change split panel position in uncontrolled mode', () => {
214+
test('should change split panel position in uncontrolled mode', async () => {
191215
const onPreferencesChange = jest.fn();
192216
const { wrapper } = renderComponent(
193217
<AppLayout
@@ -197,7 +221,9 @@ describeEachAppLayout({ sizes: ['desktop'] }, ({ theme }) => {
197221
onSplitPanelPreferencesChange={event => onPreferencesChange(event.detail)}
198222
/>
199223
);
200-
expect(wrapper.findSplitPanel()!.findOpenPanelBottom()).not.toBeNull();
224+
await waitFor(() => {
225+
expect(wrapper.findSplitPanel()!.findOpenPanelBottom()).not.toBeNull();
226+
});
201227
wrapper.findSplitPanel()!.findPreferencesButton()!.click();
202228
expect(screen.getByRole('radio', { name: 'Bottom' })).toBeChecked();
203229
expect(screen.getByRole('radio', { name: 'Side' })).toBeEnabled();
@@ -207,7 +233,7 @@ describeEachAppLayout({ sizes: ['desktop'] }, ({ theme }) => {
207233
expect(onPreferencesChange).toHaveBeenCalledWith({ position: 'side' });
208234
});
209235

210-
test('should fire split panel resize event', () => {
236+
test('should fire split panel resize event', async () => {
211237
const onSplitPanelResize = jest.fn();
212238
const { wrapper } = renderComponent(
213239
<AppLayout
@@ -217,11 +243,13 @@ describeEachAppLayout({ sizes: ['desktop'] }, ({ theme }) => {
217243
onSplitPanelResize={event => onSplitPanelResize(event.detail)}
218244
/>
219245
);
220-
wrapper.findSplitPanel()!.findSlider()!.keydown(KeyCode.pageUp);
246+
await waitFor(() => {
247+
wrapper.findSplitPanel()!.findSlider()!.keydown(KeyCode.pageUp);
248+
});
221249
expect(onSplitPanelResize).toHaveBeenCalled();
222250
});
223251

224-
test('should dynamically show and hide split panel based on "splitPanel" prop', () => {
252+
test('should dynamically show and hide split panel based on "splitPanel" prop', async () => {
225253
const CustomAppLayout = () => {
226254
const [splitPanelEnabled, setSplitPanelEnabled] = useState(true);
227255
return (
@@ -237,7 +265,9 @@ describeEachAppLayout({ sizes: ['desktop'] }, ({ theme }) => {
237265
};
238266
const { wrapper } = renderComponent(<CustomAppLayout />);
239267

240-
expect(wrapper.findSplitPanelOpenButton()!.getElement()).toBeInTheDocument();
268+
await waitFor(() => {
269+
expect(wrapper.findSplitPanelOpenButton()!.getElement()).toBeInTheDocument();
270+
});
241271

242272
wrapper.find('[data-testid="toggle-split-panel"]')!.click();
243273

0 commit comments

Comments
 (0)