From 31798cebc73ba298a737c2490d07da91f71d233b Mon Sep 17 00:00:00 2001 From: Tony Li Date: Wed, 21 Feb 2024 09:31:20 +1300 Subject: [PATCH 1/3] Add `apiURL` parameter to changing WP.com API URL --- WordPressKit/WordPressOrgRestApi.swift | 14 +++++++------- WordPressKitTests/WordPressOrgRestApiTests.swift | 6 ++++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/WordPressKit/WordPressOrgRestApi.swift b/WordPressKit/WordPressOrgRestApi.swift index f6b3f382..2ff0c367 100644 --- a/WordPressKit/WordPressOrgRestApi.swift +++ b/WordPressKit/WordPressOrgRestApi.swift @@ -40,7 +40,7 @@ public final class WordPressOrgRestApi: NSObject { } enum Site { - case dotCom(siteID: UInt64, bearerToken: String) + case dotCom(siteID: UInt64, bearerToken: String, apiURL: URL) case selfHosted(apiURL: URL, credential: SelfHostedSiteCredential) } @@ -49,8 +49,8 @@ public final class WordPressOrgRestApi: NSObject { var selfHostedSiteNonce: String? - public convenience init(dotComSiteID: UInt64, bearerToken: String, userAgent: String? = nil) { - self.init(site: .dotCom(siteID: dotComSiteID, bearerToken: bearerToken), userAgent: userAgent) + public convenience init(dotComSiteID: UInt64, bearerToken: String, userAgent: String? = nil, apiURL: URL = WordPressComRestApi.apiBaseURL) { + self.init(site: .dotCom(siteID: dotComSiteID, bearerToken: bearerToken, apiURL: apiURL), userAgent: userAgent) } public convenience init(selfHostedSiteWPJSONURL apiURL: URL, credential: SelfHostedSiteCredential, userAgent: String? = nil) { @@ -68,7 +68,7 @@ public final class WordPressOrgRestApi: NSObject { if let userAgent { additionalHeaders["User-Agent"] = userAgent } - if case let Site.dotCom(siteID: _, bearerToken: token) = site { + if case let Site.dotCom(siteID: _, bearerToken: token, _) = site { additionalHeaders["Authorization"] = "Bearer \(token)" } @@ -203,8 +203,8 @@ public final class WordPressOrgRestApi: NSObject { private extension WordPressOrgRestApi { func apiBaseURL() -> URL { switch site { - case .dotCom: - return URL(string: "https://public-api.wordpress.com")! + case let .dotCom(_, _, apiURL): + return apiURL case let .selfHosted(apiURL, _): return apiURL } @@ -252,7 +252,7 @@ private extension HTTPRequestBuilder { } switch site { - case let .dotCom(siteID, _): + case let .dotCom(siteID, _, _): // Currently only the following namespaces are supported. When adding more supported namespaces, remember to // update the "path adapter" code below for the REST API in WP.COM. assert(route.hasPrefix("/wp/v2") || route.hasPrefix("/wp-block-editor/v1"), "Unsupported .org REST API route: \(route)") diff --git a/WordPressKitTests/WordPressOrgRestApiTests.swift b/WordPressKitTests/WordPressOrgRestApiTests.swift index 74cc432f..8842f87b 100644 --- a/WordPressKitTests/WordPressOrgRestApiTests.swift +++ b/WordPressKitTests/WordPressOrgRestApiTests.swift @@ -114,4 +114,10 @@ extension WordPressOrgRestApi { } } +extension WordPressOrgRestApi.Site { + static func dotCom(siteID: UInt64, bearerToken: String) -> Self { + .dotCom(siteID: siteID, bearerToken: bearerToken, apiURL: WordPressComRestApi.apiBaseURL) + } +} + private struct AnyResponse: Decodable {} From 7c01ab3f347d16c083239ce9f2945636e7fd4611 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Wed, 21 Feb 2024 09:32:32 +1300 Subject: [PATCH 2/3] Add an unit test for changing API url --- WordPressKitTests/WordPressOrgRestApiTests.swift | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/WordPressKitTests/WordPressOrgRestApiTests.swift b/WordPressKitTests/WordPressOrgRestApiTests.swift index 8842f87b..67082cc6 100644 --- a/WordPressKitTests/WordPressOrgRestApiTests.swift +++ b/WordPressKitTests/WordPressOrgRestApiTests.swift @@ -103,6 +103,18 @@ class WordPressOrgRestApiTests: XCTestCase { let api = WordPressOrgRestApi(site: .dotCom(siteID: 1001, bearerToken: "fakeToken")) let _ = try await api.get(path: "/wp-block-editor/v1/settings", type: AnyResponse.self).get() } + + func testSettingWPComAPIURL() async { + var request: URLRequest? + stub(condition: { _ in true }, response: { + request = $0 + return HTTPStubsResponse(error: URLError(.networkConnectionLost)) + }) + + let api = WordPressOrgRestApi(dotComSiteID: 1001, bearerToken: "token", apiURL: URL(string: "http://localhost:8000")!) + let _ = await api.get(path: "/wp/v2/hello", type: AnyResponse.self) + XCTAssertEqual(request?.url?.absoluteString, "http://localhost:8000/wp/v2/sites/1001/hello") + } } extension WordPressOrgRestApi { From dbce6ab56b41a979039781ae77dab9552863614f Mon Sep 17 00:00:00 2001 From: Tony Li Date: Wed, 21 Feb 2024 13:05:20 +1300 Subject: [PATCH 3/3] Remove unnecessary labels --- WordPressKit/WordPressOrgRestApi.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPressKit/WordPressOrgRestApi.swift b/WordPressKit/WordPressOrgRestApi.swift index 2ff0c367..30adcb2d 100644 --- a/WordPressKit/WordPressOrgRestApi.swift +++ b/WordPressKit/WordPressOrgRestApi.swift @@ -68,7 +68,7 @@ public final class WordPressOrgRestApi: NSObject { if let userAgent { additionalHeaders["User-Agent"] = userAgent } - if case let Site.dotCom(siteID: _, bearerToken: token, _) = site { + if case let Site.dotCom(_, token, _) = site { additionalHeaders["Authorization"] = "Bearer \(token)" }