richie-education 2.25.0-b2.dev148 → 2.25.0-b2.dev152

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/js/contexts/JoanieApiContext/index.spec.tsx +1 -1
  2. package/js/contexts/SessionContext/JoanieSessionProvider.spec.tsx +44 -37
  3. package/js/contexts/SessionContext/index.spec.tsx +42 -21
  4. package/js/contexts/SessionContext/no-authentication.spec.tsx +3 -2
  5. package/js/hooks/useCourseSearchParams/index.spec.tsx +0 -1
  6. package/js/hooks/useUnionResource/index.spec.tsx +11 -9
  7. package/js/utils/test/render.tsx +5 -1
  8. package/js/utils/test/wrappers/BaseAppWrapper.tsx +5 -8
  9. package/js/utils/test/wrappers/BaseJoanieAppWrapper.tsx +4 -7
  10. package/js/utils/test/wrappers/IntlWrapper.tsx +4 -2
  11. package/js/utils/test/wrappers/PresentationalAppWrapper.tsx +1 -1
  12. package/js/utils/test/wrappers/ReactQueryAppWrapper.tsx +16 -0
  13. package/js/widgets/Dashboard/components/DashboardAvatar/index.spec.tsx +8 -5
  14. package/js/widgets/Dashboard/components/DashboardBox/index.spec.tsx +3 -1
  15. package/js/widgets/Dashboard/components/DashboardItem/Certificate/index.spec.tsx +19 -39
  16. package/js/widgets/Dashboard/components/DashboardItem/CertificateStatus/index.spec.tsx +14 -12
  17. package/js/widgets/Dashboard/components/DashboardItem/Contract/index.spec.tsx +5 -43
  18. package/js/widgets/Dashboard/components/DashboardItem/CourseEnrolling/index.spec.tsx +16 -15
  19. package/js/widgets/Dashboard/components/DashboardItem/Enrollment/DashboardItemEnrollment.spec.tsx +8 -18
  20. package/js/widgets/Dashboard/components/DashboardItem/Enrollment/ProductCertificateFooter/index.spec.tsx +19 -51
  21. package/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrder.spec.tsx +40 -70
  22. package/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderContract.spec.tsx +31 -32
  23. package/js/widgets/Dashboard/components/DashboardItem/Order/OrderStateLearnerMessage/index.spec.tsx +19 -31
  24. package/js/widgets/Dashboard/components/DashboardItem/Order/OrderStateTeacherMessage/index.spec.tsx +26 -37
  25. package/js/widgets/Dashboard/components/DashboardItem/index.spec.tsx +28 -23
  26. package/js/widgets/Dashboard/components/DashboardLayoutRoute/index.spec.tsx +53 -51
  27. package/js/widgets/Dashboard/components/DashboardSidebar/components/ContractNavLink/index.spec.tsx +24 -49
  28. package/js/widgets/Dashboard/components/DashboardSidebar/components/MenuNavLink/index.spec.tsx +5 -14
  29. package/js/widgets/Dashboard/components/ProtectedOutlet/AuthenticatedOutlet.spec.tsx +62 -54
  30. package/js/widgets/Dashboard/components/ProtectedOutlet/ProtectedOutlet.spec.tsx +67 -42
  31. package/js/widgets/Dashboard/components/RouterButton/index.spec.tsx +12 -14
  32. package/js/widgets/Dashboard/components/TeacherDashboardOrganizationSidebar/index.spec.tsx +14 -39
  33. package/js/widgets/Dashboard/hooks/useDashboardRouter/index.spec.tsx +2 -4
  34. package/js/widgets/Dashboard/hooks/useEnroll/index.spec.tsx +7 -28
  35. package/js/widgets/Dashboard/hooks/useRouteInfo/index.spec.tsx +25 -33
  36. package/js/widgets/Dashboard/index.spec.tsx +49 -43
  37. package/js/widgets/LanguageSelector/index.spec.tsx +7 -7
  38. package/js/widgets/LtiConsumer/index.spec.tsx +46 -48
  39. package/js/widgets/RootSearchSuggestField/index.spec.tsx +8 -6
  40. package/js/widgets/Search/components/PaginateCourseSearch/index.spec.tsx +10 -3
  41. package/js/widgets/Search/components/SearchFilterGroup/index.spec.tsx +5 -3
  42. package/js/widgets/Search/components/SearchFilterGroupModal/index.spec.tsx +8 -4
  43. package/js/widgets/Search/components/SearchFilterValueLeaf/index.spec.tsx +7 -3
  44. package/js/widgets/Search/components/SearchFilterValueParent/index.spec.tsx +12 -7
  45. package/js/widgets/Search/components/SearchFiltersPane/index.spec.tsx +5 -1
  46. package/js/widgets/Search/hooks/useCourseSearch/index.spec.tsx +4 -12
  47. package/js/widgets/Search/hooks/useFilterValue/index.spec.tsx +0 -2
  48. package/js/widgets/Search/index.spec.tsx +14 -6
  49. package/js/widgets/SearchSuggestField/index.spec.tsx +14 -1
  50. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/components/CourseProductCertificateItem/index.spec.tsx +16 -31
  51. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/components/CourseProductCourseRuns/index.spec.tsx +46 -72
  52. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/components/CourseRunItem/index.spec.tsx +5 -2
  53. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/index.spec.tsx +147 -162
  54. package/js/widgets/SyllabusCourseRunsList/components/CourseRunEnrollment/CourseRunUnenrollmentButton/index.spec.tsx +6 -4
  55. package/js/widgets/SyllabusCourseRunsList/components/CourseRunEnrollment/index.joanie.spec.tsx +22 -99
  56. package/js/widgets/SyllabusCourseRunsList/components/CourseRunEnrollment/index.openedx.spec.tsx +27 -83
  57. package/js/widgets/SyllabusCourseRunsList/components/CourseRunItem/index.spec.tsx +4 -1
  58. package/js/widgets/SyllabusCourseRunsList/components/CourseRunItemWithEnrollment/index.spec.tsx +28 -35
  59. package/js/widgets/SyllabusCourseRunsList/components/CourseWishButton/hooks/useCourseWish/index.spec.tsx +9 -28
  60. package/js/widgets/SyllabusCourseRunsList/components/CourseWishButton/index.login.spec.tsx +23 -48
  61. package/js/widgets/SyllabusCourseRunsList/components/CourseWishButton/index.logout.spec.tsx +20 -29
  62. package/js/widgets/SyllabusCourseRunsList/components/SyllabusSimpleCourseRunsList/index.spec.tsx +9 -4
  63. package/js/widgets/SyllabusCourseRunsList/hooks/useCourseEnrollment/index.spec.tsx +8 -10
  64. package/js/widgets/SyllabusCourseRunsList/index.spec.tsx +28 -39
  65. package/js/widgets/UserLogin/components/UserMenu/index.spec.tsx +9 -6
  66. package/js/widgets/UserLogin/index.not.isJoanieEnabled.spec.tsx +21 -32
  67. package/js/widgets/UserLogin/index.spec.tsx +15 -37
  68. package/js/widgets/index.spec.tsx +12 -17
  69. package/package.json +1 -1
