Skip to content

Commit c5d8de6

Browse files
feat: Add a new filter option to the OptionsFilterMiddleware (#674)
1 parent d8f3ffa commit c5d8de6

2 files changed

Lines changed: 65 additions & 1 deletion

File tree

src/GapicClientTrait.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -718,7 +718,8 @@ private function createCallStack(array $callConstructionOptions)
718718
'transportOptions',
719719
'metadataCallback',
720720
'audience',
721-
'metadataReturnType'
721+
'metadataReturnType',
722+
'middlewareOptions'
722723
]);
723724

724725
foreach (\array_reverse($this->middlewareCallables) as $fn) {

tests/Unit/GapicClientTraitTest.php

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,69 @@ public function testHeadersOverwriteBehavior()
135135
);
136136
}
137137

138+
public function testMiddlewareOptionsIsPreservedByFilterAndVisibleToMiddlewares()
139+
{
140+
$unaryDescriptors = [
141+
'callType' => Call::UNARY_CALL,
142+
'responseType' => 'decodeType'
143+
];
144+
$request = new MockRequestBody([]);
145+
$transport = $this->prophesize(TransportInterface::class);
146+
147+
$middlewareOptions = ['myCustomKey' => 'myCustomValue'];
148+
149+
$transport->startUnaryCall(
150+
Argument::type(Call::class),
151+
Argument::that(function ($options) use ($middlewareOptions) {
152+
return isset($options['middlewareOptions'])
153+
&& $options['middlewareOptions'] === $middlewareOptions;
154+
})
155+
)
156+
->shouldBeCalledOnce()
157+
->willReturn($this->prophesize(PromiseInterface::class)->reveal());
158+
159+
$credentialsWrapper = CredentialsWrapper::build([
160+
'keyFile' => __DIR__ . '/testdata/json-key-file.json'
161+
]);
162+
163+
$client = new StubGapicClient();
164+
$client->set('agentHeader', []);
165+
$client->set(
166+
'retrySettings',
167+
['method' => $this->prophesize(RetrySettings::class)->reveal()]
168+
);
169+
$client->set('transport', $transport->reveal());
170+
$client->set('credentialsWrapper', $credentialsWrapper);
171+
$client->set('descriptors', ['method' => $unaryDescriptors]);
172+
173+
$appendedCalled = false;
174+
$client->addMiddleware(function (callable $handler) use (&$appendedCalled, $middlewareOptions) {
175+
return function (Call $call, array $options) use ($handler, &$appendedCalled, $middlewareOptions) {
176+
$appendedCalled = true;
177+
$this->assertEquals($middlewareOptions, $options['middlewareOptions'] ?? null);
178+
return $handler($call, $options);
179+
};
180+
});
181+
182+
$prependedCalled = false;
183+
$client->prependMiddleware(function (callable $handler) use (&$prependedCalled, $middlewareOptions) {
184+
return function (Call $call, array $options) use ($handler, &$prependedCalled, $middlewareOptions) {
185+
$prependedCalled = true;
186+
$this->assertEquals($middlewareOptions, $options['middlewareOptions'] ?? null);
187+
return $handler($call, $options);
188+
};
189+
});
190+
191+
$client->startApiCall(
192+
'method',
193+
$request,
194+
['middlewareOptions' => $middlewareOptions]
195+
);
196+
197+
$this->assertTrue($appendedCalled, 'Appended middleware should have been called');
198+
$this->assertTrue($prependedCalled, 'Prepended middleware should have been called');
199+
}
200+
138201
public function testVersionedHeadersOverwriteBehavior()
139202
{
140203
$unaryDescriptors = [

0 commit comments

Comments
 (0)