1- import { render , screen } from '@testing-library/react' ;
1+ import { screen } from '@testing-library/react' ;
22import userEvent from '@testing-library/user-event' ;
3- import { IntlProvider } from '@openedx/frontend-base' ;
4- import { MemoryRouter , Route , Routes } from 'react-router-dom' ;
53import DateExtensionsPage from './DateExtensionsPage' ;
64import { useDateExtensions , useResetDateExtensionMutation } from './data/apiHook' ;
5+ import { renderWithAlertAndIntl } from '@src/testUtils' ;
6+
7+ jest . mock ( 'react-router-dom' , ( ) => ( {
8+ ...jest . requireActual ( 'react-router-dom' ) ,
9+ useParams : ( ) => ( {
10+ courseId : 'course-v1:edX+DemoX+Demo_Course' ,
11+ } ) ,
12+ } ) ) ;
713
814jest . mock ( './data/apiHook' , ( ) => ( {
915 useDateExtensions : jest . fn ( ) ,
@@ -34,28 +40,18 @@ describe('DateExtensionsPage', () => {
3440 } ) ;
3541 } ) ;
3642
37- const RenderWithRouter = ( ) => (
38- < IntlProvider messages = { { } } >
39- < MemoryRouter initialEntries = { [ '/course-v1:edX+DemoX+Demo_Course' ] } >
40- < Routes >
41- < Route path = "/:courseId" element = { < DateExtensionsPage /> } />
42- </ Routes >
43- </ MemoryRouter >
44- </ IntlProvider >
45- ) ;
46-
4743 it ( 'renders page title' , ( ) => {
48- render ( < RenderWithRouter /> ) ;
44+ renderWithAlertAndIntl ( < DateExtensionsPage /> ) ;
4945 expect ( screen . getByRole ( 'heading' , { level : 3 } ) ) . toBeInTheDocument ( ) ;
5046 } ) ;
5147
5248 it ( 'renders add extension button' , ( ) => {
53- render ( < RenderWithRouter /> ) ;
49+ renderWithAlertAndIntl ( < DateExtensionsPage /> ) ;
5450 expect ( screen . getByRole ( 'button' , { name : / a d d i n d i v i d u a l e x t e n s i o n / i } ) ) . toBeInTheDocument ( ) ;
5551 } ) ;
5652
5753 it ( 'renders date extensions list' , ( ) => {
58- render ( < RenderWithRouter /> ) ;
54+ renderWithAlertAndIntl ( < DateExtensionsPage /> ) ;
5955 expect ( screen . getByText ( 'Ed Byun' ) ) . toBeInTheDocument ( ) ;
6056 expect ( screen . getByText ( 'Three body diagrams' ) ) . toBeInTheDocument ( ) ;
6157 } ) ;
@@ -65,18 +61,18 @@ describe('DateExtensionsPage', () => {
6561 data : { count : 0 , results : [ ] } ,
6662 isLoading : true ,
6763 } ) ;
68- render ( < RenderWithRouter /> ) ;
64+ renderWithAlertAndIntl ( < DateExtensionsPage /> ) ;
6965 expect ( screen . getByRole ( 'status' ) ) . toBeInTheDocument ( ) ;
7066 } ) ;
7167
7268 it ( 'renders reset link for each row' , ( ) => {
73- render ( < RenderWithRouter /> ) ;
69+ renderWithAlertAndIntl ( < DateExtensionsPage /> ) ;
7470 const resetLinks = screen . getAllByRole ( 'button' , { name : 'Reset Extensions' } ) ;
7571 expect ( resetLinks ) . toHaveLength ( mockDateExtensions . length ) ;
7672 } ) ;
7773
7874 it ( 'opens reset modal when reset button is clicked' , async ( ) => {
79- render ( < RenderWithRouter /> ) ;
75+ renderWithAlertAndIntl ( < DateExtensionsPage /> ) ;
8076 const user = userEvent . setup ( ) ;
8177 const resetButton = screen . getByRole ( 'button' , { name : 'Reset Extensions' } ) ;
8278 await user . click ( resetButton ) ;
@@ -87,7 +83,7 @@ describe('DateExtensionsPage', () => {
8783 } ) ;
8884
8985 it ( 'calls reset mutation when confirm reset is clicked' , async ( ) => {
90- render ( < RenderWithRouter /> ) ;
86+ renderWithAlertAndIntl ( < DateExtensionsPage /> ) ;
9187 const user = userEvent . setup ( ) ;
9288 const resetButton = screen . getByRole ( 'button' , { name : 'Reset Extensions' } ) ;
9389 await user . click ( resetButton ) ;
@@ -97,7 +93,7 @@ describe('DateExtensionsPage', () => {
9793 } ) ;
9894
9995 it ( 'closes reset modal when cancel is clicked' , async ( ) => {
100- render ( < RenderWithRouter /> ) ;
96+ renderWithAlertAndIntl ( < DateExtensionsPage /> ) ;
10197 const user = userEvent . setup ( ) ;
10298 const resetButton = screen . getByRole ( 'button' , { name : 'Reset Extensions' } ) ;
10399 await user . click ( resetButton ) ;
0 commit comments