Skip to content

Commit 7a619b5

Browse files
committed
Add Root.Event tests
1 parent 550b09f commit 7a619b5

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed

AuthenticatorTests/RootTests.swift

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,4 +163,125 @@ class RootTests: XCTestCase {
163163
XCTFail("Expected .none, got \(String(describing: effect))")
164164
}
165165
}
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+
166287
}

0 commit comments

Comments
 (0)