1- import React from 'react' ;
2- import { shallow } from '@edx/react-unit-test-utils' ;
3- import { Hyperlink } from '@openedx/paragon' ;
1+ import { render , screen } from '@testing-library/react' ;
2+ import { IntlProvider } from '@edx/frontend-platform/i18n' ;
43
54import { reduxHooks } from 'hooks' ;
65import { formatMessage } from 'testUtils' ;
76import { CourseBanner } from './CourseBanner' ;
87
98import messages from './messages' ;
109
11- jest . mock ( 'components/Banner' , ( ) => 'Banner' ) ;
1210jest . mock ( 'hooks' , ( ) => ( {
1311 utilHooks : {
1412 useFormatDate : ( ) => date => date ,
@@ -19,9 +17,11 @@ jest.mock('hooks', () => ({
1917 } ,
2018} ) ) ;
2119
22- const cardId = 'my-test-course-number' ;
20+ jest . unmock ( '@openedx/paragon' ) ;
21+ jest . unmock ( '@edx/frontend-platform/i18n' ) ;
22+ jest . unmock ( 'react' ) ;
2323
24- let el ;
24+ const cardId = 'test-card-id' ;
2525
2626const enrollmentData = {
2727 isVerified : false ,
@@ -38,7 +38,7 @@ const courseRunData = {
3838 marketingUrl : 'marketing-url' ,
3939} ;
4040
41- const render = ( overrides = { } ) => {
41+ const renderCourseBanner = ( overrides = { } ) => {
4242 const {
4343 courseRun = { } ,
4444 enrollment = { } ,
@@ -51,81 +51,58 @@ const render = (overrides = {}) => {
5151 ...enrollmentData ,
5252 ...enrollment ,
5353 } ) ;
54- el = shallow ( < CourseBanner cardId = { cardId } /> ) ;
54+ return render ( < IntlProvider locale = "en" > < CourseBanner cardId = { cardId } /> </ IntlProvider > ) ;
5555} ;
5656
5757describe ( 'CourseBanner' , ( ) => {
58- test ( 'initializes data with course number from enrollment, course and course run data' , ( ) => {
59- render ( ) ;
58+ it ( 'initializes data with course number from enrollment, course and course run data' , ( ) => {
59+ renderCourseBanner ( ) ;
6060 expect ( reduxHooks . useCardCourseRunData ) . toHaveBeenCalledWith ( cardId ) ;
6161 expect ( reduxHooks . useCardEnrollmentData ) . toHaveBeenCalledWith ( cardId ) ;
6262 } ) ;
63- test ( 'no display if learner is verified' , ( ) => {
64- render ( { enrollment : { isVerified : true } } ) ;
65- expect ( el . isEmptyRender ( ) ) . toEqual ( true ) ;
63+ it ( 'no display if learner is verified' , ( ) => {
64+ renderCourseBanner ( { enrollment : { isVerified : true } } ) ;
65+ expect ( screen . queryByRole ( 'alert' ) ) . toBeNull ( ) ;
6666 } ) ;
6767 describe ( 'audit access expired' , ( ) => {
68- beforeEach ( ( ) => {
69- render ( { enrollment : { isAuditAccessExpired : true } } ) ;
70- } ) ;
71- test ( 'snapshot: (auditAccessExpired, findAnotherCourse hyperlink)' , ( ) => {
72- expect ( el . snapshot ) . toMatchSnapshot ( ) ;
73- } ) ;
74- test ( 'messages: auditAccessExpired' , ( ) => {
75- expect ( el . instance . children [ 0 ] . children [ 0 ] . el ) . toContain ( messages . auditAccessExpired . defaultMessage ) ;
76- expect ( el . instance . findByType ( Hyperlink ) [ 0 ] . children [ 0 ] . el ) . toEqual ( messages . findAnotherCourse . defaultMessage ) ;
68+ it ( 'should display correct message and link' , ( ) => {
69+ renderCourseBanner ( { enrollment : { isAuditAccessExpired : true } } ) ;
70+ const auditAccessText = screen . getByText ( formatMessage ( messages . auditAccessExpired ) ) ;
71+ expect ( auditAccessText ) . toBeInTheDocument ( ) ;
72+ const auditAccessLink = screen . getByText ( formatMessage ( messages . findAnotherCourse ) ) ;
73+ expect ( auditAccessLink ) . toBeInTheDocument ( ) ;
7774 } ) ;
7875 } ) ;
7976 describe ( 'unmet prerequisites' , ( ) => {
80- beforeEach ( ( ) => {
81- render ( { enrollment : { coursewareAccess : { hasUnmetPrerequisites : true } } } ) ;
82- } ) ;
83- test ( 'snapshot: unmetPrerequisites' , ( ) => {
84- expect ( el . snapshot ) . toMatchSnapshot ( ) ;
85- } ) ;
86- test ( 'messages: prerequisitesNotMet' , ( ) => {
87- expect ( el . instance . children [ 0 ] . children [ 0 ] . el ) . toContain ( messages . prerequisitesNotMet . defaultMessage ) ;
77+ it ( 'should display correct message' , ( ) => {
78+ renderCourseBanner ( { enrollment : { coursewareAccess : { hasUnmetPrerequisites : true } } } ) ;
79+ const preReqText = screen . getByText ( formatMessage ( messages . prerequisitesNotMet ) ) ;
80+ expect ( preReqText ) . toBeInTheDocument ( ) ;
8881 } ) ;
8982 } ) ;
9083 describe ( 'too early' , ( ) => {
9184 describe ( 'no start date' , ( ) => {
92- beforeEach ( ( ) => {
93- render ( { enrollment : { coursewareAccess : { isTooEarly : true } } , courseRun : { startDate : null } } ) ;
85+ it ( 'should not display banner' , ( ) => {
86+ renderCourseBanner ( { enrollment : { coursewareAccess : { isTooEarly : true } } , courseRun : { startDate : null } } ) ;
87+ const banner = screen . queryByRole ( 'alert' ) ;
88+ expect ( banner ) . toBeNull ( ) ;
9489 } ) ;
95- test ( 'snapshot' , ( ) => expect ( el . snapshot ) . toMatchSnapshot ( ) ) ;
96- test ( 'messages' , ( ) => expect ( el . instance . children ) . toEqual ( [ ] ) ) ;
9790 } ) ;
9891 describe ( 'has start date' , ( ) => {
99- beforeEach ( ( ) => {
100- render ( { enrollment : { coursewareAccess : { isTooEarly : true } } } ) ;
101- } ) ;
102- test ( 'snapshot' , ( ) => expect ( el . snapshot ) . toMatchSnapshot ( ) ) ;
103-
104- test ( 'messages: courseHasNotStarted' , ( ) => {
105- expect ( el . instance . children [ 0 ] . children [ 0 ] . el ) . toContain (
92+ it ( 'should display messages courseHasNotStarted' , ( ) => {
93+ renderCourseBanner ( { enrollment : { coursewareAccess : { isTooEarly : true } } } ) ;
94+ const earlyMsg = screen . getByText (
10695 formatMessage ( messages . courseHasNotStarted , { startDate : courseRunData . startDate } ) ,
10796 ) ;
97+ expect ( earlyMsg ) . toBeInTheDocument ( ) ;
10898 } ) ;
10999 } ) ;
110100 } ) ;
111101 describe ( 'staff' , ( ) => {
112- beforeEach ( ( ) => {
113- render ( { enrollment : { coursewareAccess : { isStaff : true } } } ) ;
114- } ) ;
115- test ( 'snapshot: isStaff' , ( ) => {
116- expect ( el . snapshot ) . toMatchSnapshot ( ) ;
117- } ) ;
118- } ) ;
119- test ( 'snapshot: stacking banners' , ( ) => {
120- render ( {
121- enrollment : {
122- coursewareAccess : {
123- isStaff : true ,
124- isTooEarly : true ,
125- hasUnmetPrerequisites : true ,
126- } ,
127- } ,
102+ it ( 'should not display banner' , ( ) => {
103+ renderCourseBanner ( { enrollment : { coursewareAccess : { isStaff : true } } } ) ;
104+ const banner = screen . queryByRole ( 'alert' ) ;
105+ expect ( banner ) . toBeNull ( ) ;
128106 } ) ;
129- expect ( el . snapshot ) . toMatchSnapshot ( ) ;
130107 } ) ;
131108} ) ;
0 commit comments