1
- import { shallow } from '@edx/react-unit-test-utils' ;
1
+ import React from 'react' ;
2
+ import { render , screen } from '@testing-library/react' ;
3
+ import '@testing-library/jest-dom' ;
2
4
3
5
import ReadOnlyAssessment from './ReadOnlyAssessment' ;
4
6
5
- jest . mock ( './CollapsibleAssessment' , ( ) => 'CollapsibleAssessment' ) ;
6
- jest . mock ( './AssessmentCriteria' , ( ) => 'AssessmentCriteria' ) ;
7
+ jest . unmock ( '@openedx/paragon' ) ;
8
+ jest . unmock ( 'react' ) ;
9
+ jest . unmock ( '@edx/frontend-platform/i18n' ) ;
10
+
11
+ /* eslint-disable react/prop-types */
12
+ jest . mock (
13
+ './CollapsibleAssessment' ,
14
+ ( ) => ( {
15
+ children, stepLabel, stepScore, defaultOpen,
16
+ } ) => (
17
+ < section aria-label = "Collapsible Assessment" >
18
+ < div aria-label = "Assessment Properties" >
19
+ stepLabel: { stepLabel || 'none' } , stepScore:{ ' ' }
20
+ { stepScore ? `${ stepScore . earned } /${ stepScore . total } ` : 'none' } ,
21
+ defaultOpen: { defaultOpen ?. toString ( ) || 'false' }
22
+ </ div >
23
+ { children }
24
+ </ section >
25
+ ) ,
26
+ ) ;
27
+
28
+ jest . mock ( './AssessmentCriteria' , ( ) => ( { stepLabel, ...props } ) => (
29
+ < article aria-label = { `Assessment Criteria for ${ stepLabel || 'unknown' } ` } >
30
+ AssessmentCriteria - stepLabel: { stepLabel || 'none' }
31
+ < div aria-label = "Criteria Properties" > { JSON . stringify ( props ) } </ div >
32
+ </ article >
33
+ ) ) ;
7
34
8
35
describe ( '<ReadOnlyAssessment />' , ( ) => {
9
36
const props = {
@@ -15,16 +42,33 @@ describe('<ReadOnlyAssessment />', () => {
15
42
earned : 5 ,
16
43
total : 10 ,
17
44
} ,
45
+ stepLabel : 'Test Step' ,
46
+ defaultOpen : false ,
18
47
} ;
19
48
20
- it ( 'render with assessment' , ( ) => {
21
- const wrapper = shallow ( < ReadOnlyAssessment { ...props } /> ) ;
22
- expect ( wrapper . snapshot ) . toMatchSnapshot ( ) ;
49
+ it ( 'renders with single assessment' , ( ) => {
50
+ render ( < ReadOnlyAssessment { ...props } /> ) ;
51
+
52
+ expect ( screen . getByLabelText ( 'Collapsible Assessment' ) ) . toBeInTheDocument ( ) ;
23
53
24
- expect ( wrapper . instance . findByType ( 'AssessmentCriteria' ) . length ) . toBe ( 1 ) ;
54
+ const assessmentProps = screen . getByLabelText ( 'Assessment Properties' ) ;
55
+ expect ( assessmentProps ) . toHaveTextContent ( 'stepLabel: Test Step' ) ;
56
+ expect ( assessmentProps ) . toHaveTextContent ( 'stepScore: 5/10' ) ;
57
+ expect ( assessmentProps ) . toHaveTextContent ( 'defaultOpen: false' ) ;
58
+
59
+ const assessmentCriteria = screen . getAllByLabelText (
60
+ / A s s e s s m e n t C r i t e r i a f o r / ,
61
+ ) ;
62
+ expect ( assessmentCriteria ) . toHaveLength ( 1 ) ;
63
+ expect ( assessmentCriteria [ 0 ] ) . toHaveTextContent (
64
+ 'AssessmentCriteria - stepLabel: Test Step' ,
65
+ ) ;
66
+
67
+ const criteriaProps = screen . getByLabelText ( 'Criteria Properties' ) ;
68
+ expect ( criteriaProps ) . toHaveTextContent ( '"abc":"def"' ) ;
25
69
} ) ;
26
70
27
- it ( 'render with assessments' , ( ) => {
71
+ it ( 'renders with multiple assessments' , ( ) => {
28
72
const assessments = [
29
73
{
30
74
abc : 'def' ,
@@ -33,14 +77,43 @@ describe('<ReadOnlyAssessment />', () => {
33
77
ghi : 'jkl' ,
34
78
} ,
35
79
] ;
36
- const wrapper = shallow ( < ReadOnlyAssessment { ...props } assessments = { assessments } /> ) ;
37
- expect ( wrapper . snapshot ) . toMatchSnapshot ( ) ;
80
+ render ( < ReadOnlyAssessment { ...props } assessments = { assessments } /> ) ;
81
+
82
+ expect ( screen . getByLabelText ( 'Collapsible Assessment' ) ) . toBeInTheDocument ( ) ;
38
83
39
- expect ( wrapper . instance . findByType ( 'AssessmentCriteria' ) . length ) . toBe ( 2 ) ;
84
+ const assessmentProps = screen . getByLabelText ( 'Assessment Properties' ) ;
85
+ expect ( assessmentProps ) . toHaveTextContent ( 'stepLabel: Test Step' ) ;
86
+ expect ( assessmentProps ) . toHaveTextContent ( 'stepScore: 5/10' ) ;
87
+
88
+ const assessmentCriteria = screen . getAllByLabelText (
89
+ / A s s e s s m e n t C r i t e r i a f o r / ,
90
+ ) ;
91
+ expect ( assessmentCriteria ) . toHaveLength ( 2 ) ;
92
+
93
+ expect ( screen . getByText ( 'Test Step 1:' ) ) . toBeInTheDocument ( ) ;
94
+ expect ( screen . getByText ( 'Test Step 2:' ) ) . toBeInTheDocument ( ) ;
95
+
96
+ const criteriaProps = screen . getAllByLabelText ( 'Criteria Properties' ) ;
97
+ expect ( criteriaProps [ 0 ] ) . toHaveTextContent ( '"abc":"def"' ) ;
98
+ expect ( criteriaProps [ 1 ] ) . toHaveTextContent ( '"ghi":"jkl"' ) ;
40
99
} ) ;
41
100
42
101
it ( 'renders without props' , ( ) => {
43
- const wrapper = shallow ( < ReadOnlyAssessment /> ) ;
44
- expect ( wrapper . snapshot ) . toMatchSnapshot ( ) ;
102
+ render ( < ReadOnlyAssessment /> ) ;
103
+
104
+ expect ( screen . getByLabelText ( 'Collapsible Assessment' ) ) . toBeInTheDocument ( ) ;
105
+
106
+ const assessmentProps = screen . getByLabelText ( 'Assessment Properties' ) ;
107
+ expect ( assessmentProps ) . toHaveTextContent ( 'stepLabel: none' ) ;
108
+ expect ( assessmentProps ) . toHaveTextContent ( 'stepScore: none' ) ;
109
+ expect ( assessmentProps ) . toHaveTextContent ( 'defaultOpen: false' ) ;
110
+
111
+ const assessmentCriteria = screen . getAllByLabelText (
112
+ / A s s e s s m e n t C r i t e r i a f o r / ,
113
+ ) ;
114
+ expect ( assessmentCriteria ) . toHaveLength ( 1 ) ;
115
+ expect ( assessmentCriteria [ 0 ] ) . toHaveTextContent (
116
+ 'AssessmentCriteria - stepLabel: none' ,
117
+ ) ;
45
118
} ) ;
46
119
} ) ;
0 commit comments