1- import React from 'react' ;
2- import { render , screen , within } from '@testing-library/react' ;
3- import { IntlProvider } from '@openedx/frontend-base' ;
1+ import { screen , within } from '@testing-library/react' ;
2+ import userEvent from '@testing-library/user-event' ;
43import EnrollmentsPage from './EnrollmentsPage' ;
54import { Learner } from './types' ;
6- import userEvent from '@testing-library/user-event' ;
75import messages from './messages' ;
6+ import { useEnrollmentByUserId , useEnrollments , useEnrollLearners } from './data/apiHook' ;
7+ import { renderWithAlertAndIntl } from '@src/testUtils' ;
8+
9+ jest . mock ( 'react-router-dom' , ( ) => ( {
10+ ...jest . requireActual ( 'react-router-dom' ) ,
11+ useParams : ( ) => ( { courseId : 'test-course-id' } ) ,
12+ } ) ) ;
13+
14+ jest . mock ( './data/apiHook' , ( ) => ( {
15+ useEnrollments : jest . fn ( ) ,
16+ useEnrollmentByUserId : jest . fn ( ) ,
17+ useEnrollLearners : jest . fn ( ) ,
18+ } ) ) ;
819
920// Mock the child components
1021jest . mock ( './components/EnrollmentsList' , ( ) => {
@@ -26,55 +37,42 @@ jest.mock('./components/EnrollmentsList', () => {
2637 } ;
2738} ) ;
2839
29- jest . mock ( './components/EnrollmentStatusModal' , ( ) => {
30- return function MockEnrollmentStatusModal ( { isOpen, onClose } : { isOpen : boolean , onClose : ( ) => void } ) {
31- return isOpen ? (
32- < div role = "dialog" >
33- < button onClick = { onClose } > Close Modal</ button >
34- </ div >
35- ) : null ;
36- } ;
37- } ) ;
38-
39- jest . mock ( './components/UnenrollModal' , ( ) => {
40- return function MockUnenrollModal ( { isOpen, learner, onClose } : { isOpen : boolean , learner : Learner | null , onClose : ( ) => void } ) {
41- return isOpen ? (
42- < div role = "dialog" >
43- < span > Unenroll { learner ?. fullName } </ span >
44- < button onClick = { onClose } > Close Unenroll Modal</ button >
45- </ div >
46- ) : null ;
47- } ;
48- } ) ;
49-
50- const renderWithIntl = ( component : React . ReactElement ) => {
51- return render (
52- < IntlProvider locale = "en" >
53- { component }
54- </ IntlProvider >
55- ) ;
56- } ;
57-
5840describe ( 'EnrollmentsPage' , ( ) => {
41+ beforeAll ( ( ) => {
42+ ( useEnrollments as jest . Mock ) . mockReturnValue ( {
43+ data : { count : 1 , numPages : 1 , results : [ { username : 'testuser' , fullName : 'Test User' , email : 'test@example.com' , mode : 'audit' , isBetaTester : false } ] } ,
44+ isLoading : false ,
45+ } ) ;
46+ ( useEnrollmentByUserId as jest . Mock ) . mockReturnValue ( {
47+ data : { enrollmentStatus : 'enrolled' } ,
48+ refetch : jest . fn ( ) ,
49+ } ) ;
50+ ( useEnrollLearners as jest . Mock ) . mockReturnValue ( {
51+ mutate : jest . fn ( ) ,
52+ isLoading : false ,
53+ error : null ,
54+ } ) ;
55+ } ) ;
56+
5957 it ( 'renders the page title' , ( ) => {
60- renderWithIntl ( < EnrollmentsPage /> ) ;
58+ renderWithAlertAndIntl ( < EnrollmentsPage /> ) ;
6159 expect ( screen . getByRole ( 'heading' , { level : 3 } ) ) . toBeInTheDocument ( ) ;
6260 } ) ;
6361
6462 it ( 'renders action buttons' , ( ) => {
65- renderWithIntl ( < EnrollmentsPage /> ) ;
63+ renderWithAlertAndIntl ( < EnrollmentsPage /> ) ;
6664 expect ( screen . getByRole ( 'button' , { name : messages . checkEnrollmentStatus . defaultMessage } ) ) . toBeInTheDocument ( ) ;
6765 expect ( screen . getByRole ( 'button' , { name : new RegExp ( messages . addBetaTesters . defaultMessage ) } ) ) . toBeInTheDocument ( ) ;
6866 expect ( screen . getByRole ( 'button' , { name : new RegExp ( messages . enrollLearners . defaultMessage ) } ) ) . toBeInTheDocument ( ) ;
6967 } ) ;
7068
7169 it ( 'renders EnrollmentsList component' , ( ) => {
72- renderWithIntl ( < EnrollmentsPage /> ) ;
70+ renderWithAlertAndIntl ( < EnrollmentsPage /> ) ;
7371 expect ( screen . getByRole ( 'table' ) ) . toBeInTheDocument ( ) ;
7472 } ) ;
7573
7674 it ( 'opens enrollment status modal when more button is clicked' , async ( ) => {
77- renderWithIntl ( < EnrollmentsPage /> ) ;
75+ renderWithAlertAndIntl ( < EnrollmentsPage /> ) ;
7876
7977 const moreButton = screen . getByRole ( 'button' , { name : messages . checkEnrollmentStatus . defaultMessage } ) ;
8078 const user = userEvent . setup ( ) ;
@@ -84,20 +82,20 @@ describe('EnrollmentsPage', () => {
8482 } ) ;
8583
8684 it ( 'closes enrollment status modal' , async ( ) => {
87- renderWithIntl ( < EnrollmentsPage /> ) ;
85+ renderWithAlertAndIntl ( < EnrollmentsPage /> ) ;
8886
8987 const moreButton = screen . getByRole ( 'button' , { name : messages . checkEnrollmentStatus . defaultMessage } ) ;
9088 const user = userEvent . setup ( ) ;
9189 await user . click ( moreButton ) ;
9290
93- const closeButton = screen . getByText ( 'Close Modal ' ) ;
91+ const closeButton = screen . getByText ( 'Close' ) ;
9492 await user . click ( closeButton ) ;
9593
9694 expect ( screen . queryByRole ( 'dialog' ) ) . not . toBeInTheDocument ( ) ;
9795 } ) ;
9896
9997 it ( 'opens unenroll modal when unenroll is triggered' , async ( ) => {
100- renderWithIntl ( < EnrollmentsPage /> ) ;
98+ renderWithAlertAndIntl ( < EnrollmentsPage /> ) ;
10199
102100 const unenrollButton = screen . getByText ( 'Unenroll Test Learner' ) ;
103101 const user = userEvent . setup ( ) ;
@@ -110,20 +108,20 @@ describe('EnrollmentsPage', () => {
110108 } ) ;
111109
112110 it ( 'closes unenroll modal and clears selected learner' , async ( ) => {
113- renderWithIntl ( < EnrollmentsPage /> ) ;
111+ renderWithAlertAndIntl ( < EnrollmentsPage /> ) ;
114112
115113 const unenrollButton = screen . getByText ( 'Unenroll Test Learner' ) ;
116114 const user = userEvent . setup ( ) ;
117115 await user . click ( unenrollButton ) ;
118116
119- const closeUnenrollButton = screen . getByText ( 'Close Unenroll Modal ' ) ;
117+ const closeUnenrollButton = screen . getByText ( 'Cancel ' ) ;
120118 await user . click ( closeUnenrollButton ) ;
121119
122120 expect ( screen . queryByRole ( 'dialog' ) ) . not . toBeInTheDocument ( ) ;
123121 } ) ;
124122
125123 it ( 'modals are closed by default' , ( ) => {
126- renderWithIntl ( < EnrollmentsPage /> ) ;
124+ renderWithAlertAndIntl ( < EnrollmentsPage /> ) ;
127125
128126 expect ( screen . queryByRole ( 'dialog' ) ) . not . toBeInTheDocument ( ) ;
129127 } ) ;
0 commit comments