Skip to content

Commit e8e770a

Browse files
committed
Add tests for notifications
1 parent 2559736 commit e8e770a

File tree

1 file changed

+66
-3
lines changed

1 file changed

+66
-3
lines changed

Modules/Tests/NetworkingTests/Network/AlamofireNetworkErrorHandlerTests.swift

Lines changed: 66 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,19 @@ import Alamofire
66
final 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

Comments
 (0)