Skip to content

Commit 76b658d

Browse files
authored
Fix Array-type query parameter (#1362)
Modified the array-type query parameter to be passed as a comma-separated string in the query parameter
1 parent 960fb23 commit 76b658d

File tree

5 files changed

+90
-7
lines changed

5 files changed

+90
-7
lines changed

generator/src/main/resources/line-bot-sdk-nodejs-generator/apiBody/normal.pebble

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@
2121
});
2222
{% elseif op.hasQueryParams %}const queryParams = {
2323
{% for param in op.queryParams -%}
24+
{% if param.isArray -%}
25+
"{{param.paramName}}": [...{{param.paramName}}].join(","),
26+
{% else -%}
2427
"{{param.paramName}}": {{param.paramName}},
28+
{% endif -%}
2529
{% endfor %}
2630
};
2731
Object.keys(queryParams).forEach((key: keyof typeof queryParams) => {

generator/src/main/resources/line-bot-sdk-nodejs-generator/api_test.pebble

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,32 @@ function parseForm(
7070
new Blob([]), // paramName={{ param.paramName }}
7171
{% elseif param.isModel -%}
7272
{} as unknown as {{ param.dataType }}, // paramName={{ param.paramName }}
73+
{% elseif param.isArray -%}
74+
new Set(["DUMMY1", "DUMMY2"]) as unknown as {{ param.dataType }},
75+
{% elseif param.isEnum -%}
76+
"DUMMY" as unknown as {{ param.dataType }}, // paramName={{ param.paramName }}(enum)
77+
{% elseif param.isExplode -%}
78+
"DUMMY" as unknown as {{ param.dataType}}, // paramName={{param.paramName}}(enum)
79+
{% elseif param.isString -%}
80+
"DUMMY", // {{param.paramName}}(string)
81+
{% elseif param.isNumber or param.isInteger or param.isLong -%}
82+
0, // paramName={{param.paramName}}(number or int or long)
83+
{% elseif param.isBoolean -%}
84+
true, // paramName={{param.paramName}}
85+
{% else -%}
86+
// UNKNOWN TYPE: paramName={{param.paramName}} {{ param.dataType }}
87+
{% endif -%}
88+
{% endmacro %}
89+
90+
{% macro paramDummyValueString(param) %}
91+
{# @pebvariable name="param" type="org.openapitools.codegen.CodegenParameter" #}
92+
// {{ param.paramName }}: {{ param.dataType }}
93+
{% if param.isFile -%}
94+
new Blob([]), // paramName={{ param.paramName }}
95+
{% elseif param.isModel -%}
96+
{} as unknown as {{ param.dataType }}, // paramName={{ param.paramName }}
97+
{% elseif param.isArray -%}
98+
"DUMMY1,DUMMY2" as unknown as {{ param.dataType }},
7399
{% elseif param.isEnum -%}
74100
"DUMMY" as unknown as {{ param.dataType }}, // paramName={{ param.paramName }}(enum)
75101
{% elseif param.isExplode -%}
@@ -111,7 +137,7 @@ function parseForm(
111137
// Query parameters
112138
const queryParams = new URLSearchParams(reqUrl.search);
113139
{% for param in op.queryParams -%}
114-
equal(queryParams.get("{{param.paramName}}"), String({{ paramDummyValue(param) }}));
140+
equal(queryParams.get("{{param.paramName}}"), String({{ paramDummyValueString(param) }}));
115141
{% endfor %}
116142
{% endif %}
117143
{% if authMethods != null -%}
@@ -148,7 +174,7 @@ function parseForm(
148174
// Form parameters
149175
const formData = parseForm(arrayBuffer);
150176
{% for param in op.formParams -%}
151-
equal(formData["{{param.paramName}}"], String({{ paramDummyValue(param) }}));
177+
equal(formData["{{param.paramName}}"], String({{ paramDummyValueString(param) }}));
152178
{% endfor %}
153179

154180
res.writeHead(200, { "Content-Type": "application/json" });

lib/messaging-api/api/messagingApiClient.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1583,7 +1583,7 @@ export class MessagingApiClient {
15831583
limit?: number,
15841584
): Promise<Types.ApiResponseType<MessagingApiPagerCouponListResponse>> {
15851585
const queryParams = {
1586-
status: status,
1586+
status: [...status].join(","),
15871587
start: start,
15881588
limit: limit,
15891589
};

lib/messaging-api/tests/api/MessagingApiClientTest.spec.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4242,7 +4242,7 @@ describe("MessagingApiClient", () => {
42424242
queryParams.get("status"),
42434243
String(
42444244
// status: Set<'DRAFT' | 'RUNNING' | 'CLOSED'>
4245-
"DUMMY" as unknown as Set<"DRAFT" | "RUNNING" | "CLOSED">, // paramName=status(enum)
4245+
"DUMMY1,DUMMY2" as unknown as Set<"DRAFT" | "RUNNING" | "CLOSED">,
42464246
),
42474247
);
42484248
equal(
@@ -4283,7 +4283,9 @@ describe("MessagingApiClient", () => {
42834283

42844284
const res = await client.listCouponWithHttpInfo(
42854285
// status: Set<'DRAFT' | 'RUNNING' | 'CLOSED'>
4286-
"DUMMY" as unknown as Set<"DRAFT" | "RUNNING" | "CLOSED">, // paramName=status(enum)
4286+
new Set(["DUMMY1", "DUMMY2"]) as unknown as Set<
4287+
"DRAFT" | "RUNNING" | "CLOSED"
4288+
>,
42874289

42884290
// start: string
42894291
"DUMMY" as unknown as string, // paramName=start(enum)
@@ -4317,7 +4319,7 @@ describe("MessagingApiClient", () => {
43174319
queryParams.get("status"),
43184320
String(
43194321
// status: Set<'DRAFT' | 'RUNNING' | 'CLOSED'>
4320-
"DUMMY" as unknown as Set<"DRAFT" | "RUNNING" | "CLOSED">, // paramName=status(enum)
4322+
"DUMMY1,DUMMY2" as unknown as Set<"DRAFT" | "RUNNING" | "CLOSED">,
43214323
),
43224324
);
43234325
equal(
@@ -4358,7 +4360,9 @@ describe("MessagingApiClient", () => {
43584360

43594361
const res = await client.listCoupon(
43604362
// status: Set<'DRAFT' | 'RUNNING' | 'CLOSED'>
4361-
"DUMMY" as unknown as Set<"DRAFT" | "RUNNING" | "CLOSED">, // paramName=status(enum)
4363+
new Set(["DUMMY1", "DUMMY2"]) as unknown as Set<
4364+
"DRAFT" | "RUNNING" | "CLOSED"
4365+
>,
43624366

43634367
// start: string
43644368
"DUMMY" as unknown as string, // paramName=start(enum)

test/libs-messagingApi.spec.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,55 @@ describe("messagingApi", () => {
180180
});
181181
});
182182

183+
it("get coupon list", async () => {
184+
let requestCount = 0;
185+
server.use(
186+
http.get(
187+
"https://api.line.me/v2/bot/coupon",
188+
async ({ request, params, cookies }) => {
189+
requestCount++;
190+
191+
equal(
192+
request.headers.get("authorization"),
193+
"Bearer test_channel_access_token",
194+
);
195+
equal(request.headers.get("User-Agent"), "@line/bot-sdk/1.0.0-test");
196+
197+
const url = new URL(request.url);
198+
const searchParams = url.searchParams;
199+
equal(searchParams.get("status"), "DRAFT,RUNNING,CLOSED");
200+
equal(searchParams.get("start"), "xBQU2IB");
201+
equal(searchParams.get("limit"), "100");
202+
203+
return HttpResponse.json({
204+
items: [
205+
{
206+
couponId: "coupon_id_1",
207+
title: "coupon 1",
208+
},
209+
],
210+
next: "yANU9IA..",
211+
});
212+
},
213+
),
214+
);
215+
216+
const res = await client.listCoupon(
217+
new Set(["DRAFT", "RUNNING", "CLOSED"]),
218+
"xBQU2IB",
219+
100,
220+
);
221+
deepEqual(res, {
222+
items: [
223+
{
224+
couponId: "coupon_id_1",
225+
title: "coupon 1",
226+
},
227+
],
228+
next: "yANU9IA..",
229+
});
230+
});
231+
183232
it("config is not overrided", async () => {
184233
const config = {
185234
channelAccessToken: "token-token",

0 commit comments

Comments
 (0)