From 93fd522c3879f0d2c89cb2360761004ddfaa85dd Mon Sep 17 00:00:00 2001 From: YoHan Cho Date: Thu, 15 Dec 2022 18:36:54 +0900 Subject: [PATCH] Fixed the public scope of the `buildEither(component:)` components of `URLBuilder` (#13) * Fixed #11 * Added BodyBuilderTests.swift for increase test coverage * wip * Added HeaderBuilderTest.swift for increase test coverage --- .../UserInterfaceState.xcuserstate | Bin 50369 -> 66827 bytes .../xcshareddata/xcschemes/APIRouter.xcscheme | 3 +- Sources/APIRouter/URLBuilder.swift | 4 +- Tests/APIRouterTests/BodyBuilderTests.swift | 82 ++++++++++++++++++ Tests/APIRouterTests/HeaderBuilder.swift | 77 ++++++++++++++++ Tests/APIRouterTests/URLBuilderTests.swift | 70 +++++++++++++++ 6 files changed, 233 insertions(+), 3 deletions(-) create mode 100644 Tests/APIRouterTests/BodyBuilderTests.swift create mode 100644 Tests/APIRouterTests/HeaderBuilder.swift diff --git a/.swiftpm/xcode/package.xcworkspace/xcuserdata/ijaewon.xcuserdatad/UserInterfaceState.xcuserstate b/.swiftpm/xcode/package.xcworkspace/xcuserdata/ijaewon.xcuserdatad/UserInterfaceState.xcuserstate index 70a85ce6df13eeb1c53f074e7b311b68b5d1f04b..94aff657bfb6e9342a1cbbc7e36225aafd9dc431 100644 GIT binary patch literal 66827 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 literal 50369 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 NzW>+%EB48j{|8Z@^4$Oc diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/APIRouter.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/APIRouter.xcscheme index 7a60a18..d85a1ef 100644 --- a/.swiftpm/xcode/xcshareddata/xcschemes/APIRouter.xcscheme +++ b/.swiftpm/xcode/xcshareddata/xcschemes/APIRouter.xcscheme @@ -40,7 +40,8 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES"> + shouldUseLaunchSchemeArgsEnv = "YES" + codeCoverageEnabled = "YES"> diff --git a/Sources/APIRouter/URLBuilder.swift b/Sources/APIRouter/URLBuilder.swift index 047a11f..bb1a310 100644 --- a/Sources/APIRouter/URLBuilder.swift +++ b/Sources/APIRouter/URLBuilder.swift @@ -34,11 +34,11 @@ public struct URLBuilder { CombinedURL(components) } - static func buildEither(first component: HttpUrlProtocol) -> HttpUrlProtocol { + public static func buildEither(first component: HttpUrlProtocol) -> HttpUrlProtocol { CombinedURL([component]) } - static func buildEither(second component: HttpUrlProtocol) -> HttpUrlProtocol { + public static func buildEither(second component: HttpUrlProtocol) -> HttpUrlProtocol { CombinedURL([component]) } } diff --git a/Tests/APIRouterTests/BodyBuilderTests.swift b/Tests/APIRouterTests/BodyBuilderTests.swift new file mode 100644 index 0000000..da848b6 --- /dev/null +++ b/Tests/APIRouterTests/BodyBuilderTests.swift @@ -0,0 +1,82 @@ +import Foundation +import XCTest +@testable import APIRouter + +final class BodyBuilderTests: XCTestCase { + func testSwitchConditionalStatementWorkingForBuildEitherInBodyBuilder() { + enum BodyOptions { + case one + case two + + var request: Request { + Request { + Body { + switch self { + case .one: + Param("VALUE", forKey: "OPTIONONE") + case .two: + Param("VALUE", forKey: "OPTIONTWO") + } + } + } + } + } + + if let optionOneBody = BodyOptions.one.request.urlRequest?.httpBody, + let optionOneBodyString = String(data: optionOneBody, encoding: .utf8), + let optionTwoBody = BodyOptions.two.request.urlRequest?.httpBody, + let optionTwoBodyString = String(data: optionTwoBody, encoding: .utf8) { + XCTAssertEqual(optionOneBodyString, "{\"OPTIONONE\":\"VALUE\"}") + XCTAssertEqual(optionTwoBodyString, "{\"OPTIONTWO\":\"VALUE\"}") + } + } + + func testIfConditionalStatementWorkingForBuildEitherInUrlBuilder() { + enum BodyOptions { + case one + case two + + var request: Request { + Request { + Body { + if self == .one { + Param("VALUE", forKey: "OPTIONONE") + } else { + Param("VALUE", forKey: "OPTIONTWO") + } + } + } + } + } + + if let optionOneBody = BodyOptions.one.request.urlRequest?.httpBody, + let optionOneBodyString = String(data: optionOneBody, encoding: .utf8), + let optionTwoBody = BodyOptions.two.request.urlRequest?.httpBody, + let optionTwoBodyString = String(data: optionTwoBody, encoding: .utf8) { + XCTAssertEqual(optionOneBodyString, "{\"OPTIONONE\":\"VALUE\"}") + XCTAssertEqual(optionTwoBodyString, "{\"OPTIONTWO\":\"VALUE\"}") + } + } + + func testForLoopStatementWorkingForBuildEitherInBodyBuilder() { + let params = [ + "key1": "value1", + "key2": "value2", + "key3": "value3", + "key4": "value4", + ] + + let request = Request { + Body { + for param in params { + Param(param.value, forKey: param.key) + } + } + } + + if let httpBody = request.urlRequest?.httpBody, + let bodyString = String(data: httpBody, encoding: .utf8) { + XCTAssertEqual(bodyString.sorted(), ["\"", "\"", "\"", "\"", "\"", "\"", "\"", "\"", "\"", "\"", "\"", "\"", "\"", "\"", "\"", "\"", ",", ",", ",", "1", "1", "2", "2", "3", "3", "4", "4", ":", ":", ":", ":", "a", "a", "a", "a", "e", "e", "e", "e", "e", "e", "e", "e", "k", "k", "k", "k", "l", "l", "l", "l", "u", "u", "u", "u", "v", "v", "v", "v", "y", "y", "y", "y", "{", "}"]) + } + } +} diff --git a/Tests/APIRouterTests/HeaderBuilder.swift b/Tests/APIRouterTests/HeaderBuilder.swift new file mode 100644 index 0000000..fccf1b5 --- /dev/null +++ b/Tests/APIRouterTests/HeaderBuilder.swift @@ -0,0 +1,77 @@ +import Foundation +import XCTest +@testable import APIRouter + +final class HeaderBuilderTests: XCTestCase { + func testSwitchConditionStatemntWorkingForBuildEitherInHeaderBuilder() { + enum HeaderOptions { + case one + case two + + var request: Request { + Request { + Header { + switch self { + case .one: + Field("VALUE", forKey: "OPTIONONE") + case .two: + Field("VALUE", forKey: "OPTIONTWO") + } + } + } + } + } + + if let optionOneHeaderFields = HeaderOptions.one.request.urlRequest?.allHTTPHeaderFields, + let optionTwoHeaderFields = HeaderOptions.two.request.urlRequest?.allHTTPHeaderFields { + XCTAssertEqual(optionOneHeaderFields, ["OPTIONONE":"VALUE"]) + XCTAssertEqual(optionTwoHeaderFields, ["OPTIONTWO":"VALUE"]) + } + } + + func testIfConditionalStatementWorkingForBuildEitherInUrlBuilder() { + enum HeaderOptions { + case one + case two + + var request: Request { + Request { + Header { + if self == .one { + Field("VALUE", forKey: "OPTIONONE") + } else { + Field("VALUE", forKey: "OPTIONTWO") + } + } + } + } + } + + if let optionOneHeaderFields = HeaderOptions.one.request.urlRequest?.allHTTPHeaderFields, + let optionTwoHeaderFields = HeaderOptions.two.request.urlRequest?.allHTTPHeaderFields { + XCTAssertEqual(optionOneHeaderFields, ["OPTIONONE":"VALUE"]) + XCTAssertEqual(optionTwoHeaderFields, ["OPTIONTWO":"VALUE"]) + } + } + + func testForLoopStatementWorkingForBuildEitherInHeaderBuilder() { + let fields = [ + "key1": "value1", + "key2": "value2", + "key3": "value3", + "key4": "value4", + ] + + let request = Request { + Header { + for field in fields { + Field(field.value, forKey: field.key) + } + } + } + + if let sortedAllHTTPHeaderFields = request.urlRequest?.allHTTPHeaderFields { + XCTAssertEqual(sortedAllHTTPHeaderFields, ["key1": "value1", "key2": "value2", "key3": "value3", "key4": "value4"]) + } + } +} diff --git a/Tests/APIRouterTests/URLBuilderTests.swift b/Tests/APIRouterTests/URLBuilderTests.swift index 5f68f8a..c249bb6 100644 --- a/Tests/APIRouterTests/URLBuilderTests.swift +++ b/Tests/APIRouterTests/URLBuilderTests.swift @@ -113,4 +113,74 @@ final class URLBuilderTests: XCTestCase { XCTAssertEqual(url, "https://www.urltest.com/test/path?test=query") } + + func testSwitchConditionalStatementWorkingForBuildEitherInUrlBuilder() { + enum SchemeOptions { + case https + case http + } + + let options: SchemeOptions = .http + + let request = Request { + URL { + switch options { + case .https: + Scheme(.https) + case .http: + Scheme(.http) + } + Host("www.urltest.com") + } + } + + guard let url = request.urlRequest?.url?.absoluteString else { return } + + XCTAssertEqual(url, "http://www.urltest.com") + } + + func testIfConditionalStatementWorkingForBuildEitherInUrlBuilder() { + let conditional = true + + let request = Request { + URL { + if conditional == true { + Scheme(.http) + } else { + Scheme(.https) + } + Host("www.urltest.com") + } + } + + guard let url = request.urlRequest?.url?.absoluteString else { return } + + XCTAssertEqual(url, "http://www.urltest.com") + } + + /// #1: https://github.com/devyhan/APIRouter/issues/1 + #warning("#1 change after issue resolution.") + func testForLoopStatementWorkingForBuildEitherInUrlBuilder() { + let queries = [ + "query1": "value1"//, +// "query2": "value2", +// "query3": "value3", +// "query4": "value4", + ] + + let request = Request { + URL { + Scheme(.https) + Host("www.urltest.com") + + for query in queries { + Query(query.key, value: query.value) + } + } + } + + guard let url = request.urlRequest?.url?.absoluteString else { return } + + XCTAssertEqual(url, "https://www.urltest.com?query1=value1") + } }