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..e53ee4ccf 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("List 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"