@@ -203,6 +203,78 @@ final class AppCoordinatorTests: XCTestCase {
203203 // Then
204204 XCTAssertEqual ( analytics. receivedEvents, [ WooAnalyticsStat . loginOnboardingShown. rawValue] )
205205 }
206+
207+ // MARK: - Login reminder analytics
208+
209+ func test_loginLocalNotificationTapped_is_tracked_after_notification_contact_support_action( ) throws {
210+ // Given
211+ let analytics = MockAnalyticsProvider ( )
212+ let pushNotesManager = MockPushNotificationsManager ( )
213+ let appCoordinator = makeCoordinator ( window: window,
214+ stores: stores,
215+ authenticationManager: authenticationManager,
216+ analytics: WooAnalytics ( analyticsProvider: analytics) ,
217+ pushNotesManager: pushNotesManager)
218+ appCoordinator. start ( )
219+
220+ // When
221+ let response = try XCTUnwrap ( MockNotificationResponse ( actionIdentifier: LocalNotification . Action. contactSupport. rawValue,
222+ requestIdentifier: LocalNotification . Scenario. loginSiteAddressError. rawValue) )
223+ pushNotesManager. sendLocalNotificationResponse ( response)
224+
225+ // Then
226+ XCTAssertEqual ( analytics. receivedEvents, [ WooAnalyticsStat . loginLocalNotificationTapped. rawValue] )
227+ let actionPropertyValue = try XCTUnwrap ( analytics. receivedProperties. first ? [ " action " ] as? String )
228+ XCTAssertEqual ( actionPropertyValue, " contact_support " )
229+ let typePropertyValue = try XCTUnwrap ( analytics. receivedProperties. first ? [ " type " ] as? String )
230+ XCTAssertEqual ( typePropertyValue, " site_address_error " )
231+ }
232+
233+ func test_loginLocalNotificationTapped_is_tracked_after_notification_tap_action( ) throws {
234+ // Given
235+ let analytics = MockAnalyticsProvider ( )
236+ let pushNotesManager = MockPushNotificationsManager ( )
237+ let appCoordinator = makeCoordinator ( window: window,
238+ stores: stores,
239+ authenticationManager: authenticationManager,
240+ analytics: WooAnalytics ( analyticsProvider: analytics) ,
241+ pushNotesManager: pushNotesManager)
242+ appCoordinator. start ( )
243+
244+ // When
245+ let response = try XCTUnwrap ( MockNotificationResponse ( actionIdentifier: UNNotificationDefaultActionIdentifier,
246+ requestIdentifier: LocalNotification . Scenario. loginSiteAddressError. rawValue) )
247+ pushNotesManager. sendLocalNotificationResponse ( response)
248+
249+ // Then
250+ XCTAssertEqual ( analytics. receivedEvents, [ WooAnalyticsStat . loginLocalNotificationTapped. rawValue] )
251+ let actionPropertyValue = try XCTUnwrap ( analytics. receivedProperties. first ? [ " action " ] as? String )
252+ XCTAssertEqual ( actionPropertyValue, " default " )
253+ let typePropertyValue = try XCTUnwrap ( analytics. receivedProperties. first ? [ " type " ] as? String )
254+ XCTAssertEqual ( typePropertyValue, " site_address_error " )
255+ }
256+
257+ func test_loginLocalNotificationDismissed_is_tracked_after_notification_dismiss_action( ) throws {
258+ // Given
259+ let analytics = MockAnalyticsProvider ( )
260+ let pushNotesManager = MockPushNotificationsManager ( )
261+ let appCoordinator = makeCoordinator ( window: window,
262+ stores: stores,
263+ authenticationManager: authenticationManager,
264+ analytics: WooAnalytics ( analyticsProvider: analytics) ,
265+ pushNotesManager: pushNotesManager)
266+ appCoordinator. start ( )
267+
268+ // When
269+ let response = try XCTUnwrap ( MockNotificationResponse ( actionIdentifier: UNNotificationDismissActionIdentifier,
270+ requestIdentifier: LocalNotification . Scenario. loginSiteAddressError. rawValue) )
271+ pushNotesManager. sendLocalNotificationResponse ( response)
272+
273+ // Then
274+ XCTAssertEqual ( analytics. receivedEvents, [ WooAnalyticsStat . loginLocalNotificationDismissed. rawValue] )
275+ let typePropertyValue = try XCTUnwrap ( analytics. receivedProperties. first ? [ " type " ] as? String )
276+ XCTAssertEqual ( typePropertyValue, " site_address_error " )
277+ }
206278}
207279
208280private extension AppCoordinatorTests {
@@ -213,13 +285,15 @@ private extension AppCoordinatorTests {
213285 roleEligibilityUseCase: RoleEligibilityUseCaseProtocol ? = nil ,
214286 analytics: Analytics = ServiceLocator . analytics,
215287 loggedOutAppSettings: LoggedOutAppSettingsProtocol = MockLoggedOutAppSettings ( ) ,
288+ pushNotesManager: PushNotesManager = ServiceLocator . pushNotesManager,
216289 featureFlagService: FeatureFlagService = MockFeatureFlagService ( ) ) -> AppCoordinator {
217290 return AppCoordinator ( window: window ?? self . window,
218291 stores: stores ?? self . stores,
219292 authenticationManager: authenticationManager ?? self . authenticationManager,
220293 roleEligibilityUseCase: roleEligibilityUseCase ?? MockRoleEligibilityUseCase ( ) ,
221294 analytics: analytics,
222295 loggedOutAppSettings: loggedOutAppSettings,
296+ pushNotesManager: pushNotesManager,
223297 featureFlagService: featureFlagService)
224298 }
225299}
0 commit comments