@@ -15,23 +15,51 @@ const mockLearnerData = {
1515 fullName : 'Test User' ,
1616 email : 'test@email.com' ,
1717 isEnrolled : true ,
18+ progressUrl : 'http://example.com/progress' ,
1819} ;
1920
2021describe ( 'SpecifyLearnerField' , ( ) => {
21- describe ( 'when learner is found' , ( ) => {
22+ beforeEach ( ( ) => {
23+ jest . resetAllMocks ( ) ;
24+ ( useCourseInfo as jest . Mock ) . mockReturnValue ( { data : { permissions : { admin : true , dataResearcher : false } } } ) ;
25+ } ) ;
26+
27+ describe ( 'when learner is provided' , ( ) => {
2228 beforeEach ( ( ) => {
23- jest . resetAllMocks ( ) ;
24- ( useCourseInfo as jest . Mock ) . mockReturnValue ( { data : { permissions : { admin : true , dataResearcher : false } } } ) ;
2529 ( useLearner as jest . Mock ) . mockReturnValue ( {
2630 data : mockLearnerData ,
2731 refetch : jest . fn ( ) . mockResolvedValue ( { data : mockLearnerData } ) ,
2832 error : null ,
2933 } ) ;
3034 } ) ;
31- it ( 'renders label and input' , ( ) => {
32- renderWithIntl ( < SpecifyLearnerField onClickSelect = { jest . fn ( ) } /> ) ;
33- expect ( screen . getByText ( messages . specifyLearner . defaultMessage ) ) . toBeInTheDocument ( ) ;
34- expect ( screen . getByPlaceholderText ( messages . specifyLearnerPlaceholder . defaultMessage ) ) . toBeInTheDocument ( ) ;
35+
36+ it ( 'renders selected learner label when learner is provided' , ( ) => {
37+ renderWithIntl ( < SpecifyLearnerField learner = { mockLearnerData } onClickSelect = { jest . fn ( ) } /> ) ;
38+ expect ( screen . getByText ( messages . selectedLearner . defaultMessage ) ) . toBeInTheDocument ( ) ;
39+ expect ( screen . queryByText ( messages . specifyLearner . defaultMessage ) ) . not . toBeInTheDocument ( ) ;
40+ } ) ;
41+
42+ it ( 'shows learner details when learner is provided' , ( ) => {
43+ renderWithIntl ( < SpecifyLearnerField learner = { mockLearnerData } onClickSelect = { jest . fn ( ) } /> ) ;
44+ expect ( screen . getByText ( mockLearnerData . username ) ) . toBeInTheDocument ( ) ;
45+ expect ( screen . getByText ( mockLearnerData . fullName ) ) . toBeInTheDocument ( ) ;
46+ expect ( screen . getByText ( mockLearnerData . email ) ) . toBeInTheDocument ( ) ;
47+ } ) ;
48+
49+ it ( 'hides input field when learner is shown' , ( ) => {
50+ renderWithIntl ( < SpecifyLearnerField learner = { mockLearnerData } onClickSelect = { jest . fn ( ) } /> ) ;
51+ const input = screen . queryByPlaceholderText ( messages . specifyLearnerPlaceholder . defaultMessage ) ;
52+ expect ( input ?. parentNode ) . toHaveClass ( 'd-none' ) ;
53+ } ) ;
54+ } ) ;
55+
56+ describe ( 'when learner is found after search' , ( ) => {
57+ beforeEach ( ( ) => {
58+ ( useLearner as jest . Mock ) . mockReturnValue ( {
59+ data : null ,
60+ refetch : jest . fn ( ) . mockResolvedValue ( { data : mockLearnerData } ) ,
61+ error : null ,
62+ } ) ;
3563 } ) ;
3664
3765 it ( 'renders select button' , ( ) => {
@@ -50,6 +78,43 @@ describe('SpecifyLearnerField', () => {
5078 expect ( handleClick ) . toHaveBeenCalledWith ( mockLearnerData . username ) ;
5179 } ) ;
5280
81+ it ( 'changes to selected learner label after selection' , async ( ) => {
82+ const handleClick = jest . fn ( ) ;
83+ renderWithIntl ( < SpecifyLearnerField onClickSelect = { handleClick } /> ) ;
84+
85+ // Initially shows default label
86+ expect ( screen . getByText ( messages . specifyLearner . defaultMessage ) ) . toBeInTheDocument ( ) ;
87+
88+ // After learner is found and has username, should show selected label
89+ renderWithIntl ( < SpecifyLearnerField learner = { mockLearnerData } onClickSelect = { handleClick } /> ) ;
90+ expect ( screen . getByText ( messages . selectedLearner . defaultMessage ) ) . toBeInTheDocument ( ) ;
91+ } ) ;
92+ } ) ;
93+
94+ describe ( 'when no learner is provided' , ( ) => {
95+ beforeEach ( ( ) => {
96+ ( useLearner as jest . Mock ) . mockReturnValue ( {
97+ data : mockLearnerData ,
98+ refetch : jest . fn ( ) . mockResolvedValue ( { data : mockLearnerData } ) ,
99+ error : null ,
100+ } ) ;
101+ } ) ;
102+
103+ it ( 'renders default label' , ( ) => {
104+ ( useLearner as jest . Mock ) . mockReturnValue ( {
105+ data : null ,
106+ refetch : jest . fn ( ) . mockResolvedValue ( { data : mockLearnerData } ) ,
107+ error : null ,
108+ } ) ;
109+ renderWithIntl ( < SpecifyLearnerField onClickSelect = { jest . fn ( ) } /> ) ;
110+ expect ( screen . getByText ( messages . specifyLearner . defaultMessage ) ) . toBeInTheDocument ( ) ;
111+ } ) ;
112+
113+ it ( 'renders input field and placeholder' , ( ) => {
114+ renderWithIntl ( < SpecifyLearnerField onClickSelect = { jest . fn ( ) } /> ) ;
115+ expect ( screen . getByPlaceholderText ( messages . specifyLearnerPlaceholder . defaultMessage ) ) . toBeInTheDocument ( ) ;
116+ } ) ;
117+
53118 it ( 'input has correct name attribute' , ( ) => {
54119 renderWithIntl ( < SpecifyLearnerField onClickSelect = { jest . fn ( ) } /> ) ;
55120 const input = screen . getByPlaceholderText ( messages . specifyLearnerPlaceholder . defaultMessage ) ;
0 commit comments