Skip to content

Commit b8b7dda

Browse files
committed
improve validateOptions
1 parent 5835e5c commit b8b7dda

File tree

3 files changed

+33
-12
lines changed

3 files changed

+33
-12
lines changed

Core/src/ApiHelperTrait.php

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -272,25 +272,28 @@ private function splitOptionalArgs(array $input, array $extraAllowedKeys = []):
272272
* the CallOptions classname. Parameters are split and returned in the order
273273
* that the options types are provided.
274274
*/
275-
private function validateOptions(array $options, array|string ...$optionTypes): array
275+
private function validateOptions(array $options, array|Message|string ...$optionTypes): array
276276
{
277277
$splitOptions = [];
278278
foreach ($optionTypes as $optionType) {
279279
if (is_array($optionType)) {
280280
$splitOptions[] = $this->pluckArray($optionType, $options);
281-
} elseif (is_string($optionType)) {
282-
if (is_subclass_of($optionType, Message::class)) {
281+
} else {
282+
if ($optionType === CallOptions::class) {
283+
$callOptionKeys = array_keys((new CallOptions([]))->toArray());
284+
$splitOptions[] = $this->pluckArray($callOptionKeys, $options);
285+
} else {
283286
$messageKeys = array_map(
284287
fn ($method) => lcfirst(substr($method, 3)),
285288
array_filter(
286289
get_class_methods($optionType),
287290
fn ($m) => 0 === strpos($m, 'get')
288291
)
289292
);
290-
$splitOptions[] = $this->pluckArray($messageKeys, $options);
291-
} elseif ($optionType === CallOptions::class) {
292-
$callOptionKeys = array_keys((new CallOptions([]))->toArray());
293-
$splitOptions[] = $this->pluckArray($callOptionKeys, $options);
293+
$messageOptions = $this->pluckArray($messageKeys, $options);
294+
$splitOptions[] = $optionType instanceof Message
295+
? $this->serializer->decodeMessage($optionType, $messageOptions)
296+
: $messageOptions;
294297
}
295298
}
296299
}

Core/tests/Unit/ApiHelperTraitTest.php

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818
namespace Google\Cloud\Core\Tests\Unit;
1919

2020
use Google\ApiCore\Options\CallOptions;
21+
use Google\ApiCore\Serializer;
22+
use Google\ApiCore\Testing\MockRequest;
2123
use Google\Cloud\Core\Duration;
2224
use Google\Cloud\Core\Testing\GrpcTestTrait;
2325
use Google\Cloud\Core\Tests\Unit\Stubs\ApiHelpersTraitImpl;
24-
use Google\Cloud\Core\Tests\Unit\Stubs\TestMessage;
2526
use PHPUnit\Framework\TestCase;
2627
use Prophecy\PhpUnit\ProphecyTrait;
2728

@@ -38,6 +39,7 @@ class ApiHelperTraitTest extends TestCase
3839
public function setUp(): void
3940
{
4041
$this->implementation = new ApiHelpersTraitImpl();
42+
$this->implementation->serializer = new Serializer();
4143
}
4244

4345
public function testFormatsTimestamp()
@@ -294,18 +296,18 @@ public function validateOptionsProvider()
294296
],
295297
[
296298
[
297-
'baz' => 'bat',
299+
'pageToken' => 'bat',
298300
'qux' => 'quux',
299301
'timeoutMillis' => 123,
300302
],
301303
[
302304
CallOptions::class,
303-
TestMessage::class,
305+
MockRequest::class,
304306
['qux'],
305307
],
306308
[
307309
['timeoutMillis' => 123],
308-
['baz' => 'bat'],
310+
['pageToken' => 'bat'],
309311
['qux' => 'quux'],
310312
]
311313
],
@@ -315,7 +317,7 @@ public function validateOptionsProvider()
315317
],
316318
[
317319
['baz'],
318-
TestMessage::class,
320+
MockRequest::class,
319321
CallOptions::class,
320322
],
321323
[
@@ -324,6 +326,20 @@ public function validateOptionsProvider()
324326
[],
325327
]
326328
],
329+
[
330+
[
331+
'baz' => 'bat',
332+
'pageToken' => 'foo1',
333+
],
334+
[
335+
['baz'],
336+
new MockRequest(),
337+
],
338+
[
339+
['baz' => 'bat'],
340+
(new MockRequest())->setPageToken('foo1'),
341+
]
342+
],
327343
];
328344
}
329345

Core/tests/Unit/Stubs/ApiHelpersTraitImpl.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,6 @@ class ApiHelpersTraitImpl
3333
unpackValue as public;
3434
validateOptions as public;
3535
}
36+
37+
public $serializer;
3638
}

0 commit comments

Comments
 (0)