@@ -19,7 +19,8 @@ final class CardReaderSettingsConnectedViewModelTests: XCTestCase {
1919 analytics = MockAnalyticsProvider ( )
2020 ServiceLocator . setAnalytics ( WooAnalytics ( analyticsProvider: analytics) )
2121
22- viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: nil )
22+ viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: nil ,
23+ delayToShowUpdateSuccessMessage: . milliseconds( 1 ) )
2324 }
2425
2526 func test_did_change_should_show_returns_false_if_no_connected_readers( ) {
@@ -34,7 +35,8 @@ final class CardReaderSettingsConnectedViewModelTests: XCTestCase {
3435 let _ = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: { shouldShow in
3536 XCTAssertTrue ( shouldShow == . isFalse)
3637 expectation. fulfill ( )
37- } )
38+ } ,
39+ delayToShowUpdateSuccessMessage: . milliseconds( 1 ) )
3840
3941 wait ( for: [ expectation] , timeout: Constants . expectationTimeout)
4042 }
@@ -45,7 +47,8 @@ final class CardReaderSettingsConnectedViewModelTests: XCTestCase {
4547 viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: { shouldShow in
4648 XCTAssertTrue ( shouldShow == . isTrue)
4749 expectation. fulfill ( )
48- } )
50+ } ,
51+ delayToShowUpdateSuccessMessage: . milliseconds( 1 ) )
4952
5053 wait ( for: [ expectation] , timeout: Constants . expectationTimeout)
5154 }
@@ -63,12 +66,14 @@ final class CardReaderSettingsConnectedViewModelTests: XCTestCase {
6366 )
6467 ServiceLocator . setStores ( mockStoresManager)
6568
66- viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: nil )
69+ viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: nil ,
70+ delayToShowUpdateSuccessMessage: . milliseconds( 1 ) )
6771 XCTAssertEqual ( viewModel. connectedReaderBatteryLevel, " Unknown Battery Level " )
6872 }
6973
7074 func test_view_model_correctly_formats_connected_card_reader_software_version( ) {
71- let viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: nil )
75+ let viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: nil ,
76+ delayToShowUpdateSuccessMessage: . milliseconds( 1 ) )
7277 XCTAssertEqual ( viewModel. connectedReaderSoftwareVersion, " Version: 1.00.03.34-SZZZ_Generic_v45-300001 " )
7378 }
7479
@@ -80,7 +85,8 @@ final class CardReaderSettingsConnectedViewModelTests: XCTestCase {
8085 )
8186 ServiceLocator . setStores ( mockStoresManager)
8287
83- viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: nil )
88+ viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: nil ,
89+ delayToShowUpdateSuccessMessage: . milliseconds( 1 ) )
8490 XCTAssertEqual ( viewModel. connectedReaderSoftwareVersion, " Unknown Software Version " )
8591 }
8692
@@ -124,7 +130,8 @@ final class CardReaderSettingsConnectedViewModelTests: XCTestCase {
124130 )
125131 ServiceLocator . setStores ( mockStoresManager)
126132
127- viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: nil )
133+ viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: nil ,
134+ delayToShowUpdateSuccessMessage: . milliseconds( 1 ) )
128135
129136 var updateDidBegin = false
130137
@@ -232,4 +239,66 @@ final class CardReaderSettingsConnectedViewModelTests: XCTestCase {
232239 wait ( for: [ expectation] , timeout: Constants . expectationTimeout)
233240 XCTAssertFalse ( analytics. receivedEvents. contains ( WooAnalyticsStat . cardReaderSoftwareUpdateFailed. rawValue) )
234241 }
242+
243+ func test_when_a_mandatory_update_succeeds_optional_updates_are_not_available( ) {
244+ // Given
245+ // .available is not sent
246+ mockStoresManager. simulateUpdateStarted ( )
247+ let expectation = self . expectation ( description: #function)
248+ viewModel. didUpdate = { [ weak self] in
249+ if self ? . viewModel. readerUpdateProgress == nil { //ensures that we wait until completeCardReaderUpdate()
250+ expectation. fulfill ( )
251+ }
252+ }
253+
254+ // When
255+ mockStoresManager. simulateSuccessfulUpdate ( )
256+
257+ // Then
258+ wait ( for: [ expectation] , timeout: Constants . expectationTimeout)
259+ XCTAssertFalse ( viewModel. optionalReaderUpdateAvailable)
260+ }
261+
262+ func test_when_an_optional_update_succeeds_optional_updates_are_not_available( ) {
263+ // Given
264+ mockStoresManager. simulateOptionalUpdateAvailable ( )
265+ mockStoresManager. simulateUpdateStarted ( )
266+ let expectation = self . expectation ( description: #function)
267+ viewModel. didUpdate = { [ weak self] in
268+ if self ? . viewModel. readerUpdateProgress == nil { //ensures that we wait until completeCardReaderUpdate()
269+ expectation. fulfill ( )
270+ }
271+ }
272+
273+ // When
274+ mockStoresManager. simulateSuccessfulUpdate ( )
275+
276+ // Then
277+ wait ( for: [ expectation] , timeout: Constants . expectationTimeout)
278+ XCTAssertFalse ( viewModel. optionalReaderUpdateAvailable)
279+ }
280+
281+ func test_when_a_mandatory_update_fails_optional_updates_are_not_available( ) {
282+ // Given
283+ // .available is not sent
284+ mockStoresManager. simulateUpdateStarted ( )
285+
286+ // When
287+ mockStoresManager. simulateFailedUpdate ( error: CardReaderServiceError . bluetoothDenied)
288+
289+ // Then
290+ XCTAssertFalse ( viewModel. optionalReaderUpdateAvailable)
291+ }
292+
293+ func test_when_an_optional_update_fails_optional_updates_are_available( ) {
294+ // Given
295+ mockStoresManager. simulateOptionalUpdateAvailable ( )
296+ mockStoresManager. simulateUpdateStarted ( )
297+
298+ // When
299+ mockStoresManager. simulateFailedUpdate ( error: CardReaderServiceError . bluetoothDenied)
300+
301+ // Then
302+ XCTAssertTrue ( viewModel. optionalReaderUpdateAvailable)
303+ }
235304}
0 commit comments