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