@@ -3,7 +3,6 @@ import XCTest
33@testable import WooCommerce
44
55final class CardReaderSettingsConnectedViewModelTests : XCTestCase {
6-
76 func test_did_change_should_show_returns_false_if_no_connected_readers( ) {
87 let mockStoresManager = MockCardPresentPaymentsStoresManager (
98 connectedReaders: [ ] ,
@@ -160,4 +159,132 @@ final class CardReaderSettingsConnectedViewModelTests: XCTestCase {
160159 // Then
161160 wait ( for: [ expectation] , timeout: Constants . expectationTimeout)
162161 }
162+
163+ func test_startCardReaderUpdate_ViewModel_LogsTracksEvent_cardReaderSoftwareUpdateTapped( ) {
164+ // Given
165+ let mockStoresManager = MockCardPresentPaymentsStoresManager (
166+ connectedReaders: [ MockCardReader . bbposChipper2XBT ( ) ] ,
167+ discoveredReaders: [ ] ,
168+ sessionManager: SessionManager . testingInstance
169+ )
170+ ServiceLocator . setStores ( mockStoresManager)
171+
172+ let analytics = MockAnalyticsProvider ( )
173+ ServiceLocator . setAnalytics ( WooAnalytics ( analyticsProvider: analytics) )
174+ let viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: nil )
175+
176+ // When
177+ viewModel. startCardReaderUpdate ( )
178+
179+ // Then
180+ XCTAssert ( analytics. receivedEvents. contains ( WooAnalyticsStat . cardReaderSoftwareUpdateTapped. rawValue) )
181+ }
182+
183+ func test_startCardReaderUpdate_ViewModel_LogsTracksEvent_cardReaderSoftwareUpdateStarted( ) {
184+ // Given
185+ let mockStoresManager = MockCardPresentPaymentsStoresManager (
186+ connectedReaders: [ MockCardReader . bbposChipper2XBT ( ) ] ,
187+ discoveredReaders: [ ] ,
188+ sessionManager: SessionManager . testingInstance
189+ )
190+ ServiceLocator . setStores ( mockStoresManager)
191+
192+ let analytics = MockAnalyticsProvider ( )
193+ ServiceLocator . setAnalytics ( WooAnalytics ( analyticsProvider: analytics) )
194+ let viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: nil )
195+
196+ // When
197+ mockStoresManager. simulateUpdateStarted ( )
198+
199+ // Then
200+ XCTAssert ( analytics. receivedEvents. contains ( WooAnalyticsStat . cardReaderSoftwareUpdateStarted. rawValue) )
201+ }
202+
203+ func test_WhenStoreSendsUpdateComplete_ViewModel_LogsTracksEvent_cardReaderSoftwareUpdateSuccess( ) {
204+ // Given
205+ let mockStoresManager = MockCardPresentPaymentsStoresManager (
206+ connectedReaders: [ MockCardReader . bbposChipper2XBT ( ) ] ,
207+ discoveredReaders: [ ] ,
208+ sessionManager: SessionManager . testingInstance
209+ )
210+ ServiceLocator . setStores ( mockStoresManager)
211+
212+ let analytics = MockAnalyticsProvider ( )
213+ ServiceLocator . setAnalytics ( WooAnalytics ( analyticsProvider: analytics) )
214+ let viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: nil )
215+
216+ // When
217+ mockStoresManager. simulateSuccessfulUpdate ( )
218+
219+ // Then
220+ XCTAssert ( analytics. receivedEvents. contains ( WooAnalyticsStat . cardReaderSoftwareUpdateSuccess. rawValue) )
221+ }
222+
223+ func test_WhenStoreSendsUpdateFailed_ViewModel_LogsTracksEvent_cardReaderSoftwareUpdateFailed( ) {
224+ // Given
225+ let mockStoresManager = MockCardPresentPaymentsStoresManager (
226+ connectedReaders: [ MockCardReader . bbposChipper2XBT ( ) ] ,
227+ discoveredReaders: [ ] ,
228+ sessionManager: SessionManager . testingInstance
229+ )
230+ ServiceLocator . setStores ( mockStoresManager)
231+
232+ let analytics = MockAnalyticsProvider ( )
233+ ServiceLocator . setAnalytics ( WooAnalytics ( analyticsProvider: analytics) )
234+ let viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: nil )
235+
236+ // When
237+ let expectedError = CardReaderServiceError . softwareUpdate ( underlyingError: . readerSoftwareUpdateFailedBatteryLow,
238+ batteryLevel: 0.4 )
239+ mockStoresManager. simulateFailedUpdate ( error: expectedError)
240+
241+ // Then
242+ XCTAssert ( analytics. receivedEvents. contains ( WooAnalyticsStat . cardReaderSoftwareUpdateFailed. rawValue) )
243+ }
244+
245+ func test_WhenUserCancelsUpdate_ViewModel_LogsTracksEvent_cardReaderSoftwareUpdateCancelTapped( ) {
246+ // Given
247+ let mockStoresManager = MockCardPresentPaymentsStoresManager (
248+ connectedReaders: [ MockCardReader . bbposChipper2XBT ( ) ] ,
249+ discoveredReaders: [ ] ,
250+ sessionManager: SessionManager . testingInstance
251+ )
252+ ServiceLocator . setStores ( mockStoresManager)
253+
254+ let analytics = MockAnalyticsProvider ( )
255+ ServiceLocator . setAnalytics ( WooAnalytics ( analyticsProvider: analytics) )
256+ let viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: nil )
257+
258+ // When
259+ viewModel. cancelCardReaderUpdate ( )
260+
261+ // Then
262+ XCTAssert ( analytics. receivedEvents. contains ( WooAnalyticsStat . cardReaderSoftwareUpdateCancelTapped. rawValue) )
263+ }
264+
265+ func test_WhenUpdateIsSuccessfullyCanceled_ViewModel_LogsTracksEvent_cardReaderSoftwareUpdateCanceled( ) {
266+ // Given
267+ let mockStoresManager = MockCardPresentPaymentsStoresManager (
268+ connectedReaders: [ MockCardReader . bbposChipper2XBT ( ) ] ,
269+ discoveredReaders: [ ] ,
270+ sessionManager: SessionManager . testingInstance
271+ )
272+ ServiceLocator . setStores ( mockStoresManager)
273+
274+ let analytics = MockAnalyticsProvider ( )
275+ ServiceLocator . setAnalytics ( WooAnalytics ( analyticsProvider: analytics) )
276+ let viewModel = CardReaderSettingsConnectedViewModel ( didChangeShouldShow: nil )
277+ let expectation = self . expectation ( description: #function)
278+
279+ mockStoresManager. simulateCancelableUpdate {
280+ expectation. fulfill ( )
281+ }
282+
283+ // When
284+ viewModel. cancelCardReaderUpdate ( )
285+
286+ // Then
287+ wait ( for: [ expectation] , timeout: Constants . expectationTimeout)
288+ XCTAssert ( analytics. receivedEvents. contains ( WooAnalyticsStat . cardReaderSoftwareUpdateCanceled. rawValue) )
289+ }
163290}
0 commit comments