Browse Source

Audit - Notification Names (#2803)

* Added Notification suffix to Request notification names

* Added notification support for request task events

* Updated did complete task key to match property name
Christian Noon 6 years ago
parent
commit
2346c56493
2 changed files with 81 additions and 16 deletions
  1. 36 11
      Source/Notifications.swift
  2. 45 5
      Tests/SessionDelegateTests.swift

+ 36 - 11
Source/Notifications.swift

@@ -26,13 +26,22 @@ import Foundation
 
 
 public extension Request {
 public extension Request {
     /// Posted when a `Request` is resumed. The `Notification` contains the resumed `Request`.
     /// Posted when a `Request` is resumed. The `Notification` contains the resumed `Request`.
-    static let didResume = Notification.Name(rawValue: "org.alamofire.notification.name.request.didResume")
+    static let didResumeNotification = Notification.Name(rawValue: "org.alamofire.notification.name.request.didResume")
     /// Posted when a `Request` is suspended. The `Notification` contains the suspended `Request`.
     /// Posted when a `Request` is suspended. The `Notification` contains the suspended `Request`.
-    static let didSuspend = Notification.Name(rawValue: "org.alamofire.notification.name.request.didSuspend")
+    static let didSuspendNotification = Notification.Name(rawValue: "org.alamofire.notification.name.request.didSuspend")
     /// Posted when a `Request` is cancelled. The `Notification` contains the cancelled `Request`.
     /// Posted when a `Request` is cancelled. The `Notification` contains the cancelled `Request`.
-    static let didCancel = Notification.Name(rawValue: "org.alamofire.notification.name.request.didCancel")
+    static let didCancelNotification = Notification.Name(rawValue: "org.alamofire.notification.name.request.didCancel")
     /// Posted when a `Request` is finished. The `Notification` contains the completed `Request`.
     /// Posted when a `Request` is finished. The `Notification` contains the completed `Request`.
-    static let didFinish = Notification.Name(rawValue: "org.alamofire.notification.name.request.didFinish")
+    static let didFinishNotification = Notification.Name(rawValue: "org.alamofire.notification.name.request.didFinish")
+
+    /// Posted when a `URLSessionTask` is resumed. The `Notification` contains the `Request` associated with the `URLSessionTask`.
+    static let didResumeTaskNotification = Notification.Name(rawValue: "org.alamofire.notification.name.request.didResumeTask")
+    /// Posted when a `URLSessionTask` is suspended. The `Notification` contains the `Request` associated with the `URLSessionTask`.
+    static let didSuspendTaskNotification = Notification.Name(rawValue: "org.alamofire.notification.name.request.didSuspendTask")
+    /// Posted when a `URLSessionTask` is cancelled. The `Notification` contains the `Request` associated with the `URLSessionTask`.
+    static let didCancelTaskNotification = Notification.Name(rawValue: "org.alamofire.notification.name.request.didCancelTask")
+    /// Posted when a `URLSessionTask` is completed. The `Notification` contains the `Request` associated with the `URLSessionTask`.
+    static let didCompleteTaskNotification = Notification.Name(rawValue: "org.alamofire.notification.name.request.didCompleteTask")
 }
 }
 
 
 // MARK: -
 // MARK: -
@@ -72,19 +81,35 @@ extension String {
 
 
 /// `EventMonitor` that provides Alamofire's notifications.
 /// `EventMonitor` that provides Alamofire's notifications.
 public final class AlamofireNotifications: EventMonitor {
 public final class AlamofireNotifications: EventMonitor {
-    public func requestDidFinish(_ request: Request) {
-        NotificationCenter.default.postNotification(named: Request.didFinish, with: request)
-    }
-
     public func requestDidResume(_ request: Request) {
     public func requestDidResume(_ request: Request) {
-        NotificationCenter.default.postNotification(named: Request.didResume, with: request)
+        NotificationCenter.default.postNotification(named: Request.didResumeNotification, with: request)
     }
     }
 
 
     public func requestDidSuspend(_ request: Request) {
     public func requestDidSuspend(_ request: Request) {
-        NotificationCenter.default.postNotification(named: Request.didSuspend, with: request)
+        NotificationCenter.default.postNotification(named: Request.didSuspendNotification, with: request)
     }
     }
 
 
     public func requestDidCancel(_ request: Request) {
     public func requestDidCancel(_ request: Request) {
-        NotificationCenter.default.postNotification(named: Request.didCancel, with: request)
+        NotificationCenter.default.postNotification(named: Request.didCancelNotification, with: request)
+    }
+
+    public func requestDidFinish(_ request: Request) {
+        NotificationCenter.default.postNotification(named: Request.didFinishNotification, with: request)
+    }
+
+    public func request(_ request: Request, didResumeTask task: URLSessionTask) {
+        NotificationCenter.default.postNotification(named: Request.didResumeTaskNotification, with: request)
+    }
+
+    public func request(_ request: Request, didSuspendTask task: URLSessionTask) {
+        NotificationCenter.default.postNotification(named: Request.didSuspendTaskNotification, with: request)
+    }
+
+    public func request(_ request: Request, didCancelTask task: URLSessionTask) {
+        NotificationCenter.default.postNotification(named: Request.didCancelTaskNotification, with: request)
+    }
+
+    public func request(_ request: Request, didCompleteTask task: URLSessionTask, with error: Error?) {
+        NotificationCenter.default.postNotification(named: Request.didCompleteTaskNotification, with: request)
     }
     }
 }
 }

+ 45 - 5
Tests/SessionDelegateTests.swift

@@ -94,26 +94,42 @@ class SessionDelegateTestCase: BaseTestCase {
         XCTAssertEqual(response?.response?.statusCode, 200)
         XCTAssertEqual(response?.response?.statusCode, 200)
     }
     }
 
 
+    // MARK: - Tests - Notification
+
     func testThatAppropriateNotificationsAreCalledWithRequestForDataRequest() {
     func testThatAppropriateNotificationsAreCalledWithRequestForDataRequest() {
         // Given
         // Given
         let session = Session(startRequestsImmediately: false)
         let session = Session(startRequestsImmediately: false)
         var resumedRequest: Request?
         var resumedRequest: Request?
+        var resumedTaskRequest: Request?
+        var completedTaskRequest: Request?
         var completedRequest: Request?
         var completedRequest: Request?
         var requestResponse: DataResponse<Data?>?
         var requestResponse: DataResponse<Data?>?
         let expect = expectation(description: "request should complete")
         let expect = expectation(description: "request should complete")
 
 
         // When
         // When
-        let request = session.request("https://httpbin.org/get").response { (response) in
+        let request = session.request("https://httpbin.org/get").response { response in
             requestResponse = response
             requestResponse = response
             expect.fulfill()
             expect.fulfill()
         }
         }
-        expectation(forNotification: Request.didResume, object: nil) { (notification) in
+        expectation(forNotification: Request.didResumeNotification, object: nil) { notification in
             guard let receivedRequest = notification.request, receivedRequest == request else { return false }
             guard let receivedRequest = notification.request, receivedRequest == request else { return false }
 
 
             resumedRequest = notification.request
             resumedRequest = notification.request
             return true
             return true
         }
         }
-        expectation(forNotification: Request.didFinish, object: nil) { (notification) in
+        expectation(forNotification: Request.didResumeTaskNotification, object: nil) { notification in
+            guard let receivedRequest = notification.request, receivedRequest == request else { return false }
+
+            resumedTaskRequest = notification.request
+            return true
+        }
+        expectation(forNotification: Request.didCompleteTaskNotification, object: nil) { notification in
+            guard let receivedRequest = notification.request, receivedRequest == request else { return false }
+
+            completedTaskRequest = notification.request
+            return true
+        }
+        expectation(forNotification: Request.didFinishNotification, object: nil) { notification in
             guard let receivedRequest = notification.request, receivedRequest == request else { return false }
             guard let receivedRequest = notification.request, receivedRequest == request else { return false }
 
 
             completedRequest = notification.request
             completedRequest = notification.request
@@ -125,7 +141,12 @@ class SessionDelegateTestCase: BaseTestCase {
         waitForExpectations(timeout: timeout, handler: nil)
         waitForExpectations(timeout: timeout, handler: nil)
 
 
         // Then
         // Then
+        XCTAssertNotNil(resumedRequest)
+        XCTAssertNotNil(resumedTaskRequest)
+        XCTAssertNotNil(completedTaskRequest)
+        XCTAssertNotNil(completedRequest)
         XCTAssertEqual(resumedRequest, completedRequest)
         XCTAssertEqual(resumedRequest, completedRequest)
+        XCTAssertEqual(resumedTaskRequest, completedTaskRequest)
         XCTAssertEqual(requestResponse?.response?.statusCode, 200)
         XCTAssertEqual(requestResponse?.response?.statusCode, 200)
     }
     }
 
 
@@ -133,6 +154,8 @@ class SessionDelegateTestCase: BaseTestCase {
         // Given
         // Given
         let session = Session(startRequestsImmediately: false)
         let session = Session(startRequestsImmediately: false)
         var resumedRequest: Request?
         var resumedRequest: Request?
+        var resumedTaskRequest: Request?
+        var completedTaskRequest: Request?
         var completedRequest: Request?
         var completedRequest: Request?
         var requestResponse: DownloadResponse<URL?>?
         var requestResponse: DownloadResponse<URL?>?
         let expect = expectation(description: "request should complete")
         let expect = expectation(description: "request should complete")
@@ -142,13 +165,25 @@ class SessionDelegateTestCase: BaseTestCase {
             requestResponse = response
             requestResponse = response
             expect.fulfill()
             expect.fulfill()
         }
         }
-        expectation(forNotification: Request.didResume, object: nil) { (notification) in
+        expectation(forNotification: Request.didResumeNotification, object: nil) { notification in
             guard let receivedRequest = notification.request, receivedRequest == request else { return false }
             guard let receivedRequest = notification.request, receivedRequest == request else { return false }
 
 
             resumedRequest = notification.request
             resumedRequest = notification.request
             return true
             return true
         }
         }
-        expectation(forNotification: Request.didFinish, object: nil) { (notification) in
+        expectation(forNotification: Request.didResumeTaskNotification, object: nil) { notification in
+            guard let receivedRequest = notification.request, receivedRequest == request else { return false }
+
+            resumedTaskRequest = notification.request
+            return true
+        }
+        expectation(forNotification: Request.didCompleteTaskNotification, object: nil) { notification in
+            guard let receivedRequest = notification.request, receivedRequest == request else { return false }
+
+            completedTaskRequest = notification.request
+            return true
+        }
+        expectation(forNotification: Request.didFinishNotification, object: nil) { notification in
             guard let receivedRequest = notification.request, receivedRequest == request else { return false }
             guard let receivedRequest = notification.request, receivedRequest == request else { return false }
 
 
             completedRequest = notification.request
             completedRequest = notification.request
@@ -160,7 +195,12 @@ class SessionDelegateTestCase: BaseTestCase {
         waitForExpectations(timeout: timeout, handler: nil)
         waitForExpectations(timeout: timeout, handler: nil)
 
 
         // Then
         // Then
+        XCTAssertNotNil(resumedRequest)
+        XCTAssertNotNil(resumedTaskRequest)
+        XCTAssertNotNil(completedTaskRequest)
+        XCTAssertNotNil(completedRequest)
         XCTAssertEqual(resumedRequest, completedRequest)
         XCTAssertEqual(resumedRequest, completedRequest)
+        XCTAssertEqual(resumedTaskRequest, completedTaskRequest)
         XCTAssertEqual(requestResponse?.response?.statusCode, 200)
         XCTAssertEqual(requestResponse?.response?.statusCode, 200)
     }
     }
 }
 }