Skip to content

Commit 2e76ad4

Browse files
committed
feat(cts): add requestOptions tests
1 parent 7df1376 commit 2e76ad4

File tree

8 files changed

+232
-27
lines changed

8 files changed

+232
-27
lines changed

clients/algoliasearch-client-javascript/packages/client-common/src/transporter/createTransporter.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,13 +240,13 @@ export function createTransporter({
240240
cacheable: baseRequestOptions?.cacheable,
241241
timeout: baseRequestOptions?.timeout,
242242
queryParameters: {
243-
...baseRequestOptions?.queryParameters,
244243
...methodOptions.queryParameters,
244+
...baseRequestOptions?.queryParameters,
245245
},
246246
headers: {
247247
Accept: 'application/json',
248-
...baseRequestOptions?.headers,
249248
...methodOptions.headers,
249+
...baseRequestOptions?.headers,
250250
},
251251
};
252252

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,43 @@ public Map<String, Object> buildJSONForRequest(
4242

4343
test.put("hasParameters", req.parameters.size() != 0);
4444

45+
if (req.requestOptions != null) {
46+
test.put("hasRequestOptions", true);
47+
Map<String, Object> requestOptions = new HashMap<>();
48+
49+
if (req.requestOptions.queryParameters != null) {
50+
List<Map<String, String>> queryParameters = new ArrayList<Map<String, String>>();
51+
52+
for (Entry<String, String> entry : req.requestOptions.queryParameters.entrySet()) {
53+
Map<String, String> parameter = new HashMap<>();
54+
55+
parameter.put("key", entry.getKey());
56+
parameter.put("value", entry.getValue());
57+
58+
queryParameters.add(parameter);
59+
}
60+
61+
requestOptions.put("queryParameters", queryParameters);
62+
}
63+
64+
if (req.requestOptions.headers != null) {
65+
List<Map<String, String>> headers = new ArrayList<Map<String, String>>();
66+
67+
for (Entry<String, String> entry : req.requestOptions.headers.entrySet()) {
68+
Map<String, String> parameter = new HashMap<>();
69+
70+
parameter.put("key", entry.getKey());
71+
parameter.put("value", entry.getValue());
72+
73+
headers.add(parameter);
74+
}
75+
76+
requestOptions.put("headers", headers);
77+
}
78+
79+
test.put("requestOptions", requestOptions);
80+
}
81+
4582
if (req.parameters.size() == 0) {
4683
return test;
4784
}

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public class Request {
1414
public String testName;
1515

1616
public Map<String, Object> parameters;
17+
public RequestOptions requestOptions;
1718
public RequestProp request;
1819

1920
@Override
@@ -22,12 +23,29 @@ public String toString() {
2223
sb.append("class Request {\n");
2324
sb.append(" testName: ").append(testName).append("\n");
2425
sb.append(" parameters: ").append(parameters).append("\n");
26+
sb.append(" requestOptions: ").append(requestOptions).append("\n");
2527
sb.append(" request: ").append(request).append("\n");
2628
sb.append("}");
2729
return sb.toString();
2830
}
2931
}
3032

33+
class RequestOptions {
34+
35+
public Map<String, String> queryParameters;
36+
public Map<String, String> headers;
37+
38+
@Override
39+
public String toString() {
40+
StringBuilder sb = new StringBuilder();
41+
sb.append("class RequestOptions {\n");
42+
sb.append(" queryParameters: ").append(queryParameters).append("\n");
43+
sb.append(" headers: ").append(headers).append("\n");
44+
sb.append("}");
45+
return sb.toString();
46+
}
47+
}
48+
3149
class RequestProp {
3250

3351
public String path;

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

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -331,31 +331,22 @@ public class ApiClient {
331331
* @param extraQueryParameters The query parameters, coming from the requestOptions
332332
* @return The full URL
333333
*/
334-
public String buildUrl(String path, Map<String, String> queryParameters, Map<String, String> extraQueryParameters) {
335-
StringBuilder url = new StringBuilder();
336-
337-
//The real host will be assigned by the retry strategy
338-
url.append("http://temp.path").append(path);
334+
public String buildUrl(
335+
String path,
336+
Map<String, String> queryParameters,
337+
Map<String, String> extraQueryParameters
338+
) {
339+
if (extraQueryParameters != null) {
340+
for (Entry<String, String> param : extraQueryParameters.entrySet()) {
341+
queryParameters.put(param.getKey(), param.getValue());
342+
}
343+
}
339344
340-
url = parseQueryParameters(path, url, queryParameters);
341-
url = parseQueryParameters(path, url, extraQueryParameters);
345+
final StringBuilder url = new StringBuilder();
342346
343-
return url.toString();
344-
}
347+
// The real host will be assigned by the retry strategy
348+
url.append("http://temp.path").append(path);
345349
346-
/**
347-
* Parses the given map of Query Parameters to a given URL.
348-
*
349-
* @param path The sub path
350-
* @param url The url to add queryParameters to
351-
* @param queryParameters The query parameters
352-
* @return The URL
353-
*/
354-
public StringBuilder parseQueryParameters(
355-
String path,
356-
StringBuilder url,
357-
Map<String, String> queryParameters
358-
) {
359350
if (queryParameters != null && !queryParameters.isEmpty()) {
360351
// support (constant) query string in `path`, e.g. "/posts?draft=1"
361352
String prefix = path.contains("?") ? "&" : "?";
@@ -376,7 +367,7 @@ public class ApiClient {
376367
}
377368
}
378369
379-
return url;
370+
return url.toString();
380371
}
381372
382373
/**

tests/CTS/methods/requests/common/post.json

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,120 @@
3030
"query": "parameters"
3131
}
3232
}
33+
},
34+
{
35+
"testName": "requestOptions can override default query parameters",
36+
"parameters": {
37+
"path": "/test/requestOptions",
38+
"parameters": {
39+
"query": "parameters"
40+
},
41+
"body": {
42+
"facet": "filters"
43+
}
44+
},
45+
"requestOptions": {
46+
"queryParameters": {
47+
"query": "requestOptions"
48+
}
49+
},
50+
"request": {
51+
"path": "/1/test/requestOptions",
52+
"method": "POST",
53+
"body": {
54+
"facet": "filters"
55+
},
56+
"queryParameters": {
57+
"query": "requestOptions"
58+
}
59+
}
60+
},
61+
{
62+
"testName": "requestOptions merges query parameters with default ones",
63+
"parameters": {
64+
"path": "/test/requestOptions",
65+
"parameters": {
66+
"query": "parameters"
67+
},
68+
"body": {
69+
"facet": "filters"
70+
}
71+
},
72+
"requestOptions": {
73+
"queryParameters": {
74+
"query2": "requestOptions"
75+
}
76+
},
77+
"request": {
78+
"path": "/1/test/requestOptions",
79+
"method": "POST",
80+
"body": {
81+
"facet": "filters"
82+
},
83+
"queryParameters": {
84+
"query": "parameters",
85+
"query2": "requestOptions"
86+
}
87+
}
88+
},
89+
{
90+
"testName": "requestOptions can override default headers",
91+
"parameters": {
92+
"path": "/test/requestOptions",
93+
"parameters": {
94+
"query": "parameters"
95+
},
96+
"body": {
97+
"facet": "filters"
98+
}
99+
},
100+
"requestOptions": {
101+
"headers": {
102+
"x-algolia-api-key": "requestOptions"
103+
}
104+
},
105+
"request": {
106+
"path": "/1/test/requestOptions",
107+
"method": "POST",
108+
"body": {
109+
"facet": "filters"
110+
},
111+
"queryParameters": {
112+
"query": "parameters"
113+
},
114+
"headers": {
115+
"x-algolia-api-key": "requestOptions"
116+
}
117+
}
118+
},
119+
{
120+
"testName": "requestOptions merges headers with default ones",
121+
"parameters": {
122+
"path": "/test/requestOptions",
123+
"parameters": {
124+
"query": "parameters"
125+
},
126+
"body": {
127+
"facet": "filters"
128+
}
129+
},
130+
"requestOptions": {
131+
"headers": {
132+
"x-algolia-api-key": "requestOptions"
133+
}
134+
},
135+
"request": {
136+
"path": "/1/test/requestOptions",
137+
"method": "POST",
138+
"body": {
139+
"facet": "filters"
140+
},
141+
"queryParameters": {
142+
"query": "parameters"
143+
},
144+
"headers": {
145+
"x-algolia-api-key": "requestOptions"
146+
}
147+
}
33148
}
34149
]

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import org.junit.jupiter.api.BeforeAll;
1313
import com.google.gson.reflect.TypeToken;
1414

1515
import com.algolia.utils.JSON;
16+
import com.algolia.utils.RequestOptions;
1617
import com.algolia.model.{{import}}.*;
1718
import com.algolia.api.{{client}};
1819
import org.skyscreamer.jsonassert.JSONAssert;
@@ -39,8 +40,18 @@ class {{client}}Tests {
3940
void {{method}}Test{{testIndex}}() {
4041
{{#parametersWithDataType}}{{> generateParams}}{{/parametersWithDataType}}
4142

43+
{{#hasRequestOptions}}
44+
RequestOptions requestOptions = new RequestOptions();
45+
{{#requestOptions.queryParameters}}
46+
requestOptions.addExtraQueryParameters("{{{key}}}", "{{{value}}}");
47+
{{/requestOptions.queryParameters}}
48+
{{#requestOptions.headers}}
49+
requestOptions.addExtraHeader("{{{key}}}", "{{{value}}}");
50+
{{/requestOptions.headers}}
51+
{{/hasRequestOptions}}
52+
4253
assertDoesNotThrow(() -> {
43-
client.{{method}}({{#parametersWithDataType}}{{> maybeConvertOneOf}}{{^-last}},{{/-last}}{{/parametersWithDataType}});
54+
client.{{method}}({{#parametersWithDataType}}{{> maybeConvertOneOf}}{{^-last}},{{/-last}}{{/parametersWithDataType}}{{#hasRequestOptions}}, requestOptions{{/hasRequestOptions}});
4455
});
4556
EchoResponse req = requester.getLastEchoResponse();
4657

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { {{client}} } from '{{{import}}}';
22
import { echoRequester } from '@experimental-api-clients-automation/requester-node-http';
33
import type { EchoResponse } from '@experimental-api-clients-automation/client-common';
4+
import type { RequestOptions } from '@experimental-api-clients-automation/client-common';
45

56
const appId = process.env.ALGOLIA_APPLICATION_ID || 'test_app_id';
67
const apiKey = process.env.ALGOLIA_SEARCH_KEY || 'test_api_key';
@@ -11,7 +12,22 @@ const client = {{client}}(appId, apiKey, {{#hasRegionalHost}}'{{{defaultRegion}}
1112
describe('{{operationId}}', () => {
1213
{{#tests}}
1314
test('{{testName}}', async () => {
14-
const req = (await client.{{method}}({{#hasParameters}}{{{parameters}}}{{/hasParameters}})) as unknown as EchoResponse;
15+
{{#hasRequestOptions}}
16+
const requestOptions: RequestOptions = {
17+
queryParameters: {
18+
{{#requestOptions.queryParameters}}
19+
'{{{key}}}': '{{{value}}}',
20+
{{/requestOptions.queryParameters}}
21+
},
22+
headers: {
23+
{{#requestOptions.headers}}
24+
'{{{key}}}': '{{{value}}}',
25+
{{/requestOptions.headers}}
26+
}
27+
}
28+
{{/hasRequestOptions}}
29+
30+
const req = (await client.{{method}}({{#hasParameters}}{{{parameters}}}{{/hasParameters}}{{#hasRequestOptions}}, requestOptions{{/hasRequestOptions}})) as unknown as EchoResponse;
1531

1632
expect(req.path).toEqual('{{{request.path}}}');
1733
expect(req.method).toEqual('{{{request.method}}}');

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,25 @@ class {{clientPrefix}}Test extends TestCase implements HttpClientInterface
9191
public function test{{#lambda.titlecase}}{{method}}{{/lambda.titlecase}}{{testIndex}}()
9292
{
9393
$client = $this->getClient();
94+
95+
{{#hasRequestOptions}}
96+
$requestOptions = [
97+
'queryParameters' => [
98+
{{#requestOptions.queryParameters}}
99+
'{{{key}}}' => '{{{value}}}',
100+
{{/requestOptions.queryParameters}}
101+
],
102+
'headers' => [
103+
{{#requestOptions.headers}}
104+
'{{{key}}}' => '{{{value}}}',
105+
{{/requestOptions.headers}}
106+
]
107+
];
108+
{{/hasRequestOptions}}
109+
94110
$client->{{^hasParameters}}{{{method}}}();{{/hasParameters}}{{#hasParameters}}{{{method}}}(
95111
{{#parametersWithDataType}}{{> generateParams}}{{/parametersWithDataType}}
112+
{{#hasRequestOptions}}$requestOptions{{/hasRequestOptions}}
96113
);{{/hasParameters}}
97114

98115
$this->assertRequests([

0 commit comments

Comments
 (0)