@@ -36,52 +36,61 @@ describe('ShareTimetable', () => {
36
36
const openModal = ( wrapper : ShallowWrapper ) => wrapper . find ( 'button' ) . first ( ) . simulate ( 'click' ) ;
37
37
const closeModal = ( wrapper : ShallowWrapper ) =>
38
38
wrapper . find ( Modal ) . first ( ) . props ( ) . onRequestClose ! ( { } as any ) ;
39
-
40
- const openAndWait = async ( wrapper : ShallowWrapper ) => {
41
- openModal ( wrapper ) ;
42
-
39
+ const shorten = ( wrapper : ShallowWrapper ) =>
40
+ wrapper . find ( 'button[aria-label="Shorten URL"]' ) . simulate ( 'click' ) ;
41
+ const shortenAndWait = async ( wrapper : ShallowWrapper ) => {
42
+ shorten ( wrapper ) ;
43
43
await waitFor ( ( ) => {
44
44
wrapper . update ( ) ;
45
- return wrapper . find ( 'input' ) . exists ( ) ;
45
+ return ! wrapper . find ( LoadingSpinner ) . exists ( ) ;
46
46
} ) ;
47
47
} ;
48
48
49
- test ( 'should load short URL when the modal is opened' , ( ) => {
49
+ test ( 'should load short URL when the shorten button is clicked' , async ( ) => {
50
50
const wrapper = shallow (
51
51
< ShareTimetable semester = { 1 } timetable = { timetable } hiddenModules = { [ ] } taModules = { { } } /> ,
52
52
) ;
53
53
expect ( mockAxios . put ) . not . toHaveBeenCalled ( ) ;
54
54
55
55
openModal ( wrapper ) ;
56
56
expect ( wrapper . find ( Modal ) . exists ( ) ) . toBe ( true ) ;
57
+ // Should not call the API until the shorten button is clicked
58
+ expect ( mockAxios . put ) . toHaveBeenCalledTimes ( 0 ) ;
59
+ shorten ( wrapper ) ;
57
60
expect ( mockAxios . put ) . toHaveBeenCalledTimes ( 1 ) ;
58
61
} ) ;
59
62
60
- test ( 'should cache short URL from the API' , ( ) => {
63
+ test ( 'should cache short URL from the API' , async ( ) => {
61
64
const wrapper = shallow (
62
65
< ShareTimetable semester = { 1 } timetable = { timetable } hiddenModules = { [ ] } taModules = { { } } /> ,
63
66
) ;
64
67
65
- // Open, close and open the modal again
66
- openModal ( wrapper ) ;
67
- closeModal ( wrapper ) ;
68
+ // Open the model, shorten and unshorten again
68
69
openModal ( wrapper ) ;
70
+ await shortenAndWait ( wrapper ) ;
71
+ expect ( mockAxios . put ) . toHaveBeenCalledTimes ( 1 ) ;
72
+ await shortenAndWait ( wrapper ) ;
69
73
70
- // The second open should not cause a second call
74
+ // The second shorten click should not cause a second call
75
+ await shortenAndWait ( wrapper ) ;
71
76
expect ( mockAxios . put ) . toHaveBeenCalledTimes ( 1 ) ;
72
77
closeModal ( wrapper ) ;
73
78
74
- // Changing the timetable should cause opening the modal to trigger another API call
79
+ // Changing the timetable should cause the shorten button to trigger another API call
75
80
wrapper . setProps ( { timetable : { CS3216 : { Lecture : '1' } } } ) ;
81
+ // openModal(wrapper);
76
82
expect ( mockAxios . put ) . toHaveBeenCalledTimes ( 1 ) ;
77
83
openModal ( wrapper ) ;
84
+ await shortenAndWait ( wrapper ) ;
78
85
expect ( mockAxios . put ) . toHaveBeenCalledTimes ( 2 ) ;
86
+ shorten ( wrapper ) ;
79
87
closeModal ( wrapper ) ;
80
88
81
89
// Changing the semester should also trigger another API call
82
90
wrapper . setProps ( { semester : 2 } ) ;
83
91
expect ( mockAxios . put ) . toHaveBeenCalledTimes ( 2 ) ;
84
92
openModal ( wrapper ) ;
93
+ await shortenAndWait ( wrapper ) ;
85
94
expect ( mockAxios . put ) . toHaveBeenCalledTimes ( 3 ) ;
86
95
} ) ;
87
96
@@ -91,6 +100,7 @@ describe('ShareTimetable', () => {
91
100
) ;
92
101
93
102
openModal ( wrapper ) ;
103
+ shorten ( wrapper ) ;
94
104
expect ( wrapper . find ( LoadingSpinner ) . exists ( ) ) . toBe ( true ) ;
95
105
} ) ;
96
106
@@ -99,7 +109,8 @@ describe('ShareTimetable', () => {
99
109
< ShareTimetable semester = { 1 } timetable = { timetable } hiddenModules = { [ ] } taModules = { { } } /> ,
100
110
) ;
101
111
102
- await openAndWait ( wrapper ) ;
112
+ openModal ( wrapper ) ;
113
+ await shortenAndWait ( wrapper ) ;
103
114
104
115
expect ( wrapper . find ( 'input' ) . prop ( 'value' ) ) . toEqual ( MOCK_SHORTURL ) ;
105
116
expect ( wrapper . find ( Maximize2 ) . exists ( ) ) . toBe ( true ) ;
@@ -111,7 +122,8 @@ describe('ShareTimetable', () => {
111
122
< ShareTimetable semester = { 1 } timetable = { timetable } hiddenModules = { [ ] } taModules = { { } } /> ,
112
123
) ;
113
124
114
- await openAndWait ( wrapper ) ;
125
+ openModal ( wrapper ) ;
126
+ await shortenAndWait ( wrapper ) ;
115
127
116
128
expect ( wrapper . find ( 'button' ) . at ( 1 ) . prop ( 'disabled' ) ) . toBe ( true ) ;
117
129
expect ( wrapper . find ( 'input' ) . prop ( 'value' ) ) . toBeTruthy ( ) ;
@@ -123,7 +135,8 @@ describe('ShareTimetable', () => {
123
135
< ShareTimetable semester = { 1 } timetable = { timetable } hiddenModules = { [ ] } taModules = { { } } /> ,
124
136
) ;
125
137
126
- await openAndWait ( wrapper ) ;
138
+ openModal ( wrapper ) ;
139
+ await shortenAndWait ( wrapper ) ;
127
140
128
141
expect ( wrapper . find ( 'button' ) . at ( 1 ) . prop ( 'disabled' ) ) . toBe ( true ) ;
129
142
expect ( wrapper . find ( 'input' ) . prop ( 'value' ) ) . toBeTruthy ( ) ;
@@ -135,7 +148,8 @@ describe('ShareTimetable', () => {
135
148
< ShareTimetable semester = { 1 } timetable = { timetable } hiddenModules = { [ ] } taModules = { { } } /> ,
136
149
) ;
137
150
138
- await openAndWait ( wrapper ) ;
151
+ openModal ( wrapper ) ;
152
+ await shortenAndWait ( wrapper ) ;
139
153
140
154
expect ( wrapper . find ( 'input' ) . prop ( 'value' ) ) . not . toContain ( 'hidden' ) ;
141
155
} ) ;
@@ -151,7 +165,8 @@ describe('ShareTimetable', () => {
151
165
/> ,
152
166
) ;
153
167
154
- await openAndWait ( wrapper ) ;
168
+ openModal ( wrapper ) ;
169
+ await shortenAndWait ( wrapper ) ;
155
170
156
171
expect ( wrapper . find ( 'input' ) . prop ( 'value' ) ) . toContain ( 'hidden=CS1010S,CS1231S' ) ;
157
172
} ) ;
@@ -177,7 +192,8 @@ describe('ShareTimetable', () => {
177
192
/> ,
178
193
) ;
179
194
180
- await openAndWait ( wrapper ) ;
195
+ openModal ( wrapper ) ;
196
+ await shortenAndWait ( wrapper ) ;
181
197
182
198
expect ( wrapper . find ( 'input' ) . prop ( 'value' ) ) . toContain (
183
199
'ta=MA1521(TUT:1),CS1010S(TUT:1,LAB:1),CS1231S(TUT:2,TUT:3)' ,
@@ -189,11 +205,12 @@ describe('ShareTimetable', () => {
189
205
< ShareTimetable semester = { 1 } timetable = { timetable } hiddenModules = { [ ] } taModules = { { } } /> ,
190
206
) ;
191
207
192
- await openAndWait ( wrapper ) ;
208
+ openModal ( wrapper ) ;
209
+ await shortenAndWait ( wrapper ) ;
193
210
expect ( wrapper . find ( 'input' ) . prop ( 'value' ) ) . toEqual ( MOCK_SHORTURL ) ;
194
211
expect ( wrapper . find ( Maximize2 ) . exists ( ) ) . toBe ( true ) ;
195
212
196
- wrapper . find ( 'button' ) . at ( 1 ) . simulate ( 'click' ) ;
213
+ await shortenAndWait ( wrapper ) ;
197
214
expect ( wrapper . find ( Maximize2 ) . exists ( ) ) . toBe ( false ) ;
198
215
expect ( wrapper . find ( Minimize2 ) . exists ( ) ) . toBe ( true ) ;
199
216
expect ( wrapper . find ( 'input' ) . prop ( 'value' ) ) . not . toBe ( MOCK_SHORTURL ) ;
0 commit comments