richie 2.25.0b2.dev97__py2.py3-none-any.whl → 2.25.0b2.dev101__py2.py3-none-any.whl

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.

Potentially problematic release.


This version of richie might be problematic. Click here for more details.

Files changed (37) hide show
  1. frontend/jest/setup.ts +10 -0
  2. frontend/js/components/ContractFrame/AbstractContractFrame.spec.tsx +0 -6
  3. frontend/js/components/DjangoCMSTemplate/index.spec.tsx +2 -2
  4. frontend/js/components/Modal/index.spec.tsx +0 -6
  5. frontend/js/components/PurchaseButton/index.spec.tsx +0 -7
  6. frontend/js/components/SaleTunnel/index.spec.tsx +0 -7
  7. frontend/js/components/SignContractButton/index.omniscientOrders.spec.tsx +0 -6
  8. frontend/js/components/SignContractButton/index.spec.tsx +0 -6
  9. frontend/js/pages/DashboardContracts/index.spec.tsx +0 -7
  10. frontend/js/pages/DashboardOrderLayout/index.spec.tsx +0 -6
  11. frontend/js/pages/TeacherDashboardContractsLayout/TeacherDashboardContracts/index.spec.tsx +0 -6
  12. frontend/js/pages/TeacherDashboardContractsLayout/components/ContractActionsBar/index.spec.tsx +0 -6
  13. frontend/js/pages/TeacherDashboardContractsLayout/components/SignOrganizationContractButton/index.spec.tsx +0 -6
  14. frontend/js/utils/test/render.tsx +72 -0
  15. frontend/js/utils/test/wrappers/IntlWrapper.tsx +23 -0
  16. frontend/js/utils/test/wrappers/JoanieAppWrapper.tsx +42 -0
  17. frontend/js/utils/test/wrappers/PresentationalAppWrapper.tsx +18 -0
  18. frontend/js/utils/test/wrappers/ReactQueryWrapper.tsx +16 -0
  19. frontend/js/utils/test/wrappers/RouterWrapper.tsx +29 -0
  20. frontend/js/utils/test/wrappers/types.ts +26 -0
  21. frontend/js/widgets/Dashboard/components/DashboardItem/Contract/index.spec.tsx +0 -4
  22. frontend/js/widgets/Dashboard/components/DashboardItem/Enrollment/ProductCertificateFooter/index.spec.tsx +0 -7
  23. frontend/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrder.spec.tsx +0 -6
  24. frontend/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderContract.spec.tsx +0 -6
  25. frontend/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderContract.useUnionResource.cache.spec.tsx +0 -6
  26. frontend/js/widgets/Dashboard/components/NavigateWithParams/index.spec.tsx +31 -40
  27. frontend/js/widgets/Dashboard/components/TeacherDashboardProfileSidebar/components/OrganizationLinks/index.spec.tsx +9 -17
  28. frontend/js/widgets/Dashboard/components/TeacherDashboardProfileSidebar/index.spec.tsx +10 -44
  29. frontend/js/widgets/Search/components/SearchFilterGroup/index.spec.tsx +0 -5
  30. frontend/js/widgets/Search/components/SearchFilterGroupModal/index.spec.tsx +0 -5
  31. frontend/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/index.spec.tsx +0 -7
  32. {richie-2.25.0b2.dev97.dist-info → richie-2.25.0b2.dev101.dist-info}/METADATA +1 -1
  33. {richie-2.25.0b2.dev97.dist-info → richie-2.25.0b2.dev101.dist-info}/RECORD +37 -30
  34. {richie-2.25.0b2.dev97.dist-info → richie-2.25.0b2.dev101.dist-info}/LICENSE +0 -0
  35. {richie-2.25.0b2.dev97.dist-info → richie-2.25.0b2.dev101.dist-info}/WHEEL +0 -0
  36. {richie-2.25.0b2.dev97.dist-info → richie-2.25.0b2.dev101.dist-info}/top_level.txt +0 -0
  37. {richie-2.25.0b2.dev97.dist-info → richie-2.25.0b2.dev101.dist-info}/zip-safe +0 -0
frontend/jest/setup.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  // Extend jest matchers with jest-dom's
2
2
  import '@testing-library/jest-dom';
3
+ import fetchMock from 'fetch-mock';
3
4
  import { Request, Response } from 'node-fetch';
4
5
  import { FactoryConfig } from 'utils/test/factories/factories';
5
6
 
@@ -24,6 +25,15 @@ RESET_MODULE_EXCEPTIONS.forEach((moduleName) => {
24
25
  });
25
26
  });
26
27
 
28
+ beforeAll(() => {
29
+ // As dialog is rendered through a Portal, we have to add the DOM element in which the dialog will be rendered.
30
+ const modalExclude = document.createElement('div');
31
+ modalExclude.setAttribute('id', 'modal-exclude');
32
+ document.body.appendChild(modalExclude);
33
+ });
34
+
27
35
  afterEach(() => {
28
36
  FactoryConfig.resetUniqueStore();
37
+ fetchMock.restore();
38
+ jest.clearAllMocks();
29
39
  });
@@ -42,12 +42,6 @@ describe('<AbstractContractFrame />', () => {
42
42
  );
43
43
  };
44
44
 
45
- beforeAll(() => {
46
- const modalExclude = document.createElement('div');
47
- modalExclude.setAttribute('id', 'modal-exclude');
48
- document.body.appendChild(modalExclude);
49
- });
50
-
51
45
  beforeEach(() => {
52
46
  // SessionProvider api calls
53
47
  fetchMock.get('https://joanie.endpoint/api/v1.0/addresses/', []);
@@ -27,7 +27,7 @@ describe('DjangoCMSTemplate', () => {
27
27
 
28
28
  expect(initMock).not.toHaveBeenCalled();
29
29
  render(<Wrapper />);
30
- const expected = `<div><template class="cms-plugin cms-plugin-start plugin"></template>Hello world<template class="cms-plugin cms-plugin-end plugin"></template></div>`;
30
+ const expected = `<div id=\"modal-exclude\"></div><div><template class="cms-plugin cms-plugin-start plugin"></template>Hello world<template class="cms-plugin cms-plugin-end plugin"></template></div>`;
31
31
  expect(document.body.innerHTML).toEqual(expected);
32
32
  await waitFor(() => expect(initMock).toHaveBeenCalled());
33
33
  });
@@ -40,7 +40,7 @@ describe('DjangoCMSTemplate', () => {
40
40
  };
41
41
 
42
42
  render(<Wrapper />);
43
- const expected = `<div>Hello world</div>`;
43
+ const expected = `<div id=\"modal-exclude\"></div><div>Hello world</div>`;
44
44
  expect(document.body.innerHTML).toEqual(expected);
45
45
  });
46
46
  });
@@ -3,12 +3,6 @@ import { IntlProvider } from 'react-intl';
3
3
  import { Modal } from '.';
4
4
 
