Skip to content

Commit 5d7bd79

Browse files
authored
[helidon] Bug fix for list of query parameters or form parameters when parameters is empty (#610)
* [helidon] Add test only for list of query parameters One or multiple params passes. Adding a test for NO parameters will fail. * [helidon] Fix for list of query parameters or form parameters Add the test and fix for this case.
1 parent 12c9e05 commit 5d7bd79

File tree

5 files changed

+109
-2
lines changed

5 files changed

+109
-2
lines changed

http-generator-helidon/src/main/java/io/avaje/http/generator/helidon/nima/NimaPlatformAdapter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,8 @@ public void writeReadMapParameter(Append writer, ParamType paramType) {
118118
@Override
119119
public void writeReadCollectionParameter(Append writer, ParamType paramType, String paramName) {
120120
switch (paramType) {
121-
case QUERYPARAM -> writer.append("queryParams.all(\"%s\")", paramName);
122-
case FORMPARAM -> writer.append("formParams.all(\"%s\")", paramName);
121+
case QUERYPARAM -> writer.append("queryParams.all(\"%s\", () -> java.util.List.of())", paramName);
122+
case FORMPARAM -> writer.append("formParams.all(\"%s\", () -> java.util.List.of())", paramName);
123123

124124
case HEADER -> writer.append(
125125
"req.headers().all(\"%s\", () -> java.util.List.of())", paramName);

tests/test-nima/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@
4848
<artifactId>avaje-http-helidon-generator</artifactId>
4949
<version>${project.version}</version>
5050
</dependency>
51+
<dependency>
52+
<groupId>io.avaje</groupId>
53+
<artifactId>avaje-http-client</artifactId>
54+
<version>${project.version}</version>
55+
<scope>test</scope>
56+
</dependency>
5157
</dependencies>
5258

5359
<build>

tests/test-nima/src/main/java/org/example/HelloController.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import io.avaje.http.api.Get;
77
import io.avaje.http.api.Produces;
88

9+
import java.util.List;
10+
911
@Controller
1012
public class HelloController {
1113

@@ -33,4 +35,10 @@ String name(String name, String sortBy, @Default("0") long max) {
3335
Person getP(@BeanParam Person person) {
3436
return person;
3537
}
38+
39+
@Produces("text/plain")
40+
@Get("listParams")
41+
String listParam(List<String> codes) {
42+
return "codes:" + codes;
43+
}
3644
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.example;
2+
3+
import io.avaje.http.client.HttpClient;
4+
import io.avaje.inject.BeanScope;
5+
import io.helidon.webserver.WebServer;
6+
import io.helidon.webserver.http.HttpFeature;
7+
import io.helidon.webserver.http.HttpRouting;
8+
import org.junit.jupiter.api.AfterAll;
9+
import org.junit.jupiter.api.BeforeAll;
10+
11+
import java.time.Duration;
12+
import java.util.List;
13+
14+
public class BaseWebTest {
15+
16+
static WebServer webServer;
17+
18+
public static String baseUrl;
19+
20+
21+
@BeforeAll
22+
public static void init() {
23+
List<HttpFeature> routes = BeanScope.builder().build().list(HttpFeature.class);
24+
final var builder = HttpRouting.builder();
25+
routes.forEach(builder::addFeature);
26+
27+
webServer = WebServer.builder().addRouting(builder)
28+
.port(9067)
29+
.build()
30+
.start();
31+
32+
baseUrl = "http://localhost:9067";
33+
}
34+
35+
@AfterAll
36+
public static void shutdown() {
37+
webServer.stop();
38+
}
39+
40+
public static HttpClient client() {
41+
return HttpClient.builder()
42+
.baseUrl(baseUrl)
43+
.requestTimeout(Duration.ofMinutes(2))
44+
//.bodyAdapter(new JacksonBodyAdapter())
45+
.build();
46+
}
47+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package org.example;
2+
3+
import org.junit.jupiter.api.Test;
4+
import java.net.http.HttpResponse;
5+
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
9+
class HelloControllerTest extends BaseWebTest {
10+
11+
@Test
12+
void listParamOne() {
13+
HttpResponse<String> res = client().request()
14+
.path("listParams")
15+
.queryParam("codes", "123")
16+
.GET()
17+
.asPlainString();
18+
19+
assertThat(res.statusCode()).isEqualTo(200);
20+
assertThat(res.body()).isEqualTo("codes:[123]");
21+
}
22+
23+
@Test
24+
void listParamMultiple() {
25+
HttpResponse<String> res = client().request()
26+
.path("listParams")
27+
.queryParam("codes", "123")
28+
.queryParam("codes", "456")
29+
.GET()
30+
.asPlainString();
31+
32+
assertThat(res.statusCode()).isEqualTo(200);
33+
assertThat(res.body()).isEqualTo("codes:[123, 456]");
34+
}
35+
36+
@Test
37+
void listParamEmpty() {
38+
HttpResponse<String> res = client().request()
39+
.path("listParams")
40+
.GET()
41+
.asPlainString();
42+
43+
assertThat(res.statusCode()).isEqualTo(200);
44+
assertThat(res.body()).isEqualTo("codes:[]");
45+
}
46+
}

0 commit comments

Comments
 (0)