未验证 提交 2346c564 编写于 作者: C Christian Noon 提交者: GitHub

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
上级 dc836f64
......@@ -26,13 +26,22 @@ import Foundation
public extension 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`.
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`.
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`.
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: -
......@@ -72,19 +81,35 @@ extension String {
/// `EventMonitor` that provides Alamofire's notifications.
public final class AlamofireNotifications: EventMonitor {
public func requestDidFinish(_ request: Request) {
NotificationCenter.default.postNotification(named: Request.didFinish, with: 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) {
NotificationCenter.default.postNotification(named: Request.didSuspend, with: request)
NotificationCenter.default.postNotification(named: Request.didSuspendNotification, with: 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)
}
}
......@@ -94,26 +94,42 @@ class SessionDelegateTestCase: BaseTestCase {
XCTAssertEqual(response?.response?.statusCode, 200)
}
// MARK: - Tests - Notification
func testThatAppropriateNotificationsAreCalledWithRequestForDataRequest() {
// Given
let session = Session(startRequestsImmediately: false)
var resumedRequest: Request?
var resumedTaskRequest: Request?
var completedTaskRequest: Request?
var completedRequest: Request?
var requestResponse: DataResponse<Data?>?
let expect = expectation(description: "request should complete")
// 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
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 }
resumedRequest = notification.request
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 }
completedRequest = notification.request
......@@ -125,7 +141,12 @@ class SessionDelegateTestCase: BaseTestCase {
waitForExpectations(timeout: timeout, handler: nil)
// Then
XCTAssertNotNil(resumedRequest)
XCTAssertNotNil(resumedTaskRequest)
XCTAssertNotNil(completedTaskRequest)
XCTAssertNotNil(completedRequest)
XCTAssertEqual(resumedRequest, completedRequest)
XCTAssertEqual(resumedTaskRequest, completedTaskRequest)
XCTAssertEqual(requestResponse?.response?.statusCode, 200)
}
......@@ -133,6 +154,8 @@ class SessionDelegateTestCase: BaseTestCase {
// Given
let session = Session(startRequestsImmediately: false)
var resumedRequest: Request?
var resumedTaskRequest: Request?
var completedTaskRequest: Request?
var completedRequest: Request?
var requestResponse: DownloadResponse<URL?>?
let expect = expectation(description: "request should complete")
......@@ -142,13 +165,25 @@ class SessionDelegateTestCase: BaseTestCase {
requestResponse = response
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 }
resumedRequest = notification.request
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 }
completedRequest = notification.request
......@@ -160,7 +195,12 @@ class SessionDelegateTestCase: BaseTestCase {
waitForExpectations(timeout: timeout, handler: nil)
// Then
XCTAssertNotNil(resumedRequest)
XCTAssertNotNil(resumedTaskRequest)
XCTAssertNotNil(completedTaskRequest)
XCTAssertNotNil(completedRequest)
XCTAssertEqual(resumedRequest, completedRequest)
XCTAssertEqual(resumedTaskRequest, completedTaskRequest)
XCTAssertEqual(requestResponse?.response?.statusCode, 200)
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册