@@ -6,16 +6,19 @@ import Alamofire
66final class AlamofireNetworkErrorHandlerTests : XCTestCase {
77 private var userDefaults : UserDefaults !
88 private var errorHandler : AlamofireNetworkErrorHandler !
9+ private var notificationCenter : NotificationCenter !
910
1011 override func setUp( ) {
1112 super. setUp ( )
1213 userDefaults = UserDefaults ( suiteName: UUID ( ) . uuidString)
13- errorHandler = AlamofireNetworkErrorHandler ( credentials: createWPComCredentials ( ) , userDefaults: userDefaults)
14+ notificationCenter = NotificationCenter ( )
15+ errorHandler = AlamofireNetworkErrorHandler ( credentials: createWPComCredentials ( ) , userDefaults: userDefaults, notificationCenter: notificationCenter)
1416 }
1517
1618 override func tearDown( ) {
1719 userDefaults = nil
1820 errorHandler = nil
21+ notificationCenter = nil
1922 super. tearDown ( )
2023 }
2124
@@ -38,7 +41,7 @@ final class AlamofireNetworkErrorHandlerTests: XCTestCase {
3841
3942 func test_shouldRetryJetpackRequest_returns_false_for_nil_credentials( ) {
4043 // Given
41- let errorHandlerWithNilCredentials = AlamofireNetworkErrorHandler ( credentials: nil , userDefaults: userDefaults)
44+ let errorHandlerWithNilCredentials = AlamofireNetworkErrorHandler ( credentials: nil , userDefaults: userDefaults, notificationCenter : notificationCenter )
4245 let jetpackRequest = createJetpackRequest ( siteID: 123 )
4346 let restRequest = createRESTRequest ( )
4447 let error = createNetworkError ( )
@@ -57,7 +60,7 @@ final class AlamofireNetworkErrorHandlerTests: XCTestCase {
5760 func test_shouldRetryJetpackRequest_returns_false_for_non_wpcom_credentials( ) {
5861 // Given
5962 let wporgCredentials = Credentials . wporg ( username: " user " , password: " pass " , siteAddress: " https://example.com " )
60- let errorHandlerWithWporg = AlamofireNetworkErrorHandler ( credentials: wporgCredentials, userDefaults: userDefaults)
63+ let errorHandlerWithWporg = AlamofireNetworkErrorHandler ( credentials: wporgCredentials, userDefaults: userDefaults, notificationCenter : notificationCenter )
6164 let jetpackRequest = createJetpackRequest ( siteID: 123 )
6265 let restRequest = createRESTRequest ( )
6366 let error = createNetworkError ( )
@@ -142,6 +145,66 @@ final class AlamofireNetworkErrorHandlerTests: XCTestCase {
142145 XCTAssertTrue ( userDefaults. applicationPasswordUnsupportedList. keys. contains ( String ( newSiteID) ) )
143146 }
144147
148+ // MARK: - Notification Tests
149+
150+ func test_prepareAppPasswordSupport_posts_eligible_notification( ) {
151+ // Given
152+ let siteID : Int64 = 123
153+ var receivedNotifications : [ Notification ] = [ ]
154+
155+ let observer = notificationCenter. addObserver (
156+ forName: . JetpackSiteEligibleForAppPasswordSupport,
157+ object: nil ,
158+ queue: nil
159+ ) { notification in
160+ receivedNotifications. append ( notification)
161+ }
162+
163+ // When
164+ errorHandler. prepareAppPasswordSupport ( for: siteID)
165+
166+ // Then
167+ XCTAssertEqual ( receivedNotifications. count, 1 )
168+ XCTAssertEqual ( receivedNotifications. first? . name, . JetpackSiteEligibleForAppPasswordSupport)
169+ XCTAssertNil ( receivedNotifications. first? . object)
170+
171+ notificationCenter. removeObserver ( observer)
172+ }
173+
174+ func test_flagSiteAsUnsupported_posts_flagged_notification_with_properties( ) {
175+ // Given
176+ let siteID : Int64 = 456
177+ let error = NetworkError . unacceptableStatusCode ( statusCode: 401 , response: Data ( ) )
178+ var receivedNotifications : [ Notification ] = [ ]
179+
180+ let observer = notificationCenter. addObserver (
181+ forName: . JetpackSiteFlaggedUnsupportedForApplicationPassword,
182+ object: nil ,
183+ queue: nil
184+ ) { notification in
185+ receivedNotifications. append ( notification)
186+ }
187+
188+ // When
189+ errorHandler. flagSiteAsUnsupported ( for: siteID, flow: . apiRequest, cause: . majorError, error: error)
190+
191+ // Then
192+ XCTAssertEqual ( receivedNotifications. count, 1 )
193+ XCTAssertEqual ( receivedNotifications. first? . name, . JetpackSiteFlaggedUnsupportedForApplicationPassword)
194+
195+ guard let tracksProperties = receivedNotifications. first? . object as? [ String : Any ] else {
196+ XCTFail ( " Expected tracks properties dictionary " )
197+ return
198+ }
199+
200+ XCTAssertEqual ( tracksProperties [ " flow " ] as? String , " api_request " )
201+ XCTAssertEqual ( tracksProperties [ " cause " ] as? String , " major_error " )
202+ XCTAssertEqual ( tracksProperties [ " http_status_code " ] as? Int , 401 )
203+ XCTAssertNotNil ( tracksProperties [ " api_error_code " ] )
204+
205+ notificationCenter. removeObserver ( observer)
206+ }
207+
145208 // MARK: - Thread Safety Tests
146209
147210 func test_concurrent_prepareAppPasswordSupport_operations_are_thread_safe( ) {
0 commit comments