From 4b7214ceea8835d495736853b087bd3b716d2c6a Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 15 Mar 2016 17:40:45 +0000 Subject: [PATCH 1/2] Added matchers that check whether a request has a particular header present, and a matcher to check if a request has a header with a key and value. --- .../Sources/Swift/OHHTTPStubsSwift.swift | 24 +++++++++++ .../Test Suites/SwiftHelpersTests.swift | 43 +++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/OHHTTPStubs/Sources/Swift/OHHTTPStubsSwift.swift b/OHHTTPStubs/Sources/Swift/OHHTTPStubsSwift.swift index 2e75aee7..f10612b4 100644 --- a/OHHTTPStubs/Sources/Swift/OHHTTPStubsSwift.swift +++ b/OHHTTPStubs/Sources/Swift/OHHTTPStubsSwift.swift @@ -190,7 +190,31 @@ public func containsQueryParams(params: [String:String?]) -> OHHTTPStubsTestBloc } } +/** + * Matcher testing that the `NSURLRequest` headers contain a specific key + * - Parameter name: the name of the key to search for in the `NSURLRequest`'s **allHTTPHeaderFields** property + * + * - Returns: a matcher that returns true if the `NSURLRequest`'s headers contain a value for the key name + */ +public func hasHeaderNamed(name: String) -> OHHTTPStubsTestBlock { + return { (req: NSURLRequest) -> Bool in + return req.valueForHTTPHeaderField(name) != nil + } +} +/** + * Matcher testing that the `NSURLRequest` headers contain a specific key and the key's value is equal to the parameter value + * - Parameter name: the name of the key to search for in the `NSURLRequest`'s **allHTTPHeaderFields** property + * - Parameter value: the value to compare against the header's value + * + * - Returns: a matcher that returns true if the `NSURLRequest`'s headers contain a value for the key name and it's value + * is equal to the parameter value + */ +public func hasHeaderNamed(name: String, value: String) -> OHHTTPStubsTestBlock { + return { (req: NSURLRequest) -> Bool in + return req.valueForHTTPHeaderField(name) == value + } +} // MARK: Operators on OHHTTPStubsTestBlock diff --git a/OHHTTPStubs/UnitTests/Test Suites/SwiftHelpersTests.swift b/OHHTTPStubs/UnitTests/Test Suites/SwiftHelpersTests.swift index 9eb4bec8..e725e173 100644 --- a/OHHTTPStubs/UnitTests/Test Suites/SwiftHelpersTests.swift +++ b/OHHTTPStubs/UnitTests/Test Suites/SwiftHelpersTests.swift @@ -155,6 +155,49 @@ class SwiftHelpersTests : XCTestCase { XCTAssert(matcher(req) == result, "containsQueryParams(\"\(params)\") matcher failed when testing url \(url)") } } + + func testHasHeaderNamedIsTrue() { + let req = NSMutableURLRequest(URL: NSURL(string: "foo://bar")!) + req.addValue("1234567890", forHTTPHeaderField: "ArbitraryKey") + + let hasHeader = hasHeaderNamed("ArbitraryKey")(req) + + XCTAssertTrue(hasHeader) + } + + func testHasHeaderNamedIsFalse() { + let req = NSMutableURLRequest(URL: NSURL(string: "foo://bar")!) + + let hasHeader = hasHeaderNamed("ArbitraryKey")(req) + + XCTAssertFalse(hasHeader) + } + + func testHeaderValueForKeyEqualsIsTrue() { + let req = NSMutableURLRequest(URL: NSURL(string: "foo://bar")!) + req.addValue("bar", forHTTPHeaderField: "foo") + + let matchesHeader = hasHeaderNamed("foo", value: "bar")(req) + + XCTAssertTrue(matchesHeader) + } + + func testHeaderValueForKeyEqualsIsFalse() { + let req = NSMutableURLRequest(URL: NSURL(string: "foo://bar")!) + req.addValue("bar", forHTTPHeaderField: "foo") + + let matchesHeader = hasHeaderNamed("foo", value: "baz")(req) + + XCTAssertFalse(matchesHeader) + } + + func testHeaderValueForKeyEqualsDoesNotExist() { + let req = NSMutableURLRequest(URL: NSURL(string: "foo://bar")!) + + let matchesHeader = hasHeaderNamed("foo", value: "baz")(req) + + XCTAssertFalse(matchesHeader) + } let sampleURLs = [ // Absolute URLs From 2c13a98aaa7e8b2d2fe86707bac160fd99957d99 Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 15 Mar 2016 19:34:32 +0000 Subject: [PATCH 2/2] Updating CHANGELOG.md to reflect latest additions. --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a24e0ca3..afde166e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # OHHTTPStubs — CHANGELOG +## Master + +* Added matchers that check whether a request has a particular header present, and a matcher to check if a request has a header with a key and value. + [@hq-mobile](https://github.com/hq-mobile), [#160](https://github.com/AliSoftware/OHHTTPStubs/pull/160) + ## [4.8.0](https://github.com/AliSoftware/OHHTTPStubs/releases/tag/4.8.0) * Added `isEnabled` and `isEnabledForSessionConfiguration` getter methods.