Skip to content

Commit 2b3be47

Browse files
committed
🔧Fixed wrong parameter query building.
1 parent 45c25e2 commit 2b3be47

File tree

2 files changed

+41
-20
lines changed

2 files changed

+41
-20
lines changed

swift-sdk/Internal/api-client/Request/RequestCreator.swift

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -513,14 +513,28 @@ struct RequestCreator {
513513
if let packageName = Bundle.main.appPackageName {
514514
args[JsonKey.Embedded.packageName] = packageName
515515
}
516-
516+
setCurrentUser(inDict: &args)
517+
518+
let placementIdQueryItems: [URLQueryItem]
517519
if let placementIds, !placementIds.isEmpty {
518-
args[JsonKey.Embedded.placementIds] = placementIds.map(String.init).joined(separator: ",")
520+
placementIdQueryItems = placementIds.map { URLQueryItem(name: JsonKey.Embedded.placementIds, value: String($0)) }
521+
} else {
522+
placementIdQueryItems = []
519523
}
520-
521-
setCurrentUser(inDict: &args)
522-
523-
return .success(.get(createGetRequest(forPath: Const.Path.getEmbeddedMessages, withArgs: args as! [String: String])))
524+
525+
let argsQueryItems: [URLQueryItem] = args.compactMap { key, value in
526+
guard let key = key as? String, let value = value as? String else { return nil }
527+
if key == JsonKey.Embedded.placementIds { return nil }
528+
return URLQueryItem(name: key, value: value)
529+
}
530+
531+
var components = URLComponents()
532+
components.path = Const.Path.getEmbeddedMessages
533+
components.queryItems = argsQueryItems + placementIdQueryItems
534+
let query = components.percentEncodedQuery?.replacingOccurrences(of: "+", with: "%2B")
535+
let pathWithQuery = components.path + (query.map { "?\($0)" } ?? "")
536+
537+
return .success(.get(GetRequest(path: pathWithQuery, args: nil)))
524538
}
525539

526540
func createEmbeddedMessageReceivedRequest(_ message: IterableEmbeddedMessage) -> Result<IterableRequest, IterableError> {

tests/unit-tests/RequestCreatorTests.swift

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -195,16 +195,17 @@ class RequestCreatorTests: XCTestCase {
195195

196196
TestUtils.validateHeader(urlRequest, apiKey)
197197
TestUtils.validate(request: urlRequest, requestType: .get, apiEndPoint: Endpoint.api, path: Const.Path.getEmbeddedMessages)
198-
199-
guard case let .success(.get(getRequest)) = request, let args = getRequest.args else {
200-
XCTFail("could not unwrap to a get request and its arguments")
198+
199+
guard let url = urlRequest.url, let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false) else {
200+
XCTFail("could not create URLComponents from request url")
201201
return
202202
}
203-
204-
XCTAssertEqual(args[JsonKey.email], auth.email)
205-
XCTAssertEqual(args[JsonKey.Embedded.packageName], Bundle.main.appPackageName)
206-
XCTAssertEqual(args[JsonKey.systemVersion], UIDevice.current.systemVersion)
207-
XCTAssertNil(args[JsonKey.Embedded.placementIds])
203+
204+
let queryItems = urlComponents.queryItems ?? []
205+
XCTAssertEqual(queryItems.first(where: { $0.name == JsonKey.email })?.value, auth.email)
206+
XCTAssertEqual(queryItems.first(where: { $0.name == JsonKey.Embedded.packageName })?.value, Bundle.main.appPackageName)
207+
XCTAssertEqual(queryItems.first(where: { $0.name == JsonKey.systemVersion })?.value, UIDevice.current.systemVersion)
208+
XCTAssertTrue(queryItems.filter { $0.name == JsonKey.Embedded.placementIds }.isEmpty)
208209
}
209210

210211
func testGetEmbeddedMessagesRequestWithPlacementIds() {
@@ -213,14 +214,20 @@ class RequestCreatorTests: XCTestCase {
213214

214215
TestUtils.validateHeader(urlRequest, apiKey)
215216
TestUtils.validate(request: urlRequest, requestType: .get, apiEndPoint: Endpoint.api, path: Const.Path.getEmbeddedMessages)
216-
217-
guard case let .success(.get(getRequest)) = request, let args = getRequest.args else {
218-
XCTFail("could not unwrap to a get request and its arguments")
217+
218+
guard let url = urlRequest.url, let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false) else {
219+
XCTFail("could not create URLComponents from request url")
219220
return
220221
}
221-
222-
XCTAssertEqual(args[JsonKey.email], auth.email)
223-
XCTAssertEqual(args[JsonKey.Embedded.placementIds], "1,2,3")
222+
223+
let queryItems = urlComponents.queryItems ?? []
224+
XCTAssertEqual(queryItems.first(where: { $0.name == JsonKey.email })?.value, auth.email)
225+
226+
let placementIds = queryItems
227+
.filter { $0.name == JsonKey.Embedded.placementIds }
228+
.compactMap(\.value)
229+
230+
XCTAssertEqual(placementIds, ["1", "2", "3"])
224231
}
225232

226233
func testTrackEventRequest() {

0 commit comments

Comments
 (0)