From bbdc55f2e4b7d0de6f9f2c6f6f9ae4cba231eb00 Mon Sep 17 00:00:00 2001 From: Slavi Boyanov Date: Thu, 1 Oct 2020 10:15:43 +0300 Subject: [PATCH 1/2] Fixing the way aqueduct TestRequest serializes list query parameters Up until now list query parameters were serialized in such a way: `url?query=[1, 2]`. This is not the way aqueduct expects list parameters to be sent with that pull request the way lists are serialized is: `url?query=1&query=2` --- aqueduct_test/lib/src/request.dart | 15 +++++++++++---- aqueduct_test/test/request_test.dart | 11 +++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/aqueduct_test/lib/src/request.dart b/aqueduct_test/lib/src/request.dart index be8e5d2aa..2f132b0f1 100644 --- a/aqueduct_test/lib/src/request.dart +++ b/aqueduct_test/lib/src/request.dart @@ -76,12 +76,19 @@ class TestRequest { var url = _baseUrl.resolve(actualPath).toString(); if ((query?.length ?? 0) > 0) { - final pairs = query.keys.map((key) { - final val = query[key]; + final pairs = []; + + query.forEach((key, val) { if (val == null || val == true) { - return "$key"; + pairs.add("$key"); + } else if (val is List) { + val.forEach((innerVal) { + final urlEncoded = Uri.encodeComponent('$innerVal'); + pairs.add("$key=$urlEncoded"); + }); } else { - return "$key=${Uri.encodeComponent("$val")}"; + final urlEncoded = Uri.encodeComponent('$val'); + pairs.add("$key=$urlEncoded"); } }); diff --git a/aqueduct_test/test/request_test.dart b/aqueduct_test/test/request_test.dart index f4449896e..303cef74a 100644 --- a/aqueduct_test/test/request_test.dart +++ b/aqueduct_test/test/request_test.dart @@ -57,6 +57,17 @@ void main() { expect(received.raw.uri.query, "k=v%20v"); }); + test("Lsit query parameters are encoded as separate keys", () async { + final req = agent.request("/") + ..query = { + "k": ["v", "w"] + }; + await req.get(); + + final received = await server.next(); + expect(received.raw.uri.query, "k=v&k=w"); + }); + test("Headers get added to request", () async { final req = agent.request("/") ..headers["k"] = "v" From f6a90727d9378353a1dcc5372099dde56b181051 Mon Sep 17 00:00:00 2001 From: Reductions Date: Fri, 26 Mar 2021 15:19:08 +0200 Subject: [PATCH 2/2] Update aqueduct_test/test/request_test.dart --- aqueduct_test/test/request_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aqueduct_test/test/request_test.dart b/aqueduct_test/test/request_test.dart index 303cef74a..e53ee4ccf 100644 --- a/aqueduct_test/test/request_test.dart +++ b/aqueduct_test/test/request_test.dart @@ -57,7 +57,7 @@ void main() { expect(received.raw.uri.query, "k=v%20v"); }); - test("Lsit query parameters are encoded as separate keys", () async { + test("List query parameters are encoded as separate keys", () async { final req = agent.request("/") ..query = { "k": ["v", "w"]