@@ -163,4 +163,125 @@ class RootTests: XCTestCase {
163
163
XCTFail ( " Expected .none, got \( String ( describing: effect) ) " )
164
164
}
165
165
}
166
+
167
+ func testEventAddTokenFailed( ) {
168
+ var root = Root ( deviceCanScan: false )
169
+ let event : Root . Event = . addTokenFailed( NSError ( ) )
170
+ let effect = root. update ( event)
171
+ // TODO: check that the component state hasn't changed
172
+
173
+ switch effect {
174
+ case . some( . showErrorMessage( " Failed to add token. " ) ) :
175
+ break
176
+ default :
177
+ XCTFail ( " Expected .showErrorMessage( \" Failed to add token. \" ), got \( String ( describing: effect) ) " )
178
+ return
179
+ }
180
+ }
181
+
182
+ // MARK: Events
183
+
184
+ func testEventTokenFormSucceeded( ) {
185
+ var root = Root ( deviceCanScan: false )
186
+
187
+ // Ensure the initial view model has no modal.
188
+ let firstViewModel = root. viewModel ( for: [ ] , at: displayTime)
189
+ switch firstViewModel. modal {
190
+ case . none:
191
+ break
192
+ default :
193
+ XCTFail ( " The initial view model should have no modal. " )
194
+ }
195
+
196
+ // Show the token entry form.
197
+ do {
198
+ let effect = try root. update ( Root . Action. tokenListAction ( . beginAddToken) )
199
+ XCTAssertNil ( effect)
200
+ } catch {
201
+ XCTFail ( " Caught unexpected error: \( error) " )
202
+ }
203
+
204
+ // Ensure the view model now has a modal entry form.
205
+ let secondViewModel = root. viewModel ( for: [ ] , at: displayTime)
206
+ switch secondViewModel. modal {
207
+ case . entryForm:
208
+ break
209
+ default :
210
+ XCTFail ( " The view model should have a modal entry form. " )
211
+ }
212
+
213
+ // Signal token entry success.
214
+ let effect = root. update ( . tokenFormSucceeded)
215
+ XCTAssertNil ( effect)
216
+
217
+ // Ensure the token entry form hides on success.
218
+ let thirdViewModel = root. viewModel ( for: [ ] , at: displayTime)
219
+ switch thirdViewModel. modal {
220
+ case . none:
221
+ break
222
+ default :
223
+ XCTFail ( " The final view model should have no modal. " )
224
+ }
225
+ }
226
+
227
+ func testEventSaveTokenFailed( ) {
228
+ var root = Root ( deviceCanScan: false )
229
+ let event : Root . Event = . saveTokenFailed( NSError ( ) )
230
+ let effect = root. update ( event)
231
+ // TODO: check that the component state hasn't changed
232
+
233
+ switch effect {
234
+ case . some( . showErrorMessage( " Failed to save token. " ) ) :
235
+ break
236
+ default :
237
+ XCTFail ( " Expected .showErrorMessage( \" Failed to save token. \" ), got \( String ( describing: effect) ) " )
238
+ return
239
+ }
240
+ }
241
+
242
+ func testEventUpdateTokenFailed( ) {
243
+ var root = Root ( deviceCanScan: false )
244
+ let event : Root . Event = . updateTokenFailed( NSError ( ) )
245
+ let effect = root. update ( event)
246
+ // TODO: check that the component state hasn't changed
247
+
248
+ switch effect {
249
+ case . some( . showErrorMessage( " Failed to update token. " ) ) :
250
+ break
251
+ default :
252
+ XCTFail ( " Expected .showErrorMessage( \" Failed to update token. \" ), got \( String ( describing: effect) ) " )
253
+ return
254
+ }
255
+ }
256
+
257
+ func testEventMoveTokenFailed( ) {
258
+ var root = Root ( deviceCanScan: false )
259
+ let event : Root . Event = . moveTokenFailed( NSError ( ) )
260
+ let effect = root. update ( event)
261
+ // TODO: check that the component state hasn't changed
262
+
263
+ switch effect {
264
+ case . some( . showErrorMessage( " Failed to move token. " ) ) :
265
+ break
266
+ default :
267
+ XCTFail ( " Expected .showErrorMessage( \" Failed to move token. \" ), got \( String ( describing: effect) ) " )
268
+ return
269
+ }
270
+ }
271
+
272
+ func testEventDeleteTokenFailed( ) {
273
+ var root = Root ( deviceCanScan: false )
274
+ let event : Root . Event = . deleteTokenFailed( NSError ( ) )
275
+ let effect = root. update ( event)
276
+ // TODO: check that the component state hasn't changed
277
+
278
+ switch effect {
279
+ case . some( . showErrorMessage( " Failed to delete token. " ) ) :
280
+ break
281
+ default :
282
+ XCTFail ( " Expected .showErrorMessage( \" Failed to delete token. \" ), got \( String ( describing: effect) ) " )
283
+ return
284
+ }
285
+ }
286
+
166
287
}
0 commit comments