Skip to content

Commit 954efa8

Browse files
authored
feat(php): Add tests for query params (#475)
1 parent adf323c commit 954efa8

File tree

9 files changed

+39
-36
lines changed

9 files changed

+39
-36
lines changed

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

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,7 @@ final class RequestOptionsFactory
99
{
1010
private $config;
1111

12-
private $validQueryParameters = [
13-
'forwardToReplicas',
14-
'replaceExistingSynonyms',
15-
'clearExistingRules',
16-
'getVersion',
17-
];
18-
19-
private $validHeaders = ['Content-type', 'User-Agent', 'createIfNotExists'];
12+
private $validHeaders = ['Content-type', 'User-Agent'];
2013

2114
public function __construct(Configuration $config)
2215
{
@@ -100,7 +93,7 @@ private function normalize($options)
10093
private function format($options)
10194
{
10295
foreach ($options as $name => $value) {
103-
if (in_array($name, ['attributesToRetrieve', 'type'], true)) {
96+
if (in_array($name, self::getAttributesToFormat(), true)) {
10497
if (is_array($value)) {
10598
$options[$name] = implode(',', $value);
10699
}
@@ -114,8 +107,6 @@ private function getOptionType($optionName)
114107
{
115108
if ($this->isValidHeaderName($optionName)) {
116109
return 'headers';
117-
} elseif (in_array($optionName, $this->validQueryParameters, true)) {
118-
return 'query';
119110
} elseif (
120111
in_array(
121112
$optionName,
@@ -126,7 +117,7 @@ private function getOptionType($optionName)
126117
return $optionName;
127118
}
128119

129-
return 'body';
120+
return 'query';
130121
}
131122

132123
private function isValidHeaderName($name)
@@ -141,4 +132,9 @@ private function isValidHeaderName($name)
141132

142133
return false;
143134
}
135+
136+
public static function getAttributesToFormat()
137+
{
138+
return ['attributesToRetrieve', 'type'];
139+
}
144140
}

specs/search/common/parameters.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ HitsPerPage:
88
description: Number of hits per page.
99
default: 20
1010

11-
UserIDInQuery:
11+
# headers
12+
UserIDInHeader:
1213
name: X-Algolia-User-ID
1314
description: userID to assign.
14-
in: query
15+
in: header
1516
required: true
1617
schema:
1718
type: string

specs/search/paths/multiclusters/batchAssignUserIds.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ post:
1010
1111
A successful response indicates that the operation has been taken into account, and the userIDs are directly usable.
1212
parameters:
13-
- $ref: '../../common/parameters.yml#/UserIDInQuery'
13+
- $ref: '../../common/parameters.yml#/UserIDInHeader'
1414
requestBody:
1515
required: true
1616
content:

specs/search/paths/multiclusters/userIds.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ post:
1212
1313
A successful response indicates that the operation has been taken into account, and the userID is directly usable.
1414
parameters:
15-
- $ref: '../../common/parameters.yml#/UserIDInQuery'
15+
- $ref: '../../common/parameters.yml#/UserIDInHeader'
1616
requestBody:
1717
required: true
1818
content:

templates/javascript/api-single.mustache

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,9 @@ export function create{{capitalizedApiName}}(options: CreateClientOptions{{#hasR
175175
{{/queryParams}}{{/vendorExtensions.x-is-custom-request}}
176176

177177
{{#headerParams}}
178-
headers['{{baseName}}'] = {{paramName}};
178+
if ({{paramName}} !== undefined) {
179+
headers['{{baseName}}'] = {{paramName}}.toString();
180+
}
179181
{{/headerParams}}
180182

181183
const request: Request = {

templates/php/api.mustache

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,11 @@
22

33
namespace {{apiPackage}};
44

5-
use GuzzleHttp\Exception\RequestException;
6-
use GuzzleHttp\Exception\ConnectException;
7-
use GuzzleHttp\Psr7\MultipartStream;
8-
use GuzzleHttp\RequestOptions;
9-
use GuzzleHttp\Utils;
105
use {{invokerPackage}}\Algolia;
116
use {{invokerPackage}}\ApiException;
127
use {{invokerPackage}}\Configuration\{{configClassname}};
138
use {{invokerPackage}}\ObjectSerializer;
9+
use {{invokerPackage}}\RequestOptions\RequestOptionsFactory;
1410
use {{invokerPackage}}\RetryStrategy\ApiWrapper;
1511
use {{invokerPackage}}\RetryStrategy\ApiWrapperInterface;
1612
use {{invokerPackage}}\RetryStrategy\ClusterHosts;
@@ -143,13 +139,14 @@ use {{invokerPackage}}\RetryStrategy\ClusterHosts;
143139
* @see {{{dataType}}}
144140
{{/isModel}}
145141
{{/allParams}}
142+
* @param array $requestOptions Request Options
146143
*
147144
* @return {{#returnType}}{{#responses}}{{#dataType}}{{#-first}}array<string, mixed>|{{{dataType}}}{{/-first}}{{/dataType}}{{/responses}}{{/returnType}}{{^returnType}}void{{/returnType}}
148145
{{#isDeprecated}}
149146
* @deprecated
150147
{{/isDeprecated}}
151148
*/
152-
public function {{operationId}}({{^vendorExtensions.x-group-parameters}}{{#allParams}}${{paramName}}{{^required}} = {{{defaultValue}}}{{^defaultValue}}null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{/vendorExtensions.x-group-parameters}}{{#vendorExtensions.x-group-parameters}}$associative_array{{/vendorExtensions.x-group-parameters}})
149+
public function {{operationId}}({{^vendorExtensions.x-group-parameters}}{{#allParams}}${{paramName}}{{^required}} = null{{/required}}, {{/allParams}}{{/vendorExtensions.x-group-parameters}}{{#vendorExtensions.x-group-parameters}}$associative_array{{/vendorExtensions.x-group-parameters}} $requestOptions = [])
153150
{
154151
{{#vendorExtensions.x-group-parameters}}
155152
// unbox the parameters from the associative array
@@ -215,7 +212,7 @@ use {{invokerPackage}}\RetryStrategy\ClusterHosts;
215212
{{#isExplode}}
216213
if (${{paramName}} !== null) {
217214
{{#style}}
218-
if('form' === '{{style}}' && is_array(${{paramName}})) {
215+
if(is_array(${{paramName}}) && ! in_array('{{paramName}}', RequestOptionsFactory::getAttributesToFormat())) {
219216
foreach(${{paramName}} as $key => $value) {
220217
$queryParams[$key] = $value;
221218
}
@@ -259,7 +256,9 @@ use {{invokerPackage}}\RetryStrategy\ClusterHosts;
259256
$httpBody = ${{paramName}};
260257
}
261258
{{/bodyParams}}
262-
259+
{{#headerParams}}
260+
$queryParams['{{baseName}}'] = ${{paramName}};
261+
{{/headerParams}}
263262
{{#servers.0}}
264263
$operationHosts = [{{#servers}}"{{{url}}}"{{^-last}}, {{/-last}}{{/servers}}];
265264
if ($this->hostIndex < 0 || $this->hostIndex >= sizeof($operationHosts)) {
@@ -268,26 +267,29 @@ use {{invokerPackage}}\RetryStrategy\ClusterHosts;
268267
$operationHost = $operationHosts[$this->hostIndex];
269268

270269
{{/servers.0}}
270+
$requestOptions += $queryParams;
271271

272-
return $this->sendRequest('{{httpMethod}}', $resourcePath, $queryParams, $httpBody);
272+
return $this->sendRequest('{{httpMethod}}', $resourcePath, $queryParams, $httpBody, $requestOptions);
273273
}
274274

275275
{{/operation}}
276276

277-
private function sendRequest($method, $resourcePath, $queryParams, $httpBody)
277+
private function sendRequest($method, $resourcePath, $queryParams, $httpBody, $requestOptions)
278278
{
279279
$query = \GuzzleHttp\Psr7\Query::build($queryParams);
280280
281281
if($method == 'GET') {
282282
$request = $this->api->read(
283283
$method,
284-
$resourcePath . ($query ? "?{$query}" : '')
284+
$resourcePath . ($query ? "?{$query}" : ''),
285+
$requestOptions
285286
);
286287
} else {
287288
$request = $this->api->write(
288289
$method,
289290
$resourcePath . ($query ? "?{$query}" : ''),
290-
$httpBody
291+
$httpBody,
292+
$requestOptions
291293
);
292294
}
293295

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@
1111
"method": "POST",
1212
"body": {
1313
"cluster": "theCluster"
14-
},
15-
"queryParameters": {
16-
"X-Algolia-User-ID": "userID"
1714
}
1815
}
1916
}

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@
1919
"user1",
2020
"user2"
2121
]
22-
},
23-
"queryParameters": {
24-
"X-Algolia-User-ID": "userID"
2522
}
2623
}
2724
}

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use Algolia\AlgoliaSearch\Http\HttpClientInterface;
88
use Algolia\AlgoliaSearch\Http\Psr7\Response;
99
use Algolia\AlgoliaSearch\RetryStrategy\ApiWrapper;
1010
use Algolia\AlgoliaSearch\RetryStrategy\ClusterHosts;
11+
use GuzzleHttp\Psr7\Query;
1112
use PHPUnit\Framework\TestCase;
1213
use Psr\Http\Message\RequestInterface;
1314

@@ -42,6 +43,13 @@ class {{clientPrefix}}Test extends TestCase implements HttpClientInterface
4243
$recordedRequest->getBody()->getContents()
4344
);
4445
}
46+
47+
if (isset($request['queryParameters'])) {
48+
$this->assertEquals(
49+
Query::build($request['queryParameters']),
50+
$recordedRequest->getUri()->getQuery()
51+
);
52+
}
4553
}
4654
}
4755

@@ -82,7 +90,7 @@ class {{clientPrefix}}Test extends TestCase implements HttpClientInterface
8290
"body" => json_decode("{{#lambda.escapequotes}}{{{request.body}}}{{/lambda.escapequotes}}"),
8391
{{/request.body}}
8492
{{#request.queryParameters}}
85-
"queryParameters" => json_decode("{{#lambda.escapequotes}}{{{request.queryParameters}}}{{/lambda.escapequotes}}"),
93+
"queryParameters" => json_decode("{{#lambda.escapequotes}}{{{request.queryParameters}}}{{/lambda.escapequotes}}", true),
8694
{{/request.queryParameters}}
8795
],
8896
]);

0 commit comments

Comments
 (0)