5
5
  describe('<Modal />', () => {
6
- beforeEach(() => {
7
- const modalExclude = document.createElement('div');
8
- modalExclude.setAttribute('id', 'modal-exclude');
9
- document.body.appendChild(modalExclude);
10
- });
11
-
12
6
  it('merges custom classNames of type string with the default classes', () => {
13
7
  render(
14
8
  <IntlProvider locale="en">
@@ -28,13 +28,6 @@ jest.mock('utils/context', () => ({
28
28
  }));
29
29
 
30
30
  describe('PurchaseButton', () => {
31
- beforeAll(() => {
32
- // As dialog is rendered through a Portal, we have to add the DOM element in which the dialog will be rendered.
33
- const modalExclude = document.createElement('div');
34
- modalExclude.setAttribute('id', 'modal-exclude');
35
- document.body.appendChild(modalExclude);
36
- });
37
-
38
31
  afterEach(() => {
39
32
  fetchMock.restore();
40
33
  });
@@ -36,13 +36,6 @@ jest.mock('utils/context', () => ({
36
36
  }));
37
37
 
38
38
  describe('SaleTunnel', () => {
39
- beforeAll(() => {
40
- // As dialog is rendered through a Portal, we have to add the DOM element in which the dialog will be rendered.
41
- const modalExclude = document.createElement('div');
42
- modalExclude.setAttribute('id', 'modal-exclude');
43
- document.body.appendChild(modalExclude);
44
- });
45
-
46
39
  afterEach(() => {
47
40
  fetchMock.restore();
48
41
  });
@@ -40,12 +40,6 @@ describe('<SignContractButton/>', () => {
40
40
  );
41
41
  };
42
42
 
43
- beforeAll(() => {
44
- const modalExclude = document.createElement('div');
45
- modalExclude.setAttribute('id', 'modal-exclude');
46
- document.body.appendChild(modalExclude);
47
- });
48
-
49
43
  beforeEach(() => {
50
44
  // JoanieSession api omniscient calls
51
45
  fetchMock.get('https://joanie.endpoint/api/v1.0/addresses/', []);
@@ -39,12 +39,6 @@ interface FromContractTestData {
39
39
  }
40
40
 
41
41
  describe('<SignContractButton/>', () => {
42
- beforeAll(() => {
43
- const modalExclude = document.createElement('div');
44
- modalExclude.setAttribute('id', 'modal-exclude');
45
- document.body.appendChild(modalExclude);
46
- });
47
-
48
42
  describe.each<FromOrderTestData | FromContractTestData>([
49
43
  {
50
44
  testCase: TestCase.FROM_ORDER_WITH_CONTRACT,
@@ -53,13 +53,6 @@ describe('<DashboardContract/>', () => {
53
53
  </QueryClientProvider>
54
54
  );
55
55
 
56
- beforeAll(() => {
57
- // As dialog is rendered through a Portal, we have to add the DOM element in which the dialog will be rendered.
58
- const modalExclude = document.createElement('div');
59
- modalExclude.setAttribute('id', 'modal-exclude');
60
- document.body.appendChild(modalExclude);
61
- });
62
-
63
56
  beforeEach(() => {
64
57
  fetchMock.get('https://joanie.endpoint/api/v1.0/addresses/', []);
65
58
  fetchMock.get('https://joanie.endpoint/api/v1.0/credit-cards/', []);
@@ -33,12 +33,6 @@ describe('<DashboardOrderLayout />', () => {
33
33
  );
34
34
  };
35
35
 
36
- beforeAll(() => {
37
- const modalExclude = document.createElement('div');
38
- modalExclude.setAttribute('id', 'modal-exclude');
39
- document.body.appendChild(modalExclude);
40
- });
41
-
42
36
  beforeEach(() => {
43
37
  fetchMock.get('https://joanie.endpoint/api/v1.0/addresses/', []);
44
38
  fetchMock.get('https://joanie.endpoint/api/v1.0/credit-cards/', []);
@@ -53,12 +53,6 @@ const Wrapper = ({ path, initialEntry }: { path: string; initialEntry: string })
53
53
  };
54
54
 
55
55
  describe('pages/TeacherDashboardContracts', () => {
56
- beforeAll(() => {
57
- const modalExclude = document.createElement('div');
58
- modalExclude.setAttribute('id', 'modal-exclude');
59
- document.body.appendChild(modalExclude);
60
- });
61
-
62
56
  beforeEach(() => {
63
57
  // Joanie providers calls
64
58
  fetchMock.get('https://joanie.test/api/v1.0/orders/', []);
@@ -58,12 +58,6 @@ describe('TeacherDashboardContractsLayout/ContractActionsBar', () => {
58
58
  );
59
59
  };
60
60
 
61
- beforeAll(() => {
62
- const modalExclude = document.createElement('div');
63
- modalExclude.setAttribute('id', 'modal-exclude');
64
- document.body.appendChild(modalExclude);
65
- });
66
-
67
61
  beforeEach(() => {
68
62
  // useTeacherContractsToSign mocked values
69
63
  mockCanSignContracts = true;
@@ -29,12 +29,6 @@ describe('TeacherDashboardContractsLayout/SignOrganizationContractButton', () =>
29
29
  );
30
30
  };
31
31
 
32
- beforeAll(() => {
33
- const modalExclude = document.createElement('div');
34
- modalExclude.setAttribute('id', 'modal-exclude');
35
- document.body.appendChild(modalExclude);
36
- });
37
-
38
32
  afterEach(() => {
39
33
  fetchMock.restore();
40
34
  });
@@ -0,0 +1,72 @@
1
+ import { RenderResult, screen, render as testingLibraryRender } from '@testing-library/react';
2
+ import React, { ReactElement } from 'react';
3
+ import { Nullable } from 'types/utils';
4
+ import { AppWrapperProps } from './wrappers/types';
5
+ import { JoanieAppWrapper } from './wrappers/JoanieAppWrapper';
6
+
7
+ // ------- setup -------
8
+
9
+ type CustomRenderResult = Omit<RenderResult, 'rerender'> & {
10
+ elementContainer: Nullable<HTMLElement>;
11
+ rerender: (
12
+ element: ReactElement,
13
+ options?: Partial<Omit<AppWrapperProps, 'testingLibraryOptions'>>,
14
+ ) => void;
15
+ };
16
+
17
+ type RenderFunction = (
18
+ element: ReactElement,
19
+ options?: Partial<AppWrapperProps>,
20
+ ) => CustomRenderResult;
21
+
22
+ /**
23
+ *
24
+ * Custom render method base on react-testing-library render method.
25
+ * This will render {@param element} in JSDom and read options to configure context and render.
26
+ * It also override react-testing-library rerender method to also wrap the provided component in
27
+ * the same contexts.
28
+ *
29
+ * The provided {@param element} is to be wrapped in :
30
+ * - react router (react-router-dom)
31
+ * - react i18n context (react-intl)
32
+ * - query context (react-query)
33
+ *
34
+ * This function uses default values:
35
+ * options.intlOptions.locale : 'en'
36
+ * options.routerOptions.path : '/'
37
+ * options.queryOptions.client : {@see queryClient}
38
+ *
39
+ *
40
+ * @param element element to wrap in application contexts and test
41
+ * @param options options to configure and/or customize wrapped context for the test {@see RenderOptions}
42
+ * @returns an object with all values return by react-testing-library render methods
43
+ * and an other property {@property elementContainer} refering to the exact element containing the {@param element} to test
44
+ *
45
+ *
46
+ * @example
47
+ * customRender(<SomeComponentToTest />);
48
+ * customRender(<SomeComponentToTest />, { wrapper: WrapperPresentationalApp });
49
+ */
50
+ export const render: RenderFunction = (
51
+ element: ReactElement,
52
+ options?: Partial<AppWrapperProps>,
53
+ ) => {
54
+ const Wrapper = options?.wrapper === undefined ? JoanieAppWrapper : options?.wrapper;
55
+ const renderResult = testingLibraryRender(
56
+ Wrapper === null ? element : <Wrapper {...options}>{element}</Wrapper>,
57
+ options?.testingLibraryOptions,
58
+ );
59
+
60
+ return {
61
+ ...renderResult,
62
+ elementContainer: screen.queryByTestId('test-component-container'),
63
+ rerender: (
64
+ rerenderElement: ReactElement,
65
+ rerenderOptions?: Partial<Omit<AppWrapperProps, 'testingLibraryOptions'>>,
66
+ ) => {
67
+ return renderResult.rerender(
68
+ Wrapper === null ? element : <Wrapper {...rerenderOptions}>{rerenderElement}</Wrapper>,
69
+ );
70
+ },
71
+ };
72
+ };
@@ -0,0 +1,23 @@
1
+ import { ComponentProps, PropsWithChildren } from 'react';
2
+ import { IntlProvider, ReactIntlErrorCode } from 'react-intl';
3
+
4
+ export interface IntlWrapperProps extends PropsWithChildren, ComponentProps<typeof IntlProvider> {}
5
+
6
+ export const IntlWrapper = ({ children, ...options }: IntlWrapperProps) => (
7
+ <IntlProvider
8
+ onError={(err) => {
9
+ // https://github.com/formatjs/formatjs/issues/465
10
+ if (
11
+ err.code === ReactIntlErrorCode.MISSING_TRANSLATION ||
12
+ err.code === ReactIntlErrorCode.MISSING_DATA
13
+ ) {
14
+ return;
15
+ }
16
+ throw err;
17
+ }}
18
+ {...options}
19
+ locale={options?.locale || 'en'}
20
+ >
21
+ {children}
22
+ </IntlProvider>
23
+ );
@@ -0,0 +1,42 @@
1
+ import { CunninghamProvider } from '@openfun/cunningham-react';
2
+ import { PropsWithChildren } from 'react';
3
+ import fetchMock from 'fetch-mock';
4
+ import JoanieSessionProvider from 'contexts/SessionContext/JoanieSessionProvider';
5
+ import { IntlWrapper } from './IntlWrapper';
6
+ import { ReactQueryWrapper } from './ReactQueryWrapper';
7
+ import { RouterWrapper } from './RouterWrapper';
8
+ import { AppWrapperProps } from './types';
9
+
10
+ export const setupJoanieSession = () => {
11
+ beforeEach(() => {
12
+ // JoanieSessionProvider inital requests
13
+ fetchMock.get('https://joanie.endpoint/api/v1.0/orders/', []);
14
+ fetchMock.get('https://joanie.endpoint/api/v1.0/addresses/', []);
15
+ fetchMock.get('https://joanie.endpoint/api/v1.0/credit-cards/', []);
16
+ });
17
+
18
+ return {
19
+ nbSessionApiRequest: 3,
20
+ };
21
+ };
22
+
23
+ export const JoanieSessionWrapper = ({ children }: PropsWithChildren) => {
24
+ return <JoanieSessionProvider>{children}</JoanieSessionProvider>;
25
+ };
26
+
27
+ export const JoanieAppWrapper = ({
28
+ children,
29
+ options,
30
+ }: PropsWithChildren<{ options?: AppWrapperProps }>) => {
31
+ return (
32
+ <IntlWrapper {...(options?.intlOptions || { locale: 'en' })}>
33
+ <CunninghamProvider>
34
+ <ReactQueryWrapper {...(options?.queryOptions || {})}>
35
+ <JoanieSessionWrapper>
36
+ <RouterWrapper {...options?.routerOptions}>{children}</RouterWrapper>
37
+ </JoanieSessionWrapper>
38
+ </ReactQueryWrapper>
39
+ </CunninghamProvider>
40
+ </IntlWrapper>
41
+ );
42
+ };
@@ -0,0 +1,18 @@
1
+ import { PropsWithChildren } from 'react';
2
+ import { CunninghamProvider } from '@openfun/cunningham-react';
3
+ import { IntlWrapper } from './IntlWrapper';
4
+ import { RouterWrapper } from './RouterWrapper';
5
+ import { AppWrapperProps } from './types';
6
+
7
+ export const PresentationalAppWrapper = ({
8
+ children,
9
+ options,
10
+ }: PropsWithChildren<{ options?: AppWrapperProps }>) => {
11
+ return (
12
+ <IntlWrapper {...(options?.intlOptions || { locale: 'en' })}>
13
+ <CunninghamProvider>
14
+ <RouterWrapper {...options?.routerOptions}>{children}</RouterWrapper>
15
+ </CunninghamProvider>
16
+ </IntlWrapper>
17
+ );
18
+ };
@@ -0,0 +1,16 @@
1
+ import { QueryClient } from '@tanstack/query-core';
2
+ import { QueryClientProvider } from '@tanstack/react-query';
3
+ import { PropsWithChildren } from 'react';
4
+ import { createTestQueryClient } from '../createTestQueryClient';
5
+
6
+ interface ReactQueryWrapperProps extends PropsWithChildren {
7
+ client?: QueryClient;
8
+ }
9
+
10
+ export const ReactQueryWrapper = ({ children, client }: ReactQueryWrapperProps) => {
11
+ return (
12
+ <QueryClientProvider client={client ?? createTestQueryClient({ user: true })}>
13
+ {children}
14
+ </QueryClientProvider>
15
+ );
16
+ };
@@ -0,0 +1,29 @@
1
+ import { PropsWithChildren } from 'react';
2
+ import { RouteObject, RouterProvider, createMemoryRouter } from 'react-router-dom';
3
+ import { Maybe } from 'types/utils';
4
+
5
+ export interface RouterWrapperProps extends PropsWithChildren {
6
+ routes?: RouteObject[];
7
+ path?: string;
8
+ initialEntries?: Maybe<string[]>;
9
+ }
10
+
11
+ export const RouterWrapper = ({
12
+ children,
13
+ routes = [],
14
+ path = '/',
15
+ initialEntries,
16
+ }: RouterWrapperProps) => {
17
+ const router = createMemoryRouter(
18
+ routes.length > 0
19
+ ? routes
20
+ : [
21
+ {
22
+ path,
23
+ element: children,
24
+ },
25
+ ],
26
+ { initialEntries: initialEntries || [path] },
27
+ );
28
+ return <RouterProvider router={router} />;
29
+ };
@@ -0,0 +1,26 @@
1
+ import { PropsWithChildren } from 'react';
2
+ import { QueryClient } from '@tanstack/query-core';
3
+ import { RenderOptions as TestingLibraryRenderOptions } from '@testing-library/react';
4
+ import { Nullable } from 'types/utils';
5
+ import { IntlWrapperProps } from './IntlWrapper';
6
+ import { RouterWrapperProps } from './RouterWrapper';
7
+
8
+ interface QueryOptions {
9
+ client: QueryClient;
10
+ }
11
+
12
+ /**
13
+ * Options to configure the render of a component for a test
14
+ *
15
+ * @property testingLibraryOptions options provided by react-testing-library to the render method
16
+ * @property intlOptions options to configure i18n context
17
+ * @property routerOptions options to configure router and routes in the test
18
+ * @property queryOptions options to configure a custom client used by react-query for a test
19
+ */
20
+ export interface AppWrapperProps {
21
+ wrapper?: Nullable<(props: PropsWithChildren<{ options?: AppWrapperProps }>) => JSX.Element>;
22
+ intlOptions?: IntlWrapperProps;
23
+ queryOptions?: QueryOptions;
24
+ routerOptions?: RouterWrapperProps;
25
+ testingLibraryOptions?: TestingLibraryRenderOptions;
26
+ }
@@ -50,10 +50,6 @@ describe.each([
50
50
  beforeAll(() => {
51
51
  // eslint-disable-next-line compat/compat
52
52
  URL.createObjectURL = jest.fn();
53
-
54
- const modalExclude = document.createElement('div');
55
- modalExclude.setAttribute('id', 'modal-exclude');
56
- document.body.appendChild(modalExclude);
57
53
  });
58
54
 
59
55
  beforeEach(() => {
@@ -67,13 +67,6 @@ describe('<ProductCertificateFooter/>', () => {
67
67
  let product: CertificateProduct;
68
68
  let course: CourseLight;
69
69
 
70
- beforeAll(() => {
71
- // As dialog is rendered through a Portal, we have to add the DOM element in which the dialog will be rendered.
72
- const modalExclude = document.createElement('div');
73
- modalExclude.setAttribute('id', 'modal-exclude');
74
- document.body.appendChild(modalExclude);
75
- });
76
-
77
70
  beforeEach(() => {
78
71
  fetchMock.get('https://joanie.endpoint.test/api/v1.0/addresses/', []);
79
72
  fetchMock.get('https://joanie.endpoint.test/api/v1.0/credit-cards/', []);
@@ -83,12 +83,6 @@ describe('<DashboardItemOrder/>', () => {
83
83
  );
84
84
  };
85
85
 
86
- beforeAll(() => {
87
- const modalExclude = document.createElement('div');
88
- modalExclude.setAttribute('id', 'modal-exclude');
89
- document.body.appendChild(modalExclude);
90
- });
91
-
92
86
  beforeEach(() => {
93
87
  fetchMock.get('https://joanie.endpoint/api/v1.0/addresses/', []);
94
88
  fetchMock.get('https://joanie.endpoint/api/v1.0/credit-cards/', []);
@@ -55,12 +55,6 @@ describe('<DashboardItemOrder/> Contract', () => {
55
55
  );
56
56
  };
57
57
 
58
- beforeAll(() => {
59
- const modalExclude = document.createElement('div');
60
- modalExclude.setAttribute('id', 'modal-exclude');
61
- document.body.appendChild(modalExclude);
62
- });
63
-
64
58
  beforeEach(() => {
65
59
  fetchMock.get('https://joanie.endpoint/api/v1.0/addresses/', []);
66
60
  fetchMock.get('https://joanie.endpoint/api/v1.0/credit-cards/', []);
@@ -47,12 +47,6 @@ describe('<DashboardItemOrder/> Contract', () => {
47
47
  );
48
48
  };
49
49
 
50
- beforeAll(() => {
51
- const modalExclude = document.createElement('div');
52
- modalExclude.setAttribute('id', 'modal-exclude');
53
- document.body.appendChild(modalExclude);
54
- });
55
-
56
50
  beforeEach(() => {
57
51
  jest.useFakeTimers();
58
52
  jest.clearAllTimers();
@@ -1,7 +1,9 @@
1
- import { render, screen } from '@testing-library/react';
2
- import { createMemoryRouter, Outlet, RouterProvider } from 'react-router-dom';
1
+ import { screen } from '@testing-library/react';
2
+ import { Outlet } from 'react-router-dom';
3
3
  import { RichieContextFactory as mockRichieContextFactory } from 'utils/test/factories/richie';
4
4
  import LocationDisplay from 'utils/test/LocationDisplay';
5
+ import { render } from 'utils/test/render';
6
+ import { RouterWrapper } from 'utils/test/wrappers/RouterWrapper';
5
7
  import NavigateWithParams from '.';
6
8
 
7
9
  jest.mock('utils/context', () => ({
@@ -15,46 +17,35 @@ jest.mock('utils/indirection/window', () => ({
15
17
  },
16
18
  }));
17
19
 
18
- interface RenderTestRouterProps {
19
- url?: string;
20
- }
21
-
22
- const renderTestRouter = ({ url = '/myTestId' }: RenderTestRouterProps = {}) => {
23
- const routes = [
24
- {
25
- path: '/:testId',
26
- element: (
27
- <div>
28
- <h1>NavigateWithParams test</h1>
29
- <Outlet />
30
- </div>
31
- ),
32
- children: [
33
- {
34
- index: true,
35
- element: <NavigateWithParams to="/:testId/childRoute" replace />,
36
- },
37
- {
38
- path: '/:testId/childRoute',
39
- element: (
40
- <div>
41
- <h2>NavigateWithParams child route</h2>
42
- <LocationDisplay />
43
- </div>
44
- ),
45
- },
46
- ],
47
- },
48
- ];
49
-
50
- const router = createMemoryRouter(routes, { initialEntries: [url] });
51
-
52
- return render(<RouterProvider router={router} />);
53
- };
54
-
55
20
  describe('<NavigateWithParams />', () => {
56
21
  it('should navigate with parent route params', async () => {
57
- renderTestRouter();
22
+ const routes = [
23
+ {
24
+ path: '/:testId',
25
+ element: (
26
+ <div>
27
+ <h1>NavigateWithParams test</h1>
28
+ <Outlet />
29
+ </div>
30
+ ),
31
+ children: [
32
+ {
33
+ index: true,
34
+ element: <NavigateWithParams to="/:testId/childRoute" replace />,
35
+ },
36
+ {
37
+ path: '/:testId/childRoute',
38
+ element: (
39
+ <div>
40
+ <h2>NavigateWithParams child route</h2>
41
+ <LocationDisplay />
42
+ </div>
43
+ ),
44
+ },
45
+ ],
46
+ },
47
+ ];
48
+ render(<RouterWrapper routes={routes} initialEntries={['/myTestId']} />, { wrapper: null });
58
49
  expect(await screen.findByRole('heading', { name: /NavigateWithParams test/ }));
59
50
  expect(screen.getByRole('heading', { name: /NavigateWithParams child route/ }));
60
51
  expect(screen.getByTestId('test-location-display')).toHaveTextContent('/myTestId/childRoute');
@@ -1,20 +1,16 @@
1
- import { render, screen } from '@testing-library/react';
2
- import { MemoryRouter } from 'react-router-dom';
3
- import { IntlProvider } from 'react-intl';
1
+ import { screen } from '@testing-library/react';
4
2
  import { OrganizationFactory } from 'utils/test/factories/joanie';
3
+ import { render } from 'utils/test/render';
4
+ import { PresentationalAppWrapper } from 'utils/test/wrappers/PresentationalAppWrapper';
5
5
  import OrganizationLinks from '.';
6
6
 
7
7
  describe('OrganizationLinks', () => {
8
8
  it('should render successfully organization with logo', () => {
9
9
  const organization = OrganizationFactory({ title: 'Organization 1' }).one();
10
10
 
11
- render(
12
- <IntlProvider locale="en">
13
- <MemoryRouter>
14
- <OrganizationLinks organizations={[organization]} />
15
- </MemoryRouter>
16
- </IntlProvider>,
17
- );
11
+ render(<OrganizationLinks organizations={[organization]} />, {
12
+ wrapper: PresentationalAppWrapper,
13
+ });
18
14
 
19
15
  // A link to the organization should be rendered
20
16
  const link = screen.getByRole('link', { name: 'Organization 1' });
@@ -34,13 +30,9 @@ describe('OrganizationLinks', () => {
34
30
  it('should render successfully organization with abbr', () => {
35
31
  const organization = OrganizationFactory({ title: 'Organization 1', logo: null }).one();
36
32
 
37
- render(
38
- <IntlProvider locale="en">
39
- <MemoryRouter>
40
- <OrganizationLinks organizations={[organization]} />
41
- </MemoryRouter>
42
- </IntlProvider>,
43
- );
33
+ render(<OrganizationLinks organizations={[organization]} />, {
34
+ wrapper: PresentationalAppWrapper,
35
+ });
44
36
 
45
37
  // A link to the organization should be rendered
46
38
  const link = screen.getByRole('link', { name: 'Organization 1' });
@@ -1,23 +1,15 @@
1
1
  import fetchMock from 'fetch-mock';
2
- import { MemoryRouter } from 'react-router-dom';
3
- import { render, screen } from '@testing-library/react';
4
- import { IntlProvider, createIntl } from 'react-intl';
5
- import { QueryClientProvider } from '@tanstack/react-query';
6
- import { PropsWithChildren } from 'react';
7
- import { CunninghamProvider } from '@openfun/cunningham-react';
8
- import {
9
- RichieContextFactory as mockRichieContextFactory,
10
- UserFactory,
11
- } from 'utils/test/factories/richie';
2
+ import { screen } from '@testing-library/react';
3
+ import { createIntl } from 'react-intl';
4
+ import { RichieContextFactory as mockRichieContextFactory } from 'utils/test/factories/richie';
12
5
  import {
13
6
  TEACHER_DASHBOARD_ROUTE_LABELS,
14
7
  TeacherDashboardPaths,
15
8
  } from 'widgets/Dashboard/utils/teacherRouteMessages';
16
- import { createTestQueryClient } from 'utils/test/createTestQueryClient';
17
- import JoanieSessionProvider from 'contexts/SessionContext/JoanieSessionProvider';
18
9
  import { OrganizationFactory } from 'utils/test/factories/joanie';
19
10
  import { messages as organizationLinksMessages } from 'widgets/Dashboard/components/TeacherDashboardProfileSidebar/components/OrganizationLinks';
20
-
11
+ import { render } from 'utils/test/render';
12
+ import { setupJoanieSession } from 'utils/test/wrappers/JoanieAppWrapper';
21
13
  import { TeacherDashboardProfileSidebar } from '.';
22
14
 
23
15
  jest.mock('utils/context', () => ({
@@ -37,39 +29,17 @@ jest.mock('utils/indirection/window', () => ({
37
29
  const intl = createIntl({ locale: 'en' });
38
30
 
39
31
  describe('<TeacherDashboardProfileSidebar/>', () => {
40
- const Wrapper = ({ children }: PropsWithChildren) => (
41
- <IntlProvider locale="en">
42
- <QueryClientProvider client={createTestQueryClient({ user: UserFactory().one() })}>
43
- <JoanieSessionProvider>
44
- <MemoryRouter>
45
- <CunninghamProvider>{children}</CunninghamProvider>
46
- </MemoryRouter>
47
- </JoanieSessionProvider>
48
- </QueryClientProvider>
49
- </IntlProvider>
50
- );
32
+ const joanieSessionData = setupJoanieSession();
33
+
51
34
  let nbApiRequest: number;
52
35
  beforeEach(() => {
53
36
  fetchMock.get('https://joanie.endpoint/api/v1.0/organizations/', []);
54
-
55
- // JoanieSessionProvider inital requests
56
- nbApiRequest = 3;
57
- fetchMock.get('https://joanie.endpoint/api/v1.0/orders/', []);
58
- fetchMock.get('https://joanie.endpoint/api/v1.0/addresses/', []);
59
- fetchMock.get('https://joanie.endpoint/api/v1.0/credit-cards/', []);
60
- });
61
- afterEach(() => {
62
- jest.clearAllMocks();
63
- fetchMock.restore();
37
+ nbApiRequest = joanieSessionData.nbSessionApiRequest;
64
38
  });
65
39
 
66
40
  it('should display menu items', async () => {
67
41
  nbApiRequest += 1; // call to organizations
68
- render(
69
- <Wrapper>
70
- <TeacherDashboardProfileSidebar />
71
- </Wrapper>,
72
- );
42
+ render(<TeacherDashboardProfileSidebar />);
73
43
 
74
44
  expect(
75
45
  screen.getByRole('link', {
@@ -90,11 +60,7 @@ describe('<TeacherDashboardProfileSidebar/>', () => {
90
60
  overwriteRoutes: true,
91
61
  });
92
62
  nbApiRequest += 1; // call to organizations
93
- render(
94
- <Wrapper>
95
- <TeacherDashboardProfileSidebar />
96
- </Wrapper>,
97
- );
63
+ render(<TeacherDashboardProfileSidebar />);
98
64
  expect(await screen.findByTestId('organization-links')).toBeInTheDocument();
99
65
  expect(fetchMock.calls()).toHaveLength(nbApiRequest);
100
66
 
@@ -53,11 +53,6 @@ describe('widgets/Search/components/SearchFilterGroup', () => {
53
53
  };
54
54
 
55
55
  beforeEach(jest.resetAllMocks);
56
- beforeEach(() => {
57
- const modalExclude = document.createElement('div');
58
- modalExclude.setAttribute('id', 'modal-exclude');
59
- document.body.appendChild(modalExclude);
60
- });
61
56
 
62
57
  it('renders the name of the filter with the values as SearchFilters', () => {
63
58
  render(
@@ -63,11 +63,6 @@ describe('<SearchFilterGroupModal />', () => {
63
63
 
64
64
  beforeEach(() => fetchMock.restore());
65
65
  beforeEach(jest.resetAllMocks);
66
- beforeEach(() => {
67
- const modalExclude = document.createElement('div');
68
- modalExclude.setAttribute('id', 'modal-exclude');
69
- document.body.appendChild(modalExclude);
70
- });
71
66
 
72
67
  it('renders a button with a modal to search values for a given filter', async () => {
73
68
  {
@@ -71,13 +71,6 @@ describe('CourseProductItem', () => {
71
71
  style: 'currency',
72
72
  }).format(price);
73
73
 
74
- beforeAll(() => {
75
- // As dialog is rendered through a Portal, we have to add the DOM element in which the dialog will be rendered.
76
- const modalExclude = document.createElement('div');
77
- modalExclude.setAttribute('id', 'modal-exclude');
78
- document.body.appendChild(modalExclude);
79
- });
80
-
81
74
  beforeEach(() => {
82
75
  // JoanieSessionProvider requests
83
76
  fetchMock.get('https://joanie.test/api/v1.0/addresses/', []);
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: richie
3
- Version: 2.25.0b2.dev97
3
+ Version: 2.25.0b2.dev101
4
4
  Summary: A CMS to build learning portals for open education
5
5
  Author-email: "Open FUN (France Université Numérique)" <fun.dev@fun-mooc.fr>
6
6
  License: MIT License
@@ -29,7 +29,7 @@ frontend/i18n/locales/pt-PT.json,sha256=01gz1z8D4gy_A-dunKXjbJed4liqTU_UF00YM5pF
29
29
  frontend/i18n/locales/ru-RU.json,sha256=NH1g2engTLnzB5uTSf6eveesyfvKlSZl71MSDNRtggE,83844
30
30
  frontend/i18n/locales/vi-VN.json,sha256=VpAQVbjtkDmPzK_-QwtIeY7UJh8b2N5smZSSRaNT9jQ,81205
31
31
  frontend/jest/resolver.js,sha256=4z7-wQkCnESJaYqydt6N6YWXt9NMpU4XnmU4yjYEZ-E,1537
32
- frontend/jest/setup.ts,sha256=CY6k1EgU5-_-IgglmJapGw31KaWoan2918mQYSqdTRk,888
32
+ frontend/jest/setup.ts,sha256=HxjhHWrbEn8z1XDSSNhS6lgPYAf9N6IWbSZUPgmWRgI,1257
33
33
  frontend/js/index.tsx,sha256=dGLR5CGfkrNUHoVeZaIpZSG3RiiZ-xeMHldid8_3pXY,5310
34
34
  frontend/js/mockServiceWorker.js,sha256=BY7UoAMYNurVdR_7pjvJr28sweeSS1gnqKIpNSeYAQA,8196
35
35
  frontend/js/settings.dev.dist.ts,sha256=ogD8HXCS-1GScZwc4tJA_QO9PR-45sIGFgrz8FYEgWk,112
@@ -81,7 +81,7 @@ frontend/js/components/Badge/index.tsx,sha256=VjbN3ijNtCOhQkR3Z5r0XbgD4pCLFpVMBL
81
81
  frontend/js/components/Banner/index.spec.tsx,sha256=phIllm_buSpppMpXoxz6spGeh62tSi4MRZGEwLMixvY,1113
82
82
  frontend/js/components/Banner/index.stories.tsx,sha256=6_8yv8_WLlca2W-gRF1xyrmVXWcYK587OxErRt-QtjQ,563
83
83
  frontend/js/components/Banner/index.tsx,sha256=k9OL3fLXVsTWT0CKSYlih-1Ahh1iHsKe1MzdbaMIrjw,812
84
- frontend/js/components/ContractFrame/AbstractContractFrame.spec.tsx,sha256=zzSFqZoxySXwV9APrL4HptbzN0GfZlOCmPtc1Lvb9_o,12175
84
+ frontend/js/components/ContractFrame/AbstractContractFrame.spec.tsx,sha256=l9fjaJ5STEFKy5mUA6AsyH_RSbsTorzwXqntMocNJW0,11993
85
85
  frontend/js/components/ContractFrame/AbstractContractFrame.tsx,sha256=OkVwzsMKf1mtqRfVpbGCbZUGU4e0c8H-6pWEyWrdxoU,9255
86
86
  frontend/js/components/ContractFrame/LearnerContractFrame.spec.tsx,sha256=iQVHJCN0jgJtDNfNo3ROBAE19TF9tDvfANmjDOYbOgY,4703
87
87
  frontend/js/components/ContractFrame/LearnerContractFrame.tsx,sha256=tC18BtdzKWqE8GMO99ijKepN2v05emrlkhrfMLtdGyQ,1341
@@ -102,7 +102,7 @@ frontend/js/components/CourseGlimpseList/index.spec.tsx,sha256=brdHhBYRE2mA6Lgl7
102
102
  frontend/js/components/CourseGlimpseList/index.stories.tsx,sha256=oO2bHuZlEnRH_0NJEyIUaetmCzoJKQurbMPuJXNZVYs,593
103
103
  frontend/js/components/CourseGlimpseList/index.tsx,sha256=a6ocNzF6OJKYa25T-gKfGrMbzij3dIyQj3Ycx9IJ-Jo,2681
104
104
  frontend/js/components/CourseGlimpseList/utils.ts,sha256=KtEIklf4VLNQJHKi0IQTc7LkBmAvbkqEiQuExk0XMho,549
105
- frontend/js/components/DjangoCMSTemplate/index.spec.tsx,sha256=-ERm2cF5dS5uqWlIytb5len_2yjoZlsrWP6jF32XiUw,1479
105
+ frontend/js/components/DjangoCMSTemplate/index.spec.tsx,sha256=ivRDRHeiRQ-4NJtGO5JeNpMOdi-9z_x_GB0oxBSpucM,1543
106
106
  frontend/js/components/DjangoCMSTemplate/index.tsx,sha256=htAjYdk2N_7kn0SeRAZu2hsykiFDRDv-oy30vs2p9HU,1400
107
107
  frontend/js/components/DownloadCertificateButton/index.tsx,sha256=LDCSyJtUNA21NtXUorxSeKw4FJ6tcuXW5Gss2EU8nc4,1671
108
108
  frontend/js/components/DownloadContractButton/index.spec.tsx,sha256=6JIoZ4ep_joSmUmLONE_xHNogZax0A0m61GjdNSlFDU,5496
@@ -123,7 +123,7 @@ frontend/js/components/Icon/index.spec.tsx,sha256=8c4vDeXy369o96Flk4UujsO31ovHMY
123
123
  frontend/js/components/Icon/index.stories.tsx,sha256=S-IeSi14f3xlt4gvrPKo5SljMO1SnwVMZVk16ELHU6c,2809
124
124
  frontend/js/components/Icon/index.tsx,sha256=8rg00u3sfbGbKJ3OvhzVu3foUMDnykvIET6_Km3VhPE,2370
125
125
  frontend/js/components/Modal/_styles.scss,sha256=5h-8Iirm_WOevg_L7LNJey2-CsVHL0TzMZiarhQderc,1574
126
- frontend/js/components/Modal/index.spec.tsx,sha256=6uYLP9VX0ug7X6xOb8iXfIFvfeaRrGRVpo5pUSk4wkI,2936
126
+ frontend/js/components/Modal/index.spec.tsx,sha256=AAMUX5_vXEd_ia_4UJaVnm0PLZXnHDwDUWi5bPv3oGE,2753
127
127
  frontend/js/components/Modal/index.stories.tsx,sha256=mD7qzbTnwmToN1-jxHEl_P-Zi9wiSER_ALB4LIvGnKY,915
128
128
  frontend/js/components/Modal/index.tsx,sha256=uugQWU-i4QHdQwL31JFp-sZ-zN1BO2biIhEuba4CaKw,3011
129
129
  frontend/js/components/Pagination/index.spec.tsx,sha256=AwsmPYQ2dGY9hIIejPxXBWxX3XdD1FP7pgyUN7haOe8,8621
@@ -137,7 +137,7 @@ frontend/js/components/PaymentButton/components/PaymentInterfaces/index.spec.tsx
137
137
  frontend/js/components/PaymentButton/components/PaymentInterfaces/index.tsx,sha256=Tbu06nMUJcsGpvhH83YuMeQ88nMXCLBqR8559Jaca2Y,1407
138
138
  frontend/js/components/PaymentButton/components/PaymentInterfaces/__mocks__/index.tsx,sha256=yOwib4Bq2QjtApflnscDHJUvEzcM5QmA0CYjbZOUJuk,708
139
139
  frontend/js/components/PaymentButton/hooks/useTerms.tsx,sha256=ZFxB12tXbwZvntynEc0benEiPZZP3Npgqk4faYBKs9E,2317
140
- frontend/js/components/PurchaseButton/index.spec.tsx,sha256=Q3mtBjM8cy940-XOd1A8Os_GxtHGkeh9O9VCJkJgFc8,12768
140
+ frontend/js/components/PurchaseButton/index.spec.tsx,sha256=eUmOi_xLUESQxHc7SS6kYZp5gFxmfM-GlxtHhD2fZP4,12470
141
141
  frontend/js/components/PurchaseButton/index.stories.tsx,sha256=3RpmgeAztFP7LDZjtEsfycFKRmcmpBdaUNwrzj5GJxc,410
142
142
  frontend/js/components/PurchaseButton/index.tsx,sha256=jPN7j-7PWW8tKO128se7qAVt-99B81FAUQk8n_iEEcg,5590
143
143
  frontend/js/components/PurchaseButton/styles.scss,sha256=UiQjhf_faL4HELXmNax8X7cZdUVtwV2yGYClCR8AzPE,191
@@ -147,7 +147,7 @@ frontend/js/components/RegisteredAddress/index.stories.tsx,sha256=zNbtZceN642ot0
147
147
  frontend/js/components/RegisteredAddress/index.tsx,sha256=VwcclF1GY4BsulD99IAIWr0kbGqQyQVYfk-ng62DVXo,3883
148
148
  frontend/js/components/SaleTunnel/_styles.scss,sha256=ojni3VvKsNq9Tbp17bOMN_qla--bS00TRxrl9d2Hby8,176
149
149
  frontend/js/components/SaleTunnel/context.tsx,sha256=RLJRRW7Cmhz8MqGhCe7qW7Rm5m8NKGiKBCuK-nwtkLM,1142
150
- frontend/js/components/SaleTunnel/index.spec.tsx,sha256=JKcBJ2NxkNR0loRlyOa4e-nvCyO2qzirYuelbNCrWZk,5449
150
+ frontend/js/components/SaleTunnel/index.spec.tsx,sha256=FyBLEkz3iJLO0XgdTmFjgEQZmoK9Fx1vofBga2Pbaz4,5151
151
151
  frontend/js/components/SaleTunnel/index.tsx,sha256=XLlEbmvQ5AQV2sZRcDEvZ-M4e13HemS4uIIF77YDXpE,6365
152
152
  frontend/js/components/SaleTunnel/components/RegisteredCreditCard/_styles.scss,sha256=ARvb3TRxtiU8Yj9KCIYkBA7vP3D8Sgq8LyuE7GTNl50,667
153
153
  frontend/js/components/SaleTunnel/components/RegisteredCreditCard/index.spec.tsx,sha256=Kq3M_zheKSm0Q2Fa28k_1ToixqDY2AP5SVa08N_5WeQ,2783
@@ -169,8 +169,8 @@ frontend/js/components/SaleTunnel/components/StepBreadcrumb/index.tsx,sha256=APD
169
169
  frontend/js/components/SearchInput/_styles.scss,sha256=8yhJcI4ZBZGNtn_KbqnsxQsDmvInbAXc3dA485cDQv4,345
170
170
  frontend/js/components/SearchInput/index.spec.tsx,sha256=4o_YdeWkLlaxmDHqfX26FtqDGRtV-cZOKIZp0RTGuYE,1285
171
171
  frontend/js/components/SearchInput/index.tsx,sha256=6Pd1nFJidWGe-6nKiAkciFOMtypf4Y1n__zA4Qpuna4,1437
172
- frontend/js/components/SignContractButton/index.omniscientOrders.spec.tsx,sha256=wEbN8MNh7fnQthg85DneE7smWbBPk0RGQALfDb_zaEU,4950
173
- frontend/js/components/SignContractButton/index.spec.tsx,sha256=E11gE8bSMZgvXGJbxEtHkS_X7o-2bc1bv7UvUMMLX04,8580
172
+ frontend/js/components/SignContractButton/index.omniscientOrders.spec.tsx,sha256=Wwa1pcSgYMCuF8LVoHEH2Qj4AWMhrwt9gqkF2J2Z0hw,4768
173
+ frontend/js/components/SignContractButton/index.spec.tsx,sha256=zGP46EeNJX6BlQYbSYEMu8oWoT3-s7ShcAkFXgaCx_k,8398
174
174
  frontend/js/components/SignContractButton/index.tsx,sha256=bP0yuS6AIkTu7NNIgscBBgW2nQwuCXWj-4Dx4wqXeTE,3406
175
175
  frontend/js/components/Spinner/_styles.scss,sha256=0SOyJxsNU3cGK4k3lUn3xnrLmsi_dxbXIBRKAHxtQQk,940
176
176
  frontend/js/components/Spinner/index.stories.tsx,sha256=FYVTK1XxvKee5fVQ2alAC99yrbdlxuTonWPK_kw3U6c,436
@@ -268,7 +268,7 @@ frontend/js/pages/DashboardCertificates/_styles.scss,sha256=6kcG1-rQNEvEzpt-7A7W
268
268
  frontend/js/pages/DashboardCertificates/index.spec.tsx,sha256=HwSojV0lGezqPaXmD0N5ICRRuB_CXfawfIDAqiLpONw,6360
269
269
  frontend/js/pages/DashboardCertificates/index.tsx,sha256=X75oZCX9v4WX6lx16JIblKcBX30htvRJ9Ec8U2smMww,2568
270
270
  frontend/js/pages/DashboardContracts/_styles.scss,sha256=jr_KUqAPad7MZrZni8X1m8WsiVI__9Dd_2W3jH7Gf-A,127
271
- frontend/js/pages/DashboardContracts/index.spec.tsx,sha256=y8CPFYd7N_93EPfRD4hpymheu4kSbf0EkuhzTKs6t3o,5256
271
+ frontend/js/pages/DashboardContracts/index.spec.tsx,sha256=mGyo9816J4ODJ2quZzWbQMgqHIOc0vy9TGNv0U85eeE,4958
272
272
  frontend/js/pages/DashboardContracts/index.tsx,sha256=jOotbntCevSBShQUYZU3my3rw4U13_iKQoNz323xSr8,2594
273
273
  frontend/js/pages/DashboardCourses/_styles.scss,sha256=8LrtjWUetvjDKp8Sq3kusXB-R53hm6b9_O1YJKbQzN4,386
274
274
  frontend/js/pages/DashboardCourses/index.spec.tsx,sha256=6FsNpxQy1p9h1GJPa4LjSZ61Cjd7rqA0kCyJ7kSdk4M,11159
@@ -286,24 +286,24 @@ frontend/js/pages/DashboardCreditCardsManagement/index.spec.tsx,sha256=GqDeedyjK
286
286
  frontend/js/pages/DashboardCreditCardsManagement/index.stories.tsx,sha256=8QXdkd1WNy0k8Bah1t8-8o-kT6BE1fjAlRHBK21G6Ww,633
287
287
  frontend/js/pages/DashboardCreditCardsManagement/index.tsx,sha256=Vplbc14IygiNhkeisQOifvc0oUxNVlIwbyeE2a6LP_M,3048
288
288
  frontend/js/pages/DashboardOrderLayout/_styles.scss,sha256=AcmSmDHP5sQsMmPM5_1enIj-Kz282DIllQS1rhuyXYM,75
289
- frontend/js/pages/DashboardOrderLayout/index.spec.tsx,sha256=aK0GZzEpJjYPxh2aOntSqO6FEf7gfHV_u4bCtoO2D0M,3042
289
+ frontend/js/pages/DashboardOrderLayout/index.spec.tsx,sha256=2I0z46DGx2JbvTWK7ZMni1CKdqD2B_zCAh1iQAjjZmU,2860
290
290
  frontend/js/pages/DashboardOrderLayout/index.tsx,sha256=t_gHshUgr3lBnANLP91EsCKB-xJnLe3LqXt7jS5J0co,1895
291
291
  frontend/js/pages/DashboardPreferences/_styles.scss,sha256=s51zjGYiSwVItgOcSc3ticyQyRldQudj2-Q0EEeAtjU,83
292
292
  frontend/js/pages/DashboardPreferences/index.tsx,sha256=Krymqhr4LLH_E_tOTE3a02S6NDtm1ah0UlZ8rHFrDcw,1075
293
293
  frontend/js/pages/TeacherDashboardContractsLayout/index.ts,sha256=aTOe8e4-hn5oVlCRCxjA84a0zS4dCY_4rBNReXcgrWM,206
294
294
  frontend/js/pages/TeacherDashboardContractsLayout/styles.scss,sha256=Oj_orCo25_FGFM8Mlb6zuHfkXr6OAvxMaEvkCKzMc_E,266
295
- frontend/js/pages/TeacherDashboardContractsLayout/TeacherDashboardContracts/index.spec.tsx,sha256=dqySPTHw4lj_oxnSdCOrHxj1cyQzRFSnD3t_OT90ykY,13765
295
+ frontend/js/pages/TeacherDashboardContractsLayout/TeacherDashboardContracts/index.spec.tsx,sha256=WAo0OpllWxuk-WUWmQFGwsoxsWWelv0PlhjHw6MPCNg,13583
296
296
  frontend/js/pages/TeacherDashboardContractsLayout/TeacherDashboardContracts/index.tsx,sha256=EgSANYrbTX5TXnxteJCf-_GQYxM1GIL566KW9QSJedo,4536
297
297
  frontend/js/pages/TeacherDashboardContractsLayout/TeacherDashboardCourseContractsLayout/index.tsx,sha256=B7FMfhsTnbj5a8NjkkGJk8MRqPsdcVJ7IWArXKal2CE,944
298
298
  frontend/js/pages/TeacherDashboardContractsLayout/TeacherDashboardOrganizationContractsLayout/index.tsx,sha256=o4QA7ie02_TYLOt51lIT3K8bLhX3mhfKSF6l7C8AfOg,978
299
299
  frontend/js/pages/TeacherDashboardContractsLayout/components/BulkDownloadContractButton/index.spec.tsx,sha256=5xwRCsN17yTSHgs79erCHzlC28qcCz0fpNAm1QL17G4,4869
300
300
  frontend/js/pages/TeacherDashboardContractsLayout/components/BulkDownloadContractButton/index.timer.spec.tsx,sha256=vkJmsD84gcdWB7pyy0ZVj_Y7V_lGiYbLpRWLlaDpdvc,4996
301
301
  frontend/js/pages/TeacherDashboardContractsLayout/components/BulkDownloadContractButton/index.tsx,sha256=IEbWo8wGZqyf3fjo2hOynNhh-ml0a5Eb6WfBtVs0f5s,2678
302
- frontend/js/pages/TeacherDashboardContractsLayout/components/ContractActionsBar/index.spec.tsx,sha256=h_uTbMtrDosXIkmv_O6CoKu5iSWYZzEOUDrxNBUlg4Y,6551
302
+ frontend/js/pages/TeacherDashboardContractsLayout/components/ContractActionsBar/index.spec.tsx,sha256=9mmEKj8S4U06KDzWNcMnHuhRCw--W4y3Q7KhwVmSYRk,6369
303
303
  frontend/js/pages/TeacherDashboardContractsLayout/components/ContractActionsBar/index.tsx,sha256=wcZYQvoogE1QhcWgGS05fJsMdVJpGqKjDEv0aixWhrM,2037
304
304
  frontend/js/pages/TeacherDashboardContractsLayout/components/ContractFiltersBar/index.spec.tsx,sha256=8V5J86iL_b6WLGWnSU3B8xZeQ2ojRW-aKxiIdjLGcxI,6394
305
305
  frontend/js/pages/TeacherDashboardContractsLayout/components/ContractFiltersBar/index.tsx,sha256=ZIElTQwTOODS-oN-tf79-Fd1tbah0yexM4VcRR2_YyY,2688
306
- frontend/js/pages/TeacherDashboardContractsLayout/components/SignOrganizationContractButton/index.spec.tsx,sha256=rbVU3m0RplPs0xlGpHUE_-RWe1hZoW0qSpwDVC5VxpU,3922
306
+ frontend/js/pages/TeacherDashboardContractsLayout/components/SignOrganizationContractButton/index.spec.tsx,sha256=LalMIqAJhW99r6g4wfCSddkk30xuMyFbV7OBo7KPjjA,3740
307
307
  frontend/js/pages/TeacherDashboardContractsLayout/components/SignOrganizationContractButton/index.tsx,sha256=lMlHXgKEJaAcYCVUOtrdFdA2OfgPTEvJN_3adKHUnP4,1793
308
308
  frontend/js/pages/TeacherDashboardContractsLayout/hooks/useTeacherContractsToSign.tsx,sha256=kUblppRSWCYRCYR_QRwVuuTXpjDHm4zwJ1WglScGY3w,1148
309
309
  frontend/js/pages/TeacherDashboardContractsLayout/hooks/useCheckContractArchiveExists/index.spec.tsx,sha256=OAVFRfkQdj0dpjXe_8WuP4-l7o70zbNO89z2q-jarmM,3947
@@ -423,6 +423,7 @@ frontend/js/utils/test/expectUrlMatchLocationDisplayed.ts,sha256=0Tx4oBG2tQ8a5_m
423
423
  frontend/js/utils/test/isTestEnv.ts,sha256=FdSI-V2m9alzTN4iAN8nAw5zWP9OeQ-2pU2aVJAr9l4,77
424
424
  frontend/js/utils/test/mockCourseProductWithOrder.ts,sha256=KPpkR8uxHivyGYP9JzDB-9TvAmimAszhYQUYPfuiVtk,813
425
425
  frontend/js/utils/test/mockPaginatedResponse.ts,sha256=RN7QuIlvomI9fthxTrUikXX-ZI8nP0AaZOW5YzVFXOQ,367
426
+ frontend/js/utils/test/render.tsx,sha256=akp5aBuVi0xV8zjdbuz236s2zhSzesWotRWreCiNYyI,2591
426
427
  frontend/js/utils/test/factories/factories.spec.ts,sha256=iSsPjYN7KlNAikl9s41-LCz5f4bq2v9wZ4ji-aeE-xU,4846
427
428
  frontend/js/utils/test/factories/factories.ts,sha256=Cnsy8nymW-44jxOKTORykreaMACPCwBGxq9cHqrWc3I,2707
428
429
  frontend/js/utils/test/factories/helper.spec.ts,sha256=vmq4eBedGzoUwuw-ZFQgaGtvf80b2DIhOgBg1t2K5YY,2368
@@ -431,6 +432,12 @@ frontend/js/utils/test/factories/joanie.spec.ts,sha256=SoLhAU1HVN6LJTbPcCGtV_zmU
431
432
  frontend/js/utils/test/factories/joanie.ts,sha256=I0i0OcKnul8uYRUlrzrknjJ_jMoXkRdDcmUafoqdWQw,13411
432
433
  frontend/js/utils/test/factories/reactQuery.ts,sha256=zo9qKB1LQeTZahdy5OZbLVC-__8PeqD2igODO5E3t2o,1546
433
434
  frontend/js/utils/test/factories/richie.ts,sha256=nvQBVESdq2pLp82p3bvgB5AnFcvoLmX07pW_3k1dv2k,6872
435
+ frontend/js/utils/test/wrappers/IntlWrapper.tsx,sha256=PfwVv9cWwP7shG2PeEbSV34fU5d5g5CIGqi4at74SZM,677
436
+ frontend/js/utils/test/wrappers/JoanieAppWrapper.tsx,sha256=C2YB6dwYB4QlPhIHGy6eyWqpVhk_2CcJjB5ku3nJQjg,1457
437
+ frontend/js/utils/test/wrappers/PresentationalAppWrapper.tsx,sha256=ff9xYWKwX83zc2UkLGjdOHzUhE6QfbDb7hdJuMIKM5s,606
438
+ frontend/js/utils/test/wrappers/ReactQueryWrapper.tsx,sha256=KEijJe4v5ykq0mLFLY_SMW4a5UmYLpMU72pZE2NGbeg,542
439
+ frontend/js/utils/test/wrappers/RouterWrapper.tsx,sha256=6eOXiyiqpBAWlqbRt9lvKyWw6AeaOFWWTwb2Vm2wHoU,702
440
+ frontend/js/utils/test/wrappers/types.ts,sha256=SatBYwX7fJfweHllBpcX2YdIkpQ2t18AqcA4Gr8udNk,1070
434
441
  frontend/js/widgets/index.spec.tsx,sha256=e_Hdz4mjMSEmNsa6K2nTuS7a9tSn8PPSYyf3PmWf0dw,4839
435
442
  frontend/js/widgets/index.tsx,sha256=vmXFg5KQGjOyDXivpg3oLFnSmZo_TThbBCu731BOp80,4297
436
443
  frontend/js/widgets/Dashboard/_styles.scss,sha256=WYer6DwHhhsDZvAP4e8EzR3j6gUwelVgHECU6JcpX0Q,91
@@ -465,7 +472,7 @@ frontend/js/widgets/Dashboard/components/DashboardItem/Certificate/index.tsx,sha
465
472
  frontend/js/widgets/Dashboard/components/DashboardItem/CertificateStatus/index.spec.tsx,sha256=JFLDFBO2eW4EVykVa31lxk5Mv6ohg2Xk_8Os7lm9tX0,2401
466
473
  frontend/js/widgets/Dashboard/components/DashboardItem/CertificateStatus/index.tsx,sha256=7LNZtzh_Cnw666szxUORKwAg-cgWA-IvBHozieA-y14,2144
467
474
  frontend/js/widgets/Dashboard/components/DashboardItem/Contract/_styles.scss,sha256=w0qZ2JARxKrr__dt6FrslU89QYwmIob9qFLFgQBrJ_c,514
468
- frontend/js/widgets/Dashboard/components/DashboardItem/Contract/index.spec.tsx,sha256=I_d6Mnqp4EiXTDsTx8wPKtj6KVTkcPrvd5Bn5WfSOZY,7133
475
+ frontend/js/widgets/Dashboard/components/DashboardItem/Contract/index.spec.tsx,sha256=RzKTPD-UHyNz7QL1ieft4Gw2-n_zWP_PDrHjlmWOiuc,6977
469
476
  frontend/js/widgets/Dashboard/components/DashboardItem/Contract/index.stories.tsx,sha256=pHr5--fLV2spJ3U0kkikg4DYg8GaBZitHaDTnUyJjBE,1128
470
477
  frontend/js/widgets/Dashboard/components/DashboardItem/Contract/index.tsx,sha256=5Fbp0tcltsroQsyvfg5qtrSBmQN-5cNPo1Iq2lpIK5g,1605
471
478
  frontend/js/widgets/Dashboard/components/DashboardItem/CourseEnrolling/index.spec.tsx,sha256=fzvkWGLDl_jfJQ2222J4firQbNDg1f5TEY8ZaSSJ3ag,5893
@@ -475,12 +482,12 @@ frontend/js/widgets/Dashboard/components/DashboardItem/CourseEnrolling/hooks/use
475
482
  frontend/js/widgets/Dashboard/components/DashboardItem/Enrollment/DashboardItemEnrollment.spec.tsx,sha256=rJ4X8M3aTMdguKrv2cxi4J71LP36OrDPZ9zMW72D-7M,4072
476
483
  frontend/js/widgets/Dashboard/components/DashboardItem/Enrollment/DashboardItemEnrollment.stories.tsx,sha256=gXWvOUMcyM4kSTJ_CCXVQ9pjhpZZhEKpDm_A0HNlJBk,776
477
484
  frontend/js/widgets/Dashboard/components/DashboardItem/Enrollment/DashboardItemEnrollment.tsx,sha256=ju0uUObgpNVrq_s-2Eux3Ba8e47tR1qcxrmbRKLFtHc,1416
478
- frontend/js/widgets/Dashboard/components/DashboardItem/Enrollment/ProductCertificateFooter/index.spec.tsx,sha256=JvbleBe205IOkbvqvE7xbEJpOcPuKAMnC0wtB9PsOpI,9216
485
+ frontend/js/widgets/Dashboard/components/DashboardItem/Enrollment/ProductCertificateFooter/index.spec.tsx,sha256=B5kqlifXCoSGdRf5ru8_V8Ij876GsqctgLMQ7EItsXc,8918
479
486
  frontend/js/widgets/Dashboard/components/DashboardItem/Enrollment/ProductCertificateFooter/index.tsx,sha256=yOKlawda2h3yRsg53VBDcWntjoYOyqGqROVyF1zJKdc,3622
480
- frontend/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrder.spec.tsx,sha256=k5aQNRChZe04VyXoxbzYpHV3G64Y9Cjw7FOEMXkWQF4,33360
487
+ frontend/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrder.spec.tsx,sha256=dq66GGQXcbO3LLp44WqSK-FnejgXCwUpx97lSpWGrnY,33178
481
488
  frontend/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrder.tsx,sha256=kWi2E3uOsYVQkydGdrsowjqVIhki14KEQ2QFF7CntWk,7038
482
- frontend/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderContract.spec.tsx,sha256=x1EqqC0aQXpRnASzVOYbASFfMfG9UuOwKIRQQJAtuqA,11804
483
- frontend/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderContract.useUnionResource.cache.spec.tsx,sha256=ntk2b0XLFriVWxlW3yop-zDLmwcz9uunmJlb5TRh-tE,11143
489
+ frontend/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderContract.spec.tsx,sha256=WrFJ3cW1vW5I0Gupr8LWU2kcMXULw8TYMLK0AMm6dFc,11622
490
+ frontend/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderContract.useUnionResource.cache.spec.tsx,sha256=64LqlgtLMekYr-EG0TpCpQRryiEzfslkW9apZGWbm1U,10961
484
491
  frontend/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderReadonly.stories.tsx,sha256=do7d5TsmNw2P2UqZp20QP2LUY09nsWwhSSPF9xEjwCk,2079
485
492
  frontend/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderWritable.stories.tsx,sha256=Dwh6J4Rd3ffJjs6o2O9YrqUwIER_x2vhUXeOatLLqeg,2196
486
493
  frontend/js/widgets/Dashboard/components/DashboardItem/Order/_styles.scss,sha256=JpV1ZjVFUwxhdvNMdCHk_Wob58UNEld9aYgvEjnnAxs,791
@@ -508,7 +515,7 @@ frontend/js/widgets/Dashboard/components/FilterOrganization/index.tsx,sha256=Ny3
508
515
  frontend/js/widgets/Dashboard/components/FiltersBar/index.tsx,sha256=XL5AL_mjUXRDLzXag8n3CstvPoGmFS6v6Jhy2z-nSeQ,250
509
516
  frontend/js/widgets/Dashboard/components/LearnerDashboardSidebar/index.stories.tsx,sha256=xGOrjq7zlaA3kzUi05c5onUSvESycputfo5s6m7YbmI,802
510
517
  frontend/js/widgets/Dashboard/components/LearnerDashboardSidebar/index.tsx,sha256=bS6jfzrY-irJ9YYDc3GdcR1WE01DfS3xazkZ1iuxKqs,1696
511
- frontend/js/widgets/Dashboard/components/NavigateWithParams/index.spec.tsx,sha256=ujxTQ9CQ4nmFN40wJ_rBzF95RxtrPkOEOA88gFBn2pY,1751
518
+ frontend/js/widgets/Dashboard/components/NavigateWithParams/index.spec.tsx,sha256=UpCB5dJuyOo5evTMlS3BqlGkmCeoInEmTOAgt20yp3Y,1677
512
519
  frontend/js/widgets/Dashboard/components/NavigateWithParams/index.tsx,sha256=VAaAeE82vtKgwgdb0Agq-abwq3jw79DsT7eBetzmDmA,399
513
520
  frontend/js/widgets/Dashboard/components/ProtectedOutlet/AuthenticatedOutlet.spec.tsx,sha256=KZp8il4hp1Iwse_lKDYlrxjpMijYZ1wugxjXvTScyqo,3150
514
521
  frontend/js/widgets/Dashboard/components/ProtectedOutlet/AuthenticatedOutlet.tsx,sha256=ihz08OV--yL_lkzjZ-bmAEEoCfFk9n9mUHWp8wsEQGI,539
@@ -528,11 +535,11 @@ frontend/js/widgets/Dashboard/components/TeacherDashboardCourseSidebar/utils.ts,
528
535
  frontend/js/widgets/Dashboard/components/TeacherDashboardOrganizationSidebar/index.spec.tsx,sha256=nHvNOHi4zdbG4MbvRR8wMWdcxZvdGFwqmBRJnT0goek,5988
529
536
  frontend/js/widgets/Dashboard/components/TeacherDashboardOrganizationSidebar/index.stories.tsx,sha256=SNtqfdnY217R6zkSlljvI7QNYT6NUhaQkNOJjbCElAc,1622
530
537
  frontend/js/widgets/Dashboard/components/TeacherDashboardOrganizationSidebar/index.tsx,sha256=pQVFMGdLgsFBEY9tnCLIKXdMlJJOXVAu7mffAWWd0Ts,2809
531
- frontend/js/widgets/Dashboard/components/TeacherDashboardProfileSidebar/index.spec.tsx,sha256=pI9bmLSExI00yhvGyD74K5rQLDvBKmf2rsnuqVUoWsk,4403
538
+ frontend/js/widgets/Dashboard/components/TeacherDashboardProfileSidebar/index.spec.tsx,sha256=ZV0d_JCyr-twbFg2yoZYmBOzRsfwqRqtxasX4v-DbZU,3353
532
539
  frontend/js/widgets/Dashboard/components/TeacherDashboardProfileSidebar/index.stories.tsx,sha256=mrb3Jm-8p5abdvQ3vr5OoeMGIhENmku8feOJxXT90AQ,851
533
540
  frontend/js/widgets/Dashboard/components/TeacherDashboardProfileSidebar/index.tsx,sha256=wFT2euTVub7dknTkE-6b0AYGDSCD0lr2mcFExkYv024,1582
534
541
  frontend/js/widgets/Dashboard/components/TeacherDashboardProfileSidebar/components/OrganizationLinks/_styles.scss,sha256=rzJlbzXvrCO6kGrAgrqGThXnSE2NgcWuPW2Val8MFcI,1536
535
- frontend/js/widgets/Dashboard/components/TeacherDashboardProfileSidebar/components/OrganizationLinks/index.spec.tsx,sha256=3ERf_GLFlNBKkh67GPrw1-k4IIg8wFhI0GlijGbkl9Q,2068
542
+ frontend/js/widgets/Dashboard/components/TeacherDashboardProfileSidebar/components/OrganizationLinks/index.spec.tsx,sha256=w4p0x7L6qkvipjSAXTyflXDkVya7QjPVBQMeJMZxnn8,1963
536
543
  frontend/js/widgets/Dashboard/components/TeacherDashboardProfileSidebar/components/OrganizationLinks/index.tsx,sha256=Fa6htqfin5xc1fPZFnkOweJp-ZRck1pYYsqa8wwEuak,2511
537
544
  frontend/js/widgets/Dashboard/contexts/DashboardBreadcrumbsContext.tsx,sha256=xI6AwOM4bAoysj1-Qmo_11_q5Y2lOEQ8Qv9vP3SFGd8,1517
538
545
  frontend/js/widgets/Dashboard/hooks/useDashboardRouter/getDashboardBasename.ts,sha256=46x5ut5dccVlIfitc8qsiX24FjZznwnDq5PnZrfYQ_k,271
@@ -561,10 +568,10 @@ frontend/js/widgets/Search/components/FiltersPaneCloseButton.tsx,sha256=hH7HB_PX
561
568
  frontend/js/widgets/Search/components/PaginateCourseSearch/index.spec.tsx,sha256=2Hh82UpliOvBpwAfnlzY528Qivqg_7Z7J_ODFpr6t5A,6528
562
569
  frontend/js/widgets/Search/components/PaginateCourseSearch/index.tsx,sha256=S7RcLMCnbacEew7-SEk4cA_GGDRMceMWBjNED1jmSoU,1375
563
570
  frontend/js/widgets/Search/components/SearchFilterGroup/_styles.scss,sha256=yHtoKlNHDo1LfiBQ9KunTXidAmd8QNq8OMr_QJogRO8,372
564
- frontend/js/widgets/Search/components/SearchFilterGroup/index.spec.tsx,sha256=dzPHle3-T2uh8eqoBRbUaoy6JBQhYqAy3sI_DT6KxEI,3194
571
+ frontend/js/widgets/Search/components/SearchFilterGroup/index.spec.tsx,sha256=5MOalPWnuD_tkeoxbZig_kXm7-RHSdaPZdShZVCsPks,3012
565
572
  frontend/js/widgets/Search/components/SearchFilterGroup/index.tsx,sha256=wWORb1vtHOEcsL3onAqNoF069O8ie_71GvH61mpKJF8,1194
566
573
  frontend/js/widgets/Search/components/SearchFilterGroupModal/_styles.scss,sha256=U5bn8RN2S-fyGEujTwnAPHOKD16o32vJUaPDSmTRmx8,1478
567
- frontend/js/widgets/Search/components/SearchFilterGroupModal/index.spec.tsx,sha256=4J1K0U-3LEV877YZ5JPY0UjaBEPT_y-pCki_zK9PrG4,20685
574
+ frontend/js/widgets/Search/components/SearchFilterGroupModal/index.spec.tsx,sha256=_yKClATZqNJiNrecwHzFgfWc5WgI8frcb4tk4euOTk0,20503
568
575
  frontend/js/widgets/Search/components/SearchFilterGroupModal/index.tsx,sha256=1MnqtYbguWsGS8W3zqauCiSg1oM7Ob1TkZ4PmrYb30U,9695
569
576
  frontend/js/widgets/Search/components/SearchFilterValueLeaf/index.spec.tsx,sha256=WS-gbQfjSje1n2FJbwbd1DBt_dHLGxMQMdqPvnKgku8,6491
570
577
  frontend/js/widgets/Search/components/SearchFilterValueLeaf/index.tsx,sha256=D1r8iImzYsw7KWHqKZjYDNeQef6qbr8sANkwPMpsvLQ,1273
@@ -586,7 +593,7 @@ frontend/js/widgets/SearchSuggestField/index.tsx,sha256=mQtTuveQtBhN2SDK88WE_AD4
586
593
  frontend/js/widgets/SyllabusCourseRunsList/index.spec.tsx,sha256=Bs5LwgGW71KJlXGjECnJ6cuepFdTqoaPMktJD4-rb5Y,25578
587
594
  frontend/js/widgets/SyllabusCourseRunsList/index.tsx,sha256=-dMeLQ3byLLdVLRi0JIoG1eBpT2JFBKZDLpFcR2foyY,4094
588
595
  frontend/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/_styles.scss,sha256=VtdcIlNGjkoqZiK5JughtXw6_7oNWmJlgHn6cJIsWzc,3256
589
- frontend/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/index.spec.tsx,sha256=SFXw0aLBq-urxfRCQGXIWRhCKYWbZd8FxT_6Yjiqvug,33785
596
+ frontend/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/index.spec.tsx,sha256=ZC_yr2-c_TwKEY8pvpL17MDJB3E3-3mkxHrvdd9mV7Q,33487
590
597
  frontend/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/index.stories.tsx,sha256=bqVATEIPoJFoNFnVx2VqOL1tMUr5HQdwfDCA_gB87hw,2923
591
598
  frontend/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/index.tsx,sha256=U6iUfLu_RS2V9p9V2bJ6l0Gv8kYGLRQJY3RICyk610g,8483
592
599
  frontend/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/CourseProductItemFooter/index.tsx,sha256=-fb6NAy6KnPG23piiWJWL2OqKrq_mf38Myq_1CLeT8s,2009
@@ -2335,9 +2342,9 @@ richie/static/richie/js/build/9986.4f8226b1f37372f99368.index.js,sha256=YZTuD2Zq
2335
2342
  richie/static/richie/js/build/99953.4f8226b1f37372f99368.index.js,sha256=OWoLPJnHrmvF3HBQPgXooAGo5E0yJpJ7QTFHFghJpI8,135
2336
2343
  richie/static/richie/js/build/99962.4f8226b1f37372f99368.index.js,sha256=I84MIDhCYN2K4npCXyaDNnfTXb2xsBIzpZVnlTknM2s,8366
2337
2344
  richie/static/richie/js/build/index.js,sha256=UVlwvREYQJJZdtYaef_euQTd0tGDIyK89eiSuwAaySU,1128515
2338
- richie-2.25.0b2.dev97.dist-info/LICENSE,sha256=5LKjFIE1kpKzBfR2iwq_RGHhHM5XawdlfZrcHTsCLpA,1079
2339
- richie-2.25.0b2.dev97.dist-info/METADATA,sha256=kzhwZWTZCQPBxu-QoJT508_GBpZxbu_xlfnoGeXe3XY,6739
2340
- richie-2.25.0b2.dev97.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
2341
- richie-2.25.0b2.dev97.dist-info/top_level.txt,sha256=WJvFAAHtUQ5T5MOuG6jRynDJG9kVfl4jtuf1qxIXND8,16
2342
- richie-2.25.0b2.dev97.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
2343
- richie-2.25.0b2.dev97.dist-info/RECORD,,
2345
+ richie-2.25.0b2.dev101.dist-info/LICENSE,sha256=5LKjFIE1kpKzBfR2iwq_RGHhHM5XawdlfZrcHTsCLpA,1079
2346
+ richie-2.25.0b2.dev101.dist-info/METADATA,sha256=pfeC4kIvgEKH8wpeCIMvyiJuBCe0HGkwWb1HkE-ZXGs,6740
2347
+ richie-2.25.0b2.dev101.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
2348
+ richie-2.25.0b2.dev101.dist-info/top_level.txt,sha256=WJvFAAHtUQ5T5MOuG6jRynDJG9kVfl4jtuf1qxIXND8,16
2349
+ richie-2.25.0b2.dev101.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
2350
+ richie-2.25.0b2.dev101.dist-info/RECORD,,