@@ -5,17 +5,12 @@ import {
5
5
  getByText,
6
6
  queryByRole,
7
7
  queryByText,
8
- render,
9
8
  screen,
10
9
  waitFor,
11
10
  within,
12
11
  } from '@testing-library/react';
13
- import { IntlProvider } from 'react-intl';
14
12
  import { faker } from '@faker-js/faker';
15
- import { QueryClientProvider } from '@tanstack/react-query';
16
- import { PropsWithChildren } from 'react';
17
13
  import fetchMock from 'fetch-mock';
18
- import { createMemoryRouter, RouterProvider } from 'react-router-dom';
19
14
  import { userEvent } from '@storybook/testing-library';
20
15
  import { DEFAULT_DATE_FORMAT } from 'hooks/useDateFormat';
21
16
  import {
@@ -31,8 +26,6 @@ import {
31
26
  TargetCourseFactory,
32
27
  } from 'utils/test/factories/joanie';
33
28
  import { Certificate, CourseLight, CourseRun, CredentialOrder, OrderState } from 'types/Joanie';
34
- import { createTestQueryClient } from 'utils/test/createTestQueryClient';
35
- import { SessionProvider } from 'contexts/SessionContext';
36
29
  import { resolveAll } from 'utils/resolveAll';
37
30
  import { confirm } from 'utils/indirection/window';
38
31
  import { Priority } from 'types';
@@ -43,6 +36,9 @@ import { Deferred } from 'utils/test/deferred';
43
36
  import { expectBreadcrumbsToEqualParts } from 'utils/test/expectBreadcrumbsToEqualParts';
44
37
  import { mockCourseProductWithOrder } from 'utils/test/mockCourseProductWithOrder';
45
38
  import { HttpStatusCode } from 'utils/errors/HttpError';
39
+ import { setupJoanieSession } from 'utils/test/wrappers/JoanieAppWrapper';
40
+ import { render } from 'utils/test/render';
41
+ import { BaseJoanieAppWrapper } from 'utils/test/wrappers/BaseJoanieAppWrapper';
46
42
  import { LearnerDashboardPaths } from '../../../utils/learnerRouteMessages';
47
43
  import { DashboardTest } from '../../DashboardTest';
48
44
  import { DashboardItemOrder } from './DashboardItemOrder';
@@ -60,43 +56,12 @@ jest.mock('utils/indirection/window', () => ({
60
56
  }));
61
57
 
62
58
  describe('<DashboardItemOrder/>', () => {
63
- const wrapper = ({ children }: PropsWithChildren) => {
64
- const router = createMemoryRouter([{ index: true, element: children }]);
65
- return (
66
- <QueryClientProvider client={createTestQueryClient({ user: true })}>
67
- <IntlProvider locale="en">
68
- <SessionProvider>
69
- <RouterProvider router={router} />
70
- </SessionProvider>
71
- </IntlProvider>
72
- </QueryClientProvider>
73
- );
74
- };
75
- const WrapperWithDashboard = (route: string) => {
76
- return (
77
- <QueryClientProvider client={createTestQueryClient({ user: true })}>
78
- <IntlProvider locale="en">
79
- <SessionProvider>
80
- <DashboardTest initialRoute={route} />
81
- </SessionProvider>
82
- </IntlProvider>
83
- </QueryClientProvider>
84
- );
85
- };
59
+ setupJoanieSession();
86
60
 
87
61
  beforeEach(() => {
88
- fetchMock.get('https://joanie.endpoint/api/v1.0/addresses/', []);
89
- fetchMock.get('https://joanie.endpoint/api/v1.0/credit-cards/', []);
90
- fetchMock.get('https://joanie.endpoint/api/v1.0/orders/', []);
91
62
  fetchMock.get('https://joanie.endpoint/api/v1.0/enrollments/', []);
92
63
  });
93
64
 
94
- afterEach(() => {
95
- jest.restoreAllMocks();
96
- jest.clearAllMocks();
97
- fetchMock.restore();
98
- });
99
-
100
65
  /**
101
66
  * Global
102
67
  */
@@ -106,7 +71,7 @@ describe('<DashboardItemOrder/>', () => {
106
71
  order.target_courses = [];
107
72
  const { product } = mockCourseProductWithOrder(order);
108
73
 
109
- render(<DashboardItemOrder order={order} />, { wrapper });
74
+ render(<DashboardItemOrder order={order} />);
110
75
 
111
76
  await screen.findByRole('heading', { level: 5, name: product.title });
112
77
  await screen.findByText('Ref. ' + (order.course as CourseLight).code);
@@ -134,7 +99,7 @@ describe('<DashboardItemOrder/>', () => {
134
99
  deferred.promise,
135
100
  );
136
101
 
137
- render(<DashboardItemOrder order={order} showCertificate={true} />, { wrapper });
102
+ render(<DashboardItemOrder order={order} showCertificate={true} />);
138
103
 
139
104
  await screen.findByRole('heading', { level: 5, name: product.title });
140
105
  await screen.findByText('Ref. ' + (order.course as CourseLight).code);
@@ -153,7 +118,7 @@ describe('<DashboardItemOrder/>', () => {
153
118
  order.target_courses = [];
154
119
  const { product } = mockCourseProductWithOrder(order);
155
120
 
156
- render(<DashboardItemOrder order={order} />, { wrapper });
121
+ render(<DashboardItemOrder order={order} />);
157
122
 
158
123
  await screen.findByRole('heading', { level: 5, name: product.title });
159
124
  await screen.findByText('Ref. ' + (order.course as CourseLight).code);
@@ -167,7 +132,7 @@ describe('<DashboardItemOrder/>', () => {
167
132
  order.target_courses = [];
168
133
  const { product } = mockCourseProductWithOrder(order);
169
134
 
170
- render(<DashboardItemOrder order={order} />, { wrapper });
135
+ render(<DashboardItemOrder order={order} />);
171
136
 
172
137
  await screen.findByRole('heading', { level: 5, name: product.title });
173
138
  const moreButton = screen.getByRole('combobox', {
@@ -190,7 +155,7 @@ describe('<DashboardItemOrder/>', () => {
190
155
  order.target_courses = [];
191
156
  const { product } = mockCourseProductWithOrder(order);
192
157
 
193
- render(<DashboardItemOrder order={order} />, { wrapper });
158
+ render(<DashboardItemOrder order={order} />);
194
159
 
195
160
  await screen.findByRole('heading', { level: 5, name: product.title });
196
161
  await screen.findByText('Ref. ' + (order.course as CourseLight).code);
@@ -202,7 +167,7 @@ describe('<DashboardItemOrder/>', () => {
202
167
  const order: CredentialOrder = CredentialOrderFactory().one();
203
168
  const { product } = mockCourseProductWithOrder(order);
204
169
 
205
- render(<DashboardItemOrder order={order} />, { wrapper });
170
+ render(<DashboardItemOrder order={order} />);
206
171
 
207
172
  await screen.findByRole('heading', { level: 5, name: product.title });
208
173
  await screen.findByText('Ref. ' + (order.course as CourseLight).code);
@@ -226,7 +191,7 @@ describe('<DashboardItemOrder/>', () => {
226
191
 
227
192
  const { product } = mockCourseProductWithOrder(order);
228
193
 
229
- render(<DashboardItemOrder order={order} />, { wrapper });
194
+ render(<DashboardItemOrder order={order} />);
230
195
 
231
196
  await screen.findByRole('heading', { level: 5, name: product.title });
232
197
  await screen.findByText('Ref. ' + (order.course as CourseLight).code);
@@ -255,7 +220,7 @@ describe('<DashboardItemOrder/>', () => {
255
220
 
256
221
  const { product } = mockCourseProductWithOrder(order);
257
222
 
258
- render(<DashboardItemOrder order={order} />, { wrapper });
223
+ render(<DashboardItemOrder order={order} />);
259
224
 
260
225
  await screen.findByRole('heading', { level: 5, name: product.title });
261
226
  screen.getByText('Ref. ' + (order.course as CourseLight).code);
@@ -276,9 +241,7 @@ describe('<DashboardItemOrder/>', () => {
276
241
  order.target_courses = [];
277
242
  const { product } = mockCourseProductWithOrder(order);
278
243
 
279
- render(<DashboardItemOrder order={order} writable={true} showDetailsButton={false} />, {
280
- wrapper,
281
- });
244
+ render(<DashboardItemOrder order={order} writable={true} showDetailsButton={false} />);
282
245
 
283
246
  await screen.findByRole('heading', { level: 5, name: product.title });
284
247
  await screen.findByText('Ref. ' + (order.course as CourseLight).code);
@@ -305,9 +268,7 @@ describe('<DashboardItemOrder/>', () => {
305
268
 
306
269
  const { product } = mockCourseProductWithOrder(order);
307
270
 
308
- render(<DashboardItemOrder order={order} writable={true} showDetailsButton={false} />, {
309
- wrapper,
310
- });
271
+ render(<DashboardItemOrder order={order} writable={true} showDetailsButton={false} />);
311
272
 
312
273
  await screen.findByRole('heading', { level: 5, name: product.title });
313
274
  await screen.findByText('Ref. ' + (order.course as CourseLight).code);
@@ -382,7 +343,11 @@ describe('<DashboardItemOrder/>', () => {
382
343
  }).many(1),
383
344
  };
384
345
 
385
- render(WrapperWithDashboard(LearnerDashboardPaths.ORDER.replace(':orderId', order.id)));
346
+ render(
347
+ <DashboardTest initialRoute={LearnerDashboardPaths.ORDER.replace(':orderId', order.id)} />,
348
+ { wrapper: BaseJoanieAppWrapper },
349
+ );
350
+
386
351
  // Wait for the order to be rendered.
387
352
  await screen.findByRole('heading', { level: 5, name: product.title });
388
353
 
@@ -456,7 +421,11 @@ describe('<DashboardItemOrder/>', () => {
456
421
  body: 'Internal Server Error',
457
422
  });
458
423
 
459
- render(WrapperWithDashboard(LearnerDashboardPaths.ORDER.replace(':orderId', order.id)));
424
+ render(
425
+ <DashboardTest initialRoute={LearnerDashboardPaths.ORDER.replace(':orderId', order.id)} />,
426
+ { wrapper: BaseJoanieAppWrapper },
427
+ );
428
+
460
429
  // Wait for the order to be rendered.
461
430
  await screen.findByRole('heading', { level: 5, name: product.title });
462
431
 
@@ -526,7 +495,10 @@ describe('<DashboardItemOrder/>', () => {
526
495
  target_enrollments: EnrollmentFactory({ course_run: newEnrolledCourseRun }).many(1),
527
496
  };
528
497
 
529
- render(WrapperWithDashboard(LearnerDashboardPaths.ORDER.replace(':orderId', order.id)));
498
+ render(
499
+ <DashboardTest initialRoute={LearnerDashboardPaths.ORDER.replace(':orderId', order.id)} />,
500
+ { wrapper: BaseJoanieAppWrapper },
501
+ );
530
502
 
531
503
  // Wait for the order to be rendered.
532
504
  await screen.findByRole('heading', { level: 5, name: product.title });
@@ -624,7 +596,10 @@ describe('<DashboardItemOrder/>', () => {
624
596
  const courseRun = order.target_courses[0].course_runs[0];
625
597
  const newEnrolledCourseRun = order.target_courses[0].course_runs[1];
626
598
 
627
- render(WrapperWithDashboard(LearnerDashboardPaths.ORDER.replace(':orderId', order.id)));
599
+ render(
600
+ <DashboardTest initialRoute={LearnerDashboardPaths.ORDER.replace(':orderId', order.id)} />,
601
+ { wrapper: BaseJoanieAppWrapper },
602
+ );
628
603
 
629
604
  // Wait for the order to be rendered.
630
605
  await screen.findByRole('heading', { level: 5, name: product.title });
@@ -715,7 +690,10 @@ describe('<DashboardItemOrder/>', () => {
715
690
  ],
716
691
  };
717
692
 
718
- render(WrapperWithDashboard(LearnerDashboardPaths.ORDER.replace(':orderId', order.id)));
693
+ render(
694
+ <DashboardTest initialRoute={LearnerDashboardPaths.ORDER.replace(':orderId', order.id)} />,
695
+ { wrapper: BaseJoanieAppWrapper },
696
+ );
719
697
 
720
698
  // Wait for the order to be rendered.
721
699
  await screen.findByRole('heading', { level: 5, name: product.title });
@@ -779,9 +757,7 @@ describe('<DashboardItemOrder/>', () => {
779
757
  }).one();
780
758
  const { product } = mockCourseProductWithOrder(order);
781
759
 
782
- render(<DashboardItemOrder order={order} writable={true} showDetailsButton={false} />, {
783
- wrapper,
784
- });
760
+ render(<DashboardItemOrder order={order} writable={true} showDetailsButton={false} />);
785
761
 
786
762
  await screen.findByRole('heading', { level: 5, name: product.title });
787
763
 
@@ -816,9 +792,7 @@ describe('<DashboardItemOrder/>', () => {
816
792
 
817
793
  const { product } = mockCourseProductWithOrder(order);
818
794
 
819
- render(<DashboardItemOrder order={order} writable={true} showDetailsButton={false} />, {
820
- wrapper,
821
- });
795
+ render(<DashboardItemOrder order={order} writable={true} showDetailsButton={false} />);
822
796
 
823
797
  await screen.findByRole('heading', { level: 5, name: product.title });
824
798
  await screen.findByText('Ref. ' + (order.course as CourseLight).code);
@@ -846,9 +820,7 @@ describe('<DashboardItemOrder/>', () => {
846
820
 
847
821
  const { product } = mockCourseProductWithOrder(order);
848
822
 
849
- render(<DashboardItemOrder order={order} writable={true} showDetailsButton={false} />, {
850
- wrapper,
851
- });
823
+ render(<DashboardItemOrder order={order} writable={true} showDetailsButton={false} />);
852
824
 
853
825
  await screen.findByRole('heading', { level: 5, name: product.title });
854
826
  await screen.findByText('Ref. ' + (order.course as CourseLight).code);
@@ -864,9 +836,7 @@ describe('<DashboardItemOrder/>', () => {
864
836
  const order: CredentialOrder = CredentialOrderFactory().one();
865
837
  const { product } = mockCourseProductWithOrder(order);
866
838
 
867
- render(<DashboardItemOrder order={order} writable={true} showDetailsButton={false} />, {
868
- wrapper,
869
- });
839
+ render(<DashboardItemOrder order={order} writable={true} showDetailsButton={false} />);
870
840
 
871
841
  await screen.findByRole('heading', { level: 5, name: product.title });
872
842
 
@@ -1,11 +1,7 @@
1
- import { QueryClientProvider } from '@tanstack/react-query';
2
- import { IntlProvider } from 'react-intl';
3
1
  import fetchMock from 'fetch-mock';
4
2
  import { faker } from '@faker-js/faker';
5
- import { render, screen } from '@testing-library/react';
3
+ import { screen } from '@testing-library/react';
6
4
  import { RichieContextFactory as mockRichieContextFactory } from 'utils/test/factories/richie';
7
- import { createTestQueryClient } from 'utils/test/createTestQueryClient';
8
- import { SessionProvider } from 'contexts/SessionContext';
9
5
  import { DashboardTest } from 'widgets/Dashboard/components/DashboardTest';
10
6
  import { CourseLight } from 'types/Joanie';
11
7
  import {
@@ -17,6 +13,9 @@ import {
17
13
  import { mockCourseProductWithOrder } from 'utils/test/mockCourseProductWithOrder';
18
14
  import { LearnerDashboardPaths } from 'widgets/Dashboard/utils/learnerRouteMessages';
19
15
  import { expectBannerError } from 'utils/test/expectBanner';
16
+ import { setupJoanieSession } from 'utils/test/wrappers/JoanieAppWrapper';
17
+ import { render } from 'utils/test/render';
18
+ import { BaseJoanieAppWrapper } from 'utils/test/wrappers/BaseJoanieAppWrapper';
20
19
 
21
20
  jest.mock('utils/context', () => ({
22
21
  __esModule: true,
@@ -43,21 +42,8 @@ jest.mock('settings', () => ({
43
42
  }));
44
43
 
45
44
  describe('<DashboardItemOrder/> Contract', () => {
46
- const Wrapper = (route: string) => {
47
- return (
48
- <QueryClientProvider client={createTestQueryClient({ user: true })}>
49
- <IntlProvider locale="en">
50
- <SessionProvider>
51
- <DashboardTest initialRoute={route} />
52
- </SessionProvider>
53
- </IntlProvider>
54
- </QueryClientProvider>
55
- );
56
- };
57
-
45
+ setupJoanieSession();
58
46
  beforeEach(() => {
59
- fetchMock.get('https://joanie.endpoint/api/v1.0/addresses/', []);
60
- fetchMock.get('https://joanie.endpoint/api/v1.0/credit-cards/', []);
61
47
  fetchMock.get(
62
48
  'begin:https://joanie.endpoint/api/v1.0/enrollments/',
63
49
  { results: [], next: null, previous: null, count: null },
@@ -66,12 +52,6 @@ describe('<DashboardItemOrder/> Contract', () => {
66
52
  fetchMock.get('https://joanie.endpoint/api/v1.0/me', []);
67
53
  });
68
54
 
69
- afterEach(() => {
70
- jest.restoreAllMocks();
71
- jest.clearAllMocks();
72
- fetchMock.restore();
73
- });
74
-
75
55
  describe('non writable', () => {
76
56
  it('renders a non-writable order without contract attribute', async () => {
77
57
  const order = CredentialOrderFactory({
@@ -89,7 +69,9 @@ describe('<DashboardItemOrder/> Contract', () => {
89
69
 
90
70
  const { product } = mockCourseProductWithOrder(order);
91
71
 
92
- render(Wrapper(LearnerDashboardPaths.COURSES));
72
+ render(<DashboardTest initialRoute={LearnerDashboardPaths.COURSES} />, {
73
+ wrapper: BaseJoanieAppWrapper,
74
+ });
93
75
 
94
76
  await screen.findByRole('heading', { level: 5, name: product.title });
95
77
 
@@ -121,7 +103,9 @@ describe('<DashboardItemOrder/> Contract', () => {
121
103
 
122
104
  const { product } = mockCourseProductWithOrder(order);
123
105
 
124
- render(Wrapper(LearnerDashboardPaths.COURSES));
106
+ render(<DashboardTest initialRoute={LearnerDashboardPaths.COURSES} />, {
107
+ wrapper: BaseJoanieAppWrapper,
108
+ });
125
109
 
126
110
  await screen.findByRole('heading', { level: 5, name: product.title });
127
111
 
@@ -153,7 +137,9 @@ describe('<DashboardItemOrder/> Contract', () => {
153
137
 
154
138
  const { product } = mockCourseProductWithOrder(order);
155
139
 
156
- render(Wrapper(LearnerDashboardPaths.COURSES));
140
+ render(<DashboardTest initialRoute={LearnerDashboardPaths.COURSES} />, {
141
+ wrapper: BaseJoanieAppWrapper,
142
+ });
157
143
 
158
144
  await screen.findByRole('heading', { level: 5, name: product.title });
159
145
 
@@ -186,7 +172,11 @@ describe('<DashboardItemOrder/> Contract', () => {
186
172
  { overwriteRoutes: true },
187
173
  );
188
174
 
189
- render(Wrapper(LearnerDashboardPaths.ORDER.replace(':orderId', order.id)));
175
+ render(
176
+ <DashboardTest initialRoute={LearnerDashboardPaths.ORDER.replace(':orderId', order.id)} />,
177
+ { wrapper: BaseJoanieAppWrapper },
178
+ );
179
+
190
180
  expect(
191
181
  await screen.findByRole('heading', { level: 5, name: product.title }),
192
182
  ).toBeInTheDocument();
@@ -208,7 +198,10 @@ describe('<DashboardItemOrder/> Contract', () => {
208
198
  { overwriteRoutes: true },
209
199
  );
210
200
 
211
- render(Wrapper(LearnerDashboardPaths.ORDER.replace(':orderId', order.id)));
201
+ render(
202
+ <DashboardTest initialRoute={LearnerDashboardPaths.ORDER.replace(':orderId', order.id)} />,
203
+ { wrapper: BaseJoanieAppWrapper },
204
+ );
212
205
  expect(
213
206
  await screen.findByRole('heading', { level: 5, name: product.title }),
214
207
  ).toBeInTheDocument();
@@ -246,7 +239,10 @@ describe('<DashboardItemOrder/> Contract', () => {
246
239
  { overwriteRoutes: true },
247
240
  );
248
241
 
249
- render(Wrapper(LearnerDashboardPaths.ORDER.replace(':orderId', order.id)));
242
+ render(
243
+ <DashboardTest initialRoute={LearnerDashboardPaths.ORDER.replace(':orderId', order.id)} />,
244
+ { wrapper: BaseJoanieAppWrapper },
245
+ );
250
246
 
251
247
  expect(
252
248
  await screen.findByRole('heading', { level: 5, name: product.title }),
@@ -292,7 +288,10 @@ describe('<DashboardItemOrder/> Contract', () => {
292
288
  }/download/`;
293
289
  fetchMock.get(DOWNLOAD_URL, 'contract content');
294
290
 
295
- render(Wrapper(LearnerDashboardPaths.ORDER.replace(':orderId', order.id)));
291
+ render(
292
+ <DashboardTest initialRoute={LearnerDashboardPaths.ORDER.replace(':orderId', order.id)} />,
293
+ { wrapper: BaseJoanieAppWrapper },
294
+ );
296
295
  expect(await screen.findByRole('button', { name: 'Download' })).toBeInTheDocument();
297
296
  });
298
297
  });
@@ -1,21 +1,19 @@
1
1
  import React, { PropsWithChildren } from 'react';
2
- import { render, screen } from '@testing-library/react';
3
- import { IntlProvider, createIntl } from 'react-intl';
2
+ import { screen } from '@testing-library/react';
3
+ import { createIntl } from 'react-intl';
4
4
  import {
5
5
  ContractDefinitionFactory,
6
6
  ContractFactory,
7
7
  CredentialOrderFactory,
8
8
  } from 'utils/test/factories/joanie';
9
9
  import { OrderState } from 'types/Joanie';
10
+ import { render } from 'utils/test/render';
11
+ import { IntlWrapper } from 'utils/test/wrappers/IntlWrapper';
10
12
  import OrderStateLearnerMessage, { messages } from '.';
11
13
 
12
14
  const intl = createIntl({ locale: 'en' });
13
15
 
14
16
  describe('<DashboardItemOrder/>', () => {
15
- const Wrapper = ({ children }: PropsWithChildren) => (
16
- <IntlProvider locale="en">{children}</IntlProvider>
17
- );
18
-
19
17
  it.each([
20
18
  [OrderState.DRAFT, 'Draft'],
21
19
  [OrderState.SUBMITTED, 'Submitted'],
@@ -25,11 +23,9 @@ describe('<DashboardItemOrder/>', () => {
25
23
  'should display message from order state: %s when order have no contract',
26
24
  (state, expectedMessage) => {
27
25
  const order = CredentialOrderFactory({ state }).one();
28
- render(
29
- <Wrapper>
30
- <OrderStateLearnerMessage order={order} />
31
- </Wrapper>,
32
- );
26
+ render(<OrderStateLearnerMessage order={order} />, {
27
+ wrapper: ({ children }: PropsWithChildren) => <IntlWrapper>{children}</IntlWrapper>,
28
+ });
33
29
  expect(screen.getByText(expectedMessage)).toBeInTheDocument();
34
30
  },
35
31
  );
@@ -46,11 +42,9 @@ describe('<DashboardItemOrder/>', () => {
46
42
  state,
47
43
  contract: ContractFactory().one(),
48
44
  }).one();
49
- render(
50
- <Wrapper>
51
- <OrderStateLearnerMessage order={orderWithContract} />
52
- </Wrapper>,
53
- );
45
+ render(<OrderStateLearnerMessage order={orderWithContract} />, {
46
+ wrapper: ({ children }: PropsWithChildren) => <IntlWrapper>{children}</IntlWrapper>,
47
+ });
54
48
  expect(screen.getByText(expectedMessage)).toBeInTheDocument();
55
49
  },
56
50
  );
@@ -63,11 +57,9 @@ describe('<DashboardItemOrder/>', () => {
63
57
 
64
58
  const contractDefinition = ContractDefinitionFactory().one();
65
59
 
66
- render(
67
- <Wrapper>
68
- <OrderStateLearnerMessage order={order} contractDefinition={contractDefinition} />
69
- </Wrapper>,
70
- );
60
+ render(<OrderStateLearnerMessage order={order} contractDefinition={contractDefinition} />, {
61
+ wrapper: ({ children }: PropsWithChildren) => <IntlWrapper>{children}</IntlWrapper>,
62
+ });
71
63
  expect(screen.getByText('Signature required')).toBeInTheDocument();
72
64
  });
73
65
 
@@ -77,11 +69,9 @@ describe('<DashboardItemOrder/>', () => {
77
69
  contract: ContractFactory({ student_signed_on: new Date().toISOString() }).one(),
78
70
  certificate_id: undefined,
79
71
  }).one();
80
- render(
81
- <Wrapper>
82
- <OrderStateLearnerMessage order={order} />
83
- </Wrapper>,
84
- );
72
+ render(<OrderStateLearnerMessage order={order} />, {
73
+ wrapper: ({ children }: PropsWithChildren) => <IntlWrapper>{children}</IntlWrapper>,
74
+ });
85
75
  expect(
86
76
  screen.getByText(intl.formatMessage(messages.statusOnGoing), {
87
77
  exact: false,
@@ -98,11 +88,9 @@ describe('<DashboardItemOrder/>', () => {
98
88
  }).one(),
99
89
  certificate_id: 'FAKE_CERTIFICATE_ID',
100
90
  }).one();
101
- render(
102
- <Wrapper>
103
- <OrderStateLearnerMessage order={order} />
104
- </Wrapper>,
105
- );
91
+ render(<OrderStateLearnerMessage order={order} />, {
92
+ wrapper: ({ children }: PropsWithChildren) => <IntlWrapper>{children}</IntlWrapper>,
93
+ });
106
94
  expect(
107
95
  screen.getByText(intl.formatMessage(messages.statusCompleted), {
108
96
  exact: false,
@@ -1,21 +1,19 @@
1
1
  import React, { PropsWithChildren } from 'react';
2
- import { render, screen } from '@testing-library/react';
3
- import { IntlProvider, createIntl } from 'react-intl';
2
+ import { screen } from '@testing-library/react';
3
+ import { createIntl } from 'react-intl';
4
4
  import {
5
5
  ContractDefinitionFactory,
6
6
  ContractFactory,
7
7
  CredentialOrderFactory,
8
8
  } from 'utils/test/factories/joanie';
9
9
  import { OrderState } from 'types/Joanie';
10
+ import { render } from 'utils/test/render';
11
+ import { IntlWrapper } from 'utils/test/wrappers/IntlWrapper';
10
12
  import OrderStateTeacherMessage, { messages } from '.';
11
13
 
12
14
  const intl = createIntl({ locale: 'en' });
13
15
 
14
16
  describe('<OrderStateTeacherMessage/>', () => {
15
- const Wrapper = ({ children }: PropsWithChildren) => (
16
- <IntlProvider locale="en">{children}</IntlProvider>
17
- );
18
-
19
17
  it.each([
20
18
  [OrderState.DRAFT, 'Pending'],
21
19
  [OrderState.SUBMITTED, 'Pending'],
@@ -25,11 +23,9 @@ describe('<OrderStateTeacherMessage/>', () => {
25
23
  'should display message from order state: %s when order have no contract',
26
24
  (state, expectedMessage) => {
27
25
  const order = CredentialOrderFactory({ state }).one();
28
- render(
29
- <Wrapper>
30
- <OrderStateTeacherMessage order={order} />
31
- </Wrapper>,
32
- );
26
+ render(<OrderStateTeacherMessage order={order} />, {
27
+ wrapper: ({ children }: PropsWithChildren) => <IntlWrapper>{children}</IntlWrapper>,
28
+ });
33
29
  expect(screen.getByText(expectedMessage)).toBeInTheDocument();
34
30
  },
35
31
  );
@@ -47,12 +43,13 @@ describe('<OrderStateTeacherMessage/>', () => {
47
43
  contract: ContractFactory().one(),
48
44
  }).one();
49
45
  render(
50
- <Wrapper>
51
- <OrderStateTeacherMessage
52
- order={orderWithContract}
53
- contractDefinition={ContractDefinitionFactory().one()}
54
- />
55
- </Wrapper>,
46
+ <OrderStateTeacherMessage
47
+ order={orderWithContract}
48
+ contractDefinition={ContractDefinitionFactory().one()}
49
+ />,
50
+ {
51
+ wrapper: ({ children }: PropsWithChildren) => <IntlWrapper>{children}</IntlWrapper>,
52
+ },
56
53
  );
57
54
  expect(screen.getByText(expectedMessage)).toBeInTheDocument();
58
55
  },
@@ -66,11 +63,9 @@ describe('<OrderStateTeacherMessage/>', () => {
66
63
 
67
64
  const contractDefinition = ContractDefinitionFactory().one();
68
65
 
69
- render(
70
- <Wrapper>
71
- <OrderStateTeacherMessage order={order} contractDefinition={contractDefinition} />
72
- </Wrapper>,
73
- );
66
+ render(<OrderStateTeacherMessage order={order} contractDefinition={contractDefinition} />, {
67
+ wrapper: ({ children }: PropsWithChildren) => <IntlWrapper>{children}</IntlWrapper>,
68
+ });
74
69
  expect(screen.getByText("Pending for learner's signature")).toBeInTheDocument();
75
70
  });
76
71
 
@@ -83,11 +78,9 @@ describe('<OrderStateTeacherMessage/>', () => {
83
78
  }).one();
84
79
  const contractDefinition = ContractDefinitionFactory().one();
85
80
 
86
- render(
87
- <Wrapper>
88
- <OrderStateTeacherMessage order={order} contractDefinition={contractDefinition} />
89
- </Wrapper>,
90
- );
81
+ render(<OrderStateTeacherMessage order={order} contractDefinition={contractDefinition} />, {
82
+ wrapper: ({ children }: PropsWithChildren) => <IntlWrapper>{children}</IntlWrapper>,
83
+ });
91
84
  expect(screen.getByText('To be signed')).toBeInTheDocument();
92
85
  });
93
86
 
@@ -96,11 +89,9 @@ describe('<OrderStateTeacherMessage/>', () => {
96
89
  state: OrderState.VALIDATED,
97
90
  certificate_id: undefined,
98
91
  }).one();
99
- render(
100
- <Wrapper>
101
- <OrderStateTeacherMessage order={order} />
102
- </Wrapper>,
103
- );
92
+ render(<OrderStateTeacherMessage order={order} />, {
93
+ wrapper: ({ children }: PropsWithChildren) => <IntlWrapper>{children}</IntlWrapper>,
94
+ });
104
95
  expect(
105
96
  screen.getByText(intl.formatMessage(messages.statusOnGoing), {
106
97
  exact: false,
@@ -113,11 +104,9 @@ describe('<OrderStateTeacherMessage/>', () => {
113
104
  state: OrderState.VALIDATED,
114
105
  certificate_id: 'FAKE_CERTIFICATE_ID',
115
106
  }).one();
116
- render(
117
- <Wrapper>
118
- <OrderStateTeacherMessage order={order} />
119
- </Wrapper>,
120
- );
107
+ render(<OrderStateTeacherMessage order={order} />, {
108
+ wrapper: ({ children }: PropsWithChildren) => <IntlWrapper>{children}</IntlWrapper>,
109
+ });
121
110
  expect(
122
111
  screen.getByText(intl.formatMessage(messages.statusCompleted), {
123
112
  exact: false,