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' ;
4
3
5
4
import { reduxHooks } from 'hooks' ;
6
5
import { formatMessage } from 'testUtils' ;
7
6
import { CourseBanner } from './CourseBanner' ;
8
7
9
8
import messages from './messages' ;
10
9
11
- jest . mock ( 'components/Banner' , ( ) => 'Banner' ) ;
12
10
jest . mock ( 'hooks' , ( ) => ( {
13
11
utilHooks : {
14
12
useFormatDate : ( ) => date => date ,
@@ -19,9 +17,11 @@ jest.mock('hooks', () => ({
19
17
} ,
20
18
} ) ) ;
21
19
22
- const cardId = 'my-test-course-number' ;
20
+ jest . unmock ( '@openedx/paragon' ) ;
21
+ jest . unmock ( '@edx/frontend-platform/i18n' ) ;
22
+ jest . unmock ( 'react' ) ;
23
23
24
- let el ;
24
+ const cardId = 'test-card-id' ;
25
25
26
26
const enrollmentData = {
27
27
isVerified : false ,
@@ -38,7 +38,7 @@ const courseRunData = {
38
38
marketingUrl : 'marketing-url' ,
39
39
} ;
40
40
41
- const render = ( overrides = { } ) => {
41
+ const renderCourseBanner = ( overrides = { } ) => {
42
42
const {
43
43
courseRun = { } ,
44
44
enrollment = { } ,
@@ -51,81 +51,58 @@ const render = (overrides = {}) => {
51
51
...enrollmentData ,
52
52
...enrollment ,
53
53
} ) ;
54
- el = shallow ( < CourseBanner cardId = { cardId } /> ) ;
54
+ return render ( < IntlProvider locale = "en" > < CourseBanner cardId = { cardId } /> </ IntlProvider > ) ;
55
55
} ;
56
56
57
57
describe ( '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 ( ) ;
60
60
expect ( reduxHooks . useCardCourseRunData ) . toHaveBeenCalledWith ( cardId ) ;
61
61
expect ( reduxHooks . useCardEnrollmentData ) . toHaveBeenCalledWith ( cardId ) ;
62
62
} ) ;
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 ( ) ;
66
66
} ) ;
67
67
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 ( ) ;
77
74
} ) ;
78
75
} ) ;
79
76
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 ( ) ;
88
81
} ) ;
89
82
} ) ;
90
83
describe ( 'too early' , ( ) => {
91
84
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 ( ) ;
94
89
} ) ;
95
- test ( 'snapshot' , ( ) => expect ( el . snapshot ) . toMatchSnapshot ( ) ) ;
96
- test ( 'messages' , ( ) => expect ( el . instance . children ) . toEqual ( [ ] ) ) ;
97
90
} ) ;
98
91
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 (
106
95
formatMessage ( messages . courseHasNotStarted , { startDate : courseRunData . startDate } ) ,
107
96
) ;
97
+ expect ( earlyMsg ) . toBeInTheDocument ( ) ;
108
98
} ) ;
109
99
} ) ;
110
100
} ) ;
111
101
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 ( ) ;
128
106
} ) ;
129
- expect ( el . snapshot ) . toMatchSnapshot ( ) ;
130
107
} ) ;
131
108
} ) ;
0 commit comments