Skip to content

Commit 3ca31cb

Browse files
authored
feat(cts): add assertions for header parameters (#500)
1 parent 7f3d6ee commit 3ca31cb

File tree

11 files changed

+88
-15
lines changed

11 files changed

+88
-15
lines changed

clients/algoliasearch-client-php/lib/RequestOptions/RequestOptionsFactory.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,19 @@ private function normalize($options)
6464

6565
foreach ($options as $optionName => $value) {
6666
if (is_array($value)) {
67-
$normalized[$optionName] = $this->format($value);
67+
if ($optionName == 'headers') {
68+
$headersToLowerCase = [];
69+
70+
foreach ($value as $key => $v) {
71+
$headersToLowerCase[strtolower($key)] = $v;
72+
}
73+
74+
$normalized[$optionName] = $this->format(
75+
$headersToLowerCase
76+
);
77+
} else {
78+
$normalized[$optionName] = $this->format($value);
79+
}
6880
} else {
6981
$normalized[$optionName] = $value;
7082
}

generators/src/main/java/com/algolia/codegen/cts/Request.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ class RequestProp {
3939
@JsonDeserialize(using = RawDeserializer.class)
4040
public String queryParameters;
4141

42+
@JsonDeserialize(using = RawDeserializer.class)
43+
public String headers;
44+
4245
@Override
4346
public String toString() {
4447
StringBuilder sb = new StringBuilder();
@@ -47,6 +50,7 @@ public String toString() {
4750
sb.append(" method: ").append(method).append("\n");
4851
sb.append(" body: ").append(body).append("\n");
4952
sb.append(" queryParameters: ").append(queryParameters).append("\n");
53+
sb.append(" headers: ").append(headers).append("\n");
5054
sb.append("}");
5155
return sb.toString();
5256
}

scripts/ci/githubActions/setRunVariables.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,18 +63,21 @@ export const DEPENDENCIES = {
6363
'generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java',
6464
`:!${JS_CLIENT_FOLDER}/.github`,
6565
`:!${JS_CLIENT_FOLDER}/README.md`,
66+
'tests/CTS/methods/requests/templates/javascript',
6667
],
6768
JAVA_CLIENT_CHANGED: [
6869
...CLIENTS_COMMON_FILES,
6970
JAVA_CLIENT_FOLDER,
7071
'templates/java',
7172
'generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java',
73+
'tests/CTS/methods/requests/templates/java',
7274
],
7375
PHP_CLIENT_CHANGED: [
7476
...CLIENTS_COMMON_FILES,
7577
PHP_CLIENT_FOLDER,
7678
'templates/php',
7779
'generators/src/main/java/com/algolia/codegen/AlgoliaPhpGenerator.java',
80+
'tests/CTS/methods/requests/templates/php',
7881
],
7982
};
8083

templates/java/libraries/okhttp-gson/ApiClient.mustache

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -387,22 +387,28 @@ public class ApiClient {
387387
* @param reqBuilder Request.Builder
388388
*/
389389
public void processHeaderParams(Map<String, String> headerParams, Map<String, String> extraHeaderParams, Request.Builder reqBuilder) {
390-
for (Entry<String, String> param : headerParams.entrySet()) {
391-
reqBuilder.header(param.getKey(), parameterToString(param.getValue()));
392-
}
393-
for (Entry<String, String> header : defaultHeaderMap.entrySet()) {
394-
if (!headerParams.containsKey(header.getKey())) {
395-
reqBuilder.header(header.getKey(), parameterToString(header.getValue()));
396-
}
390+
for (Entry<String, String> param : headerParams.entrySet()) {
391+
reqBuilder.header(
392+
param.getKey().toLowerCase(),
393+
parameterToString(param.getValue())
394+
);
395+
}
396+
for (Entry<String, String> header : defaultHeaderMap.entrySet()) {
397+
if (!headerParams.containsKey(header.getKey())) {
398+
reqBuilder.header(
399+
header.getKey().toLowerCase(),
400+
parameterToString(header.getValue())
401+
);
397402
}
398-
if (extraHeaderParams != null) {
399-
for (Entry<String, String> header : extraHeaderParams.entrySet()) {
400-
reqBuilder.header(
401-
header.getKey(),
402-
parameterToString(header.getValue())
403-
);
404-
}
403+
}
404+
if (extraHeaderParams != null) {
405+
for (Entry<String, String> header : extraHeaderParams.entrySet()) {
406+
reqBuilder.header(
407+
header.getKey().toLowerCase(),
408+
parameterToString(header.getValue())
409+
);
405410
}
411+
}
406412
}
407413
408414
/**

tests/CTS/methods/requests/search/assignUserId.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
"method": "POST",
1212
"body": {
1313
"cluster": "theCluster"
14+
},
15+
"headers": {
16+
"x-algolia-user-id": "userID"
1417
}
1518
}
1619
}

tests/CTS/methods/requests/search/batchAssignUserIds.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
"user1",
2020
"user2"
2121
]
22+
},
23+
"headers": {
24+
"x-algolia-user-id": "userID"
2225
}
2326
}
2427
}

tests/CTS/methods/requests/templates/java/requests.mustache

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,15 @@ class {{client}}Tests {
6262
assertEquals(expectedQuery.get(p.getKey()), p.getValue());
6363
}
6464
{{/request.queryParameters}}
65+
66+
{{#request.headers}}
67+
Map<String, String> expectedHeaders = JSON.deserialize("{{#lambda.escapequotes}}{{{request.headers}}}{{/lambda.escapequotes}}", new TypeToken<HashMap<String, String>>() {}.getType());
68+
Map<String, String> actualHeaders = req.headers;
69+
70+
for (Map.Entry<String, String> p : expectedHeaders.entrySet()) {
71+
assertEquals(actualHeaders.get(p.getKey()), p.getValue());
72+
}
73+
{{/request.headers}}
6574
}
6675
{{/tests}}
6776
{{/blocks}}

tests/CTS/methods/requests/templates/javascript/requests.mustache

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ describe('{{operationId}}', () => {
1717
expect(req.method).toEqual('{{{request.method}}}');
1818
expect(req.data).toEqual({{#request.body}}{{{.}}}{{/request.body}}{{^request.body}}undefined{{/request.body}});
1919
expect(req.searchParams).toStrictEqual({{#request.queryParameters}}{{{.}}}{{/request.queryParameters}}{{^request.queryParameters}}undefined{{/request.queryParameters}});
20+
{{#request.headers}}
21+
expect(req.headers).toEqual(
22+
expect.objectContaining({{{request.headers}}})
23+
);
24+
{{/request.headers}}
2025
});
2126

2227
{{/tests}}

tests/CTS/methods/requests/templates/php/requests.mustache

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,19 @@ class {{clientPrefix}}Test extends TestCase implements HttpClientInterface
5050
$recordedRequest->getUri()->getQuery()
5151
);
5252
}
53+
54+
if (isset($request['headers'])) {
55+
foreach ($request['headers'] as $key => $value) {
56+
$this->assertArrayHasKey(
57+
$key,
58+
$recordedRequest->getHeaders()
59+
);
60+
$this->assertEquals(
61+
$recordedRequest->getHeaderLine($key),
62+
$value
63+
);
64+
}
65+
}
5366
}
5467
}
5568

@@ -92,6 +105,9 @@ class {{clientPrefix}}Test extends TestCase implements HttpClientInterface
92105
{{#request.queryParameters}}
93106
"queryParameters" => json_decode("{{#lambda.escapequotes}}{{{request.queryParameters}}}{{/lambda.escapequotes}}", true),
94107
{{/request.queryParameters}}
108+
{{#request.headers}}
109+
"headers" => json_decode("{{#lambda.escapequotes}}{{{request.headers}}}{{/lambda.escapequotes}}", true),
110+
{{/request.headers}}
95111
],
96112
]);
97113
}

tests/output/java/src/test/java/com/algolia/CallEcho.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.Map;
77
import okhttp3.Call;
88
import okhttp3.Callback;
9+
import okhttp3.Headers;
910
import okhttp3.HttpUrl;
1011
import okhttp3.MediaType;
1112
import okhttp3.Protocol;
@@ -61,6 +62,14 @@ private Map<String, String> buildQueryParameters() {
6162
return params;
6263
}
6364

65+
private Map<String, String> buildHeaders(Headers headers) {
66+
Map<String, String> mapHeaders = new HashMap<>();
67+
for (String headerName : headers.names()) {
68+
mapHeaders.put(headerName, headers.get(headerName));
69+
}
70+
return mapHeaders;
71+
}
72+
6473
@Override
6574
public void enqueue(Callback callback) {
6675
Response.Builder builder = new Response.Builder();
@@ -74,6 +83,8 @@ public void enqueue(Callback callback) {
7483
body.method = request.method();
7584
body.body = processResponseBody();
7685
body.queryParameters = buildQueryParameters();
86+
body.headers = buildHeaders(request.headers());
87+
7788
builder.body(
7889
ResponseBody.create(
7990
JSON.serialize(body),

tests/output/java/src/test/java/com/algolia/EchoResponse.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ public class EchoResponse {
88
public String method;
99
public String body;
1010
public Map<String, String> queryParameters;
11+
public Map<String, String> headers;
1112
}

0 commit comments

Comments
 (0)