From 2e67d20e276223f2511642ef8e2ea9655fe9878a Mon Sep 17 00:00:00 2001 From: Tony Li Date: Wed, 21 Feb 2024 14:06:19 +1300 Subject: [PATCH] Do not add default query if it exists in the original URL --- WordPressKit/HTTPRequestBuilder.swift | 3 ++- .../Utilities/HTTPRequestBuilderTests.swift | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/WordPressKit/HTTPRequestBuilder.swift b/WordPressKit/HTTPRequestBuilder.swift index 885c8844..b84cd706 100644 --- a/WordPressKit/HTTPRequestBuilder.swift +++ b/WordPressKit/HTTPRequestBuilder.swift @@ -153,8 +153,9 @@ final class HTTPRequestBuilder { // Add default query items if they don't exist in `appendedQuery`. var newQuery = appendedQuery if !defaultQuery.isEmpty { + let allQuery = (original.queryItems ?? []) + newQuery let toBeAdded = defaultQuery.filter { item in - !newQuery.contains(where: { $0.name == item.name}) + !allQuery.contains(where: { $0.name == item.name}) } newQuery.append(contentsOf: toBeAdded) } diff --git a/WordPressKitTests/Utilities/HTTPRequestBuilderTests.swift b/WordPressKitTests/Utilities/HTTPRequestBuilderTests.swift index 7b008c75..ca1beb2a 100644 --- a/WordPressKitTests/Utilities/HTTPRequestBuilderTests.swift +++ b/WordPressKitTests/Utilities/HTTPRequestBuilderTests.swift @@ -205,6 +205,15 @@ class HTTPRequestBuilderTests: XCTestCase { try XCTAssertEqual(builder.query(name: "foo", value: "bar").build().url?.query, "locale=zh&foo=bar") } + func testDefaultQueryExistsInOriginalURL() throws { + let url = try HTTPRequestBuilder(url: URL(string: "https://wordpress.org/hello?locale=foo")!) + .query(defaults: [URLQueryItem(name: "locale", value: "en")]) + .build() + .url + + XCTAssertEqual(url?.query, "locale=foo") + } + func testJSONBody() throws { var request = try HTTPRequestBuilder(url: URL(string: "https://wordpress.org")!) .method(.post)