Skip to content

Commit adda3e5

Browse files
committed
Fix widget unit tests
1 parent 3b63c35 commit adda3e5

8 files changed

Lines changed: 160 additions & 80 deletions

web/tests/unit/components/widgets/DocumentWidget.test.tsx

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,18 @@ const documentWidget: Widget = {
7070
location: WidgetLocation.Summary,
7171
};
7272

73+
function fulfilledPromise<T>(value: T): Promise<T> {
74+
const p = Promise.resolve(value);
75+
Object.assign(p, { status: 'fulfilled', value });
76+
return p;
77+
}
78+
79+
const mockEngagementLoaderPromise = fulfilledPromise({ ...engagement });
80+
const mockWidgetsLoaderPromise = fulfilledPromise([documentWidget]);
81+
const mockMetadataLoaderPromise = fulfilledPromise<never[]>([]);
82+
const mockContentLoaderPromise = fulfilledPromise<never[]>([]);
83+
const mockTaxaLoaderPromise = fulfilledPromise<never[]>([]);
84+
7385
jest.mock('axios');
7486

7587
jest.mock('react-router', () => ({
@@ -82,13 +94,11 @@ jest.mock('react-router', () => ({
8294
useRouteLoaderData: (routeId: string) => {
8395
if (routeId === 'single-engagement') {
8496
return {
85-
engagement: Promise.resolve({
86-
...engagement,
87-
}),
88-
widgets: Promise.resolve([documentWidget]),
89-
metadata: Promise.resolve([]),
90-
content: Promise.resolve([]),
91-
taxa: Promise.resolve([]),
97+
engagement: mockEngagementLoaderPromise,
98+
widgets: mockWidgetsLoaderPromise,
99+
metadata: mockMetadataLoaderPromise,
100+
content: mockContentLoaderPromise,
101+
taxa: mockTaxaLoaderPromise,
92102
};
93103
}
94104
},

web/tests/unit/components/widgets/EventsWidget.test.tsx

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,18 @@ import { USER_ROLES } from 'services/userService/constants';
1616
import { EngagementSettings, createDefaultEngagementSettings } from 'models/engagement';
1717
import { createMemoryRouter, RouterProvider } from 'react-router';
1818

19+
function fulfilledPromise<T>(value: T): Promise<T> {
20+
const p = Promise.resolve(value);
21+
Object.assign(p, { status: 'fulfilled', value });
22+
return p;
23+
}
24+
25+
const mockEngagementLoaderPromise = fulfilledPromise({ ...draftEngagement });
26+
const mockWidgetsLoaderPromise = fulfilledPromise<never[]>([]);
27+
const mockMetadataLoaderPromise = fulfilledPromise<never[]>([]);
28+
const mockContentLoaderPromise = fulfilledPromise<never[]>([]);
29+
const mockTaxaLoaderPromise = fulfilledPromise<never[]>([]);
30+
1931
jest.mock('components/map', () => () => {
2032
return <div></div>;
2133
});
@@ -93,13 +105,11 @@ jest.mock('react-router', () => ({
93105
useRouteLoaderData: (routeId: string) => {
94106
if (routeId === 'single-engagement') {
95107
return {
96-
engagement: Promise.resolve({
97-
...draftEngagement,
98-
}),
99-
widgets: Promise.resolve([]),
100-
metadata: Promise.resolve([]),
101-
content: Promise.resolve([]),
102-
taxa: Promise.resolve([]),
108+
engagement: mockEngagementLoaderPromise,
109+
widgets: mockWidgetsLoaderPromise,
110+
metadata: mockMetadataLoaderPromise,
111+
content: mockContentLoaderPromise,
112+
taxa: mockTaxaLoaderPromise,
103113
};
104114
}
105115
},

web/tests/unit/components/widgets/MapWidget.test.tsx

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,18 @@ import { USER_ROLES } from 'services/userService/constants';
1616
import { EngagementSettings, createDefaultEngagementSettings } from 'models/engagement';
1717
import { RouterProvider, createMemoryRouter } from 'react-router';
1818

19+
function fulfilledPromise<T>(value: T): Promise<T> {
20+
const p = Promise.resolve(value);
21+
Object.assign(p, { status: 'fulfilled', value });
22+
return p;
23+
}
24+
25+
const mockEngagementLoaderPromise = fulfilledPromise({ ...draftEngagement });
26+
const mockWidgetsLoaderPromise = fulfilledPromise<never[]>([]);
27+
const mockMetadataLoaderPromise = fulfilledPromise<never[]>([]);
28+
const mockContentLoaderPromise = fulfilledPromise<never[]>([]);
29+
const mockTaxaLoaderPromise = fulfilledPromise<never[]>([]);
30+
1931
const mockEngagementSettings: EngagementSettings = {
2032
...createDefaultEngagementSettings(),
2133
};
@@ -95,13 +107,11 @@ jest.mock('react-router', () => ({
95107
useRouteLoaderData: (routeId: string) => {
96108
if (routeId === 'single-engagement') {
97109
return {
98-
engagement: Promise.resolve({
99-
...draftEngagement,
100-
}),
101-
widgets: Promise.resolve([]),
102-
metadata: Promise.resolve([]),
103-
content: Promise.resolve([]),
104-
taxa: Promise.resolve([]),
110+
engagement: mockEngagementLoaderPromise,
111+
widgets: mockWidgetsLoaderPromise,
112+
metadata: mockMetadataLoaderPromise,
113+
content: mockContentLoaderPromise,
114+
taxa: mockTaxaLoaderPromise,
105115
};
106116
}
107117
},

web/tests/unit/components/widgets/PollWidget.test.tsx

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,18 @@ import { USER_ROLES } from 'services/userService/constants';
1010
import { setupWidgetTestEnvMock, setupWidgetTestEnvSpy } from './setupWidgetTestEnv';
1111
import { createMemoryRouter, RouterProvider } from 'react-router';
1212

13+
function fulfilledPromise<T>(value: T): Promise<T> {
14+
const p = Promise.resolve(value);
15+
Object.assign(p, { status: 'fulfilled', value });
16+
return p;
17+
}
18+
19+
const mockEngagementLoaderPromise = fulfilledPromise({ ...draftEngagement });
20+
const mockWidgetsLoaderPromise = fulfilledPromise<never[]>([]);
21+
const mockMetadataLoaderPromise = fulfilledPromise<never[]>([]);
22+
const mockContentLoaderPromise = fulfilledPromise<never[]>([]);
23+
const mockTaxaLoaderPromise = fulfilledPromise<never[]>([]);
24+
1325
jest.mock('components/map', () => () => <div></div>);
1426
jest.mock('axios');
1527
jest.mock('react-redux', () => ({
@@ -57,13 +69,11 @@ jest.mock('react-router', () => ({
5769
useRouteLoaderData: (routeId: string) => {
5870
if (routeId === 'single-engagement') {
5971
return {
60-
engagement: Promise.resolve({
61-
...draftEngagement,
62-
}),
63-
widgets: Promise.resolve([]),
64-
metadata: Promise.resolve([]),
65-
content: Promise.resolve([]),
66-
taxa: Promise.resolve([]),
72+
engagement: mockEngagementLoaderPromise,
73+
widgets: mockWidgetsLoaderPromise,
74+
metadata: mockMetadataLoaderPromise,
75+
content: mockContentLoaderPromise,
76+
taxa: mockTaxaLoaderPromise,
6777
};
6878
}
6979
},

web/tests/unit/components/widgets/PollWidgetResultsView.test.tsx

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,18 @@ import { USER_ROLES } from 'services/userService/constants';
99
import { setupWidgetTestEnvMock, setupWidgetTestEnvSpy } from './setupWidgetTestEnv';
1010
import { createMemoryRouter, RouterProvider } from 'react-router';
1111

12+
function fulfilledPromise<T>(value: T): Promise<T> {
13+
const p = Promise.resolve(value);
14+
Object.assign(p, { status: 'fulfilled', value });
15+
return p;
16+
}
17+
18+
const mockEngagementLoaderPromise = fulfilledPromise({ ...draftEngagement });
19+
const mockWidgetsLoaderPromise = fulfilledPromise([pollWidget]);
20+
const mockMetadataLoaderPromise = fulfilledPromise<never[]>([]);
21+
const mockContentLoaderPromise = fulfilledPromise<never[]>([]);
22+
const mockTaxaLoaderPromise = fulfilledPromise<never[]>([]);
23+
1224
jest.mock('components/map', () => () => <div></div>);
1325
jest.mock('axios');
1426
jest.mock('react-redux', () => ({
@@ -45,13 +57,11 @@ jest.mock('react-router', () => ({
4557
useRouteLoaderData: (routeId: string) => {
4658
if (routeId === 'single-engagement') {
4759
return {
48-
engagement: Promise.resolve({
49-
...draftEngagement,
50-
}),
51-
widgets: Promise.resolve([pollWidget]),
52-
metadata: Promise.resolve([]),
53-
content: Promise.resolve([]),
54-
taxa: Promise.resolve([]),
60+
engagement: mockEngagementLoaderPromise,
61+
widgets: mockWidgetsLoaderPromise,
62+
metadata: mockMetadataLoaderPromise,
63+
content: mockContentLoaderPromise,
64+
taxa: mockTaxaLoaderPromise,
5565
};
5666
}
5767
},

web/tests/unit/components/widgets/TimeLineWidget.test.tsx

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,18 @@ import { USER_ROLES } from 'services/userService/constants';
1111
import { setupWidgetTestEnvMock, setupWidgetTestEnvSpy } from './setupWidgetTestEnv';
1212
import { createMemoryRouter, RouterProvider } from 'react-router';
1313

14+
function fulfilledPromise<T>(value: T): Promise<T> {
15+
const p = Promise.resolve(value);
16+
Object.assign(p, { status: 'fulfilled', value });
17+
return p;
18+
}
19+
20+
const mockEngagementLoaderPromise = fulfilledPromise({ ...draftEngagement });
21+
const mockWidgetsLoaderPromise = fulfilledPromise<never[]>([]);
22+
const mockMetadataLoaderPromise = fulfilledPromise<never[]>([]);
23+
const mockContentLoaderPromise = fulfilledPromise<never[]>([]);
24+
const mockTaxaLoaderPromise = fulfilledPromise<never[]>([]);
25+
1426
jest.mock('components/map', () => () => <div></div>);
1527
jest.mock('axios');
1628
jest.mock('react-redux', () => ({
@@ -59,13 +71,11 @@ jest.mock('react-router', () => ({
5971
useRouteLoaderData: (routeId: string) => {
6072
if (routeId === 'single-engagement') {
6173
return {
62-
engagement: Promise.resolve({
63-
...draftEngagement,
64-
}),
65-
widgets: Promise.resolve([]),
66-
metadata: Promise.resolve([]),
67-
content: Promise.resolve([]),
68-
taxa: Promise.resolve([]),
74+
engagement: mockEngagementLoaderPromise,
75+
widgets: mockWidgetsLoaderPromise,
76+
metadata: mockMetadataLoaderPromise,
77+
content: mockContentLoaderPromise,
78+
taxa: mockTaxaLoaderPromise,
6979
};
7080
}
7181
},

web/tests/unit/components/widgets/VideoWidget.test.tsx

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,18 @@ import { USER_ROLES } from 'services/userService/constants';
1111
import { setupWidgetTestEnvMock, setupWidgetTestEnvSpy } from './setupWidgetTestEnv';
1212
import { createMemoryRouter, RouterProvider } from 'react-router';
1313

14+
function fulfilledPromise<T>(value: T): Promise<T> {
15+
const p = Promise.resolve(value);
16+
Object.assign(p, { status: 'fulfilled', value });
17+
return p;
18+
}
19+
20+
const mockEngagementLoaderPromise = fulfilledPromise({ ...draftEngagement });
21+
const mockWidgetsLoaderPromise = fulfilledPromise<never[]>([]);
22+
const mockMetadataLoaderPromise = fulfilledPromise<never[]>([]);
23+
const mockContentLoaderPromise = fulfilledPromise<never[]>([]);
24+
const mockTaxaLoaderPromise = fulfilledPromise<never[]>([]);
25+
1426
jest.mock('components/map', () => () => <div></div>);
1527
jest.mock('axios');
1628
jest.mock('react-redux', () => ({
@@ -60,13 +72,11 @@ jest.mock('react-router', () => ({
6072
useRouteLoaderData: (routeId: string) => {
6173
if (routeId === 'single-engagement') {
6274
return {
63-
engagement: Promise.resolve({
64-
...draftEngagement,
65-
}),
66-
widgets: Promise.resolve([]),
67-
metadata: Promise.resolve([]),
68-
content: Promise.resolve([]),
69-
taxa: Promise.resolve([]),
75+
engagement: mockEngagementLoaderPromise,
76+
widgets: mockWidgetsLoaderPromise,
77+
metadata: mockMetadataLoaderPromise,
78+
content: mockContentLoaderPromise,
79+
taxa: mockTaxaLoaderPromise,
7080
};
7181
}
7282
},

web/tests/unit/components/widgets/WhoIsListeningWidget.test.tsx

Lines changed: 41 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,18 @@ import { USER_ROLES } from 'services/userService/constants';
1919
import { EngagementSettings, createDefaultEngagementSettings } from 'models/engagement';
2020
import { createMemoryRouter, RouterProvider } from 'react-router';
2121

22+
function fulfilledPromise<T>(value: T): Promise<T> {
23+
const p = Promise.resolve(value);
24+
Object.assign(p, { status: 'fulfilled', value });
25+
return p;
26+
}
27+
28+
const mockEngagementLoaderPromise = fulfilledPromise({ ...draftEngagement });
29+
const mockWidgetsLoaderPromise = fulfilledPromise<never[]>([]);
30+
const mockMetadataLoaderPromise = fulfilledPromise<never[]>([]);
31+
const mockContentLoaderPromise = fulfilledPromise<never[]>([]);
32+
const mockTaxaLoaderPromise = fulfilledPromise<never[]>([]);
33+
2234
const survey: Survey = {
2335
...createDefaultSurvey(),
2436
id: 1,
@@ -83,13 +95,11 @@ jest.mock('react-router', () => ({
8395
useRouteLoaderData: (routeId: string) => {
8496
if (routeId === 'single-engagement') {
8597
return {
86-
engagement: Promise.resolve({
87-
...draftEngagement,
88-
}),
89-
widgets: Promise.resolve([]),
90-
metadata: Promise.resolve([]),
91-
content: Promise.resolve([]),
92-
taxa: Promise.resolve([]),
98+
engagement: mockEngagementLoaderPromise,
99+
widgets: mockWidgetsLoaderPromise,
100+
metadata: mockMetadataLoaderPromise,
101+
content: mockContentLoaderPromise,
102+
taxa: mockTaxaLoaderPromise,
93103
};
94104
}
95105
},
@@ -180,6 +190,26 @@ jest.mock('apiManager/apiSlices/widgets', () => ({
180190
}));
181191
jest.spyOn(engagementMetadataService, 'getEngagementMetadata').mockReturnValue(Promise.resolve([engagementMetadata]));
182192

193+
async function addWhosIsListeningWidget() {
194+
await waitFor(() => {
195+
expect(screen.getByText('Add Widget')).toBeEnabled();
196+
});
197+
198+
const addWidgetButton = screen.getByText('Add Widget');
199+
fireEvent.click(addWidgetButton);
200+
201+
await waitFor(() => {
202+
expect(screen.getByText('Select Widget')).toBeVisible();
203+
});
204+
205+
const whoIsListeningOption = screen.getByTestId(`widget-drawer-option/${WidgetType.WhoIsListening}`);
206+
fireEvent.click(whoIsListeningOption);
207+
208+
await waitFor(() => {
209+
expect(screen.getByText('Add This Contact')).toBeVisible();
210+
});
211+
}
212+
183213
describe('Who is Listening widget tests', () => {
184214
jest.spyOn(engagementMetadataService, 'getEngagementMetadata').mockReturnValue(
185215
Promise.resolve([engagementMetadata]),
@@ -213,26 +243,6 @@ describe('Who is Listening widget tests', () => {
213243
}));
214244
});
215245

216-
async function addWhosIsListeningWidget(container: HTMLElement) {
217-
await waitFor(() => {
218-
expect(screen.getByText('Add Widget')).toBeEnabled();
219-
});
220-
221-
const addWidgetButton = screen.getByText('Add Widget');
222-
fireEvent.click(addWidgetButton);
223-
224-
await waitFor(() => {
225-
expect(screen.getByText('Select Widget')).toBeVisible();
226-
});
227-
228-
const whoIsListeningOption = screen.getByTestId(`widget-drawer-option/${WidgetType.WhoIsListening}`);
229-
fireEvent.click(whoIsListeningOption);
230-
231-
await waitFor(() => {
232-
expect(screen.getByText('Add This Contact')).toBeVisible();
233-
});
234-
}
235-
236246
test('Who is listening widget is created when option is clicked', async () => {
237247
useParamsMock.mockReturnValue({ engagementId: '1' });
238248
getEngagementMock.mockReturnValueOnce(
@@ -241,9 +251,9 @@ describe('Who is Listening widget tests', () => {
241251
surveys: surveys,
242252
}),
243253
);
244-
const { container } = render(<RouterProvider router={router} />);
254+
render(<RouterProvider router={router} />);
245255

246-
await addWhosIsListeningWidget(container);
256+
await addWhosIsListeningWidget();
247257

248258
expect(mockCreateWidget).toHaveBeenNthCalledWith(1, {
249259
widget_type_id: WidgetType.WhoIsListening,
@@ -264,9 +274,9 @@ describe('Who is Listening widget tests', () => {
264274
surveys: surveys,
265275
}),
266276
);
267-
const { container } = render(<RouterProvider router={router} />);
277+
render(<RouterProvider router={router} />);
268278

269-
await addWhosIsListeningWidget(container);
279+
await addWhosIsListeningWidget();
270280

271281
await waitFor(() => {
272282
expect(screen.getByText('Create New Contact')).toBeVisible();

0 commit comments

Comments
 (0)