Skip to content
This repository was archived by the owner on Sep 15, 2025. It is now read-only.

Commit 676fb99

Browse files
authored
Add apiURL parameter for changing WP.com API URL (#731)
2 parents 07d9070 + dbce6ab commit 676fb99

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

WordPressKit/WordPressOrgRestApi.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public final class WordPressOrgRestApi: NSObject {
4040
}
4141

4242
enum Site {
43-
case dotCom(siteID: UInt64, bearerToken: String)
43+
case dotCom(siteID: UInt64, bearerToken: String, apiURL: URL)
4444
case selfHosted(apiURL: URL, credential: SelfHostedSiteCredential)
4545
}
4646

@@ -49,8 +49,8 @@ public final class WordPressOrgRestApi: NSObject {
4949

5050
var selfHostedSiteNonce: String?
5151

52-
public convenience init(dotComSiteID: UInt64, bearerToken: String, userAgent: String? = nil) {
53-
self.init(site: .dotCom(siteID: dotComSiteID, bearerToken: bearerToken), userAgent: userAgent)
52+
public convenience init(dotComSiteID: UInt64, bearerToken: String, userAgent: String? = nil, apiURL: URL = WordPressComRestApi.apiBaseURL) {
53+
self.init(site: .dotCom(siteID: dotComSiteID, bearerToken: bearerToken, apiURL: apiURL), userAgent: userAgent)
5454
}
5555

5656
public convenience init(selfHostedSiteWPJSONURL apiURL: URL, credential: SelfHostedSiteCredential, userAgent: String? = nil) {
@@ -68,7 +68,7 @@ public final class WordPressOrgRestApi: NSObject {
6868
if let userAgent {
6969
additionalHeaders["User-Agent"] = userAgent
7070
}
71-
if case let Site.dotCom(siteID: _, bearerToken: token) = site {
71+
if case let Site.dotCom(_, token, _) = site {
7272
additionalHeaders["Authorization"] = "Bearer \(token)"
7373
}
7474

@@ -203,8 +203,8 @@ public final class WordPressOrgRestApi: NSObject {
203203
private extension WordPressOrgRestApi {
204204
func apiBaseURL() -> URL {
205205
switch site {
206-
case .dotCom:
207-
return URL(string: "https://public-api.wordpress.com")!
206+
case let .dotCom(_, _, apiURL):
207+
return apiURL
208208
case let .selfHosted(apiURL, _):
209209
return apiURL
210210
}
@@ -252,7 +252,7 @@ private extension HTTPRequestBuilder {
252252
}
253253

254254
switch site {
255-
case let .dotCom(siteID, _):
255+
case let .dotCom(siteID, _, _):
256256
// Currently only the following namespaces are supported. When adding more supported namespaces, remember to
257257
// update the "path adapter" code below for the REST API in WP.COM.
258258
assert(route.hasPrefix("/wp/v2") || route.hasPrefix("/wp-block-editor/v1"), "Unsupported .org REST API route: \(route)")

WordPressKitTests/WordPressOrgRestApiTests.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,18 @@ class WordPressOrgRestApiTests: XCTestCase {
103103
let api = WordPressOrgRestApi(site: .dotCom(siteID: 1001, bearerToken: "fakeToken"))
104104
let _ = try await api.get(path: "/wp-block-editor/v1/settings", type: AnyResponse.self).get()
105105
}
106+
107+
func testSettingWPComAPIURL() async {
108+
var request: URLRequest?
109+
stub(condition: { _ in true }, response: {
110+
request = $0
111+
return HTTPStubsResponse(error: URLError(.networkConnectionLost))
112+
})
113+
114+
let api = WordPressOrgRestApi(dotComSiteID: 1001, bearerToken: "token", apiURL: URL(string: "http://localhost:8000")!)
115+
let _ = await api.get(path: "/wp/v2/hello", type: AnyResponse.self)
116+
XCTAssertEqual(request?.url?.absoluteString, "http://localhost:8000/wp/v2/sites/1001/hello")
117+
}
106118
}
107119

108120
extension WordPressOrgRestApi {
@@ -114,4 +126,10 @@ extension WordPressOrgRestApi {
114126
}
115127
}
116128

129+
extension WordPressOrgRestApi.Site {
130+
static func dotCom(siteID: UInt64, bearerToken: String) -> Self {
131+
.dotCom(siteID: siteID, bearerToken: bearerToken, apiURL: WordPressComRestApi.apiBaseURL)
132+
}
133+
}
134+
117135
private struct AnyResponse: Decodable {}

0 commit comments

Comments
 (0)