Skip to content

Commit 155f920

Browse files
committed
Add additional tests for wildcards
1 parent b42a832 commit 155f920

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

tests/Unit/ClientTest.php

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use PsrMock\Psr18\Client;
77
use PsrMock\Psr18\Exceptions\ClientQueueEmpty;
88
use PsrMock\Psr18\Exceptions\ClientRequestLimitSurpassed;
9+
use PsrMock\Psr18\Exceptions\ClientRequestMissed;
910
use PsrMock\Psr18\Exceptions\ClientTotalRequestLimitSurpassed;
1011

1112
it('can return a fallback response', function () {
@@ -177,6 +178,21 @@
177178
]);
178179
})->throws(ClientRequestLimitSurpassed::class, sprintf(ClientRequestLimitSurpassed::STRING_REQUEST_URI_WITH_LIMIT, 1, 'GET https://example'));
179180

181+
it('throws an exception if there are no matches and no fallbacks or wildcards configured', function () {
182+
$client = new Client();
183+
184+
$requestUri = Mockery::mock(UriInterface::class);
185+
$requestUri->shouldReceive('__toString')->andReturn('https://example');
186+
187+
$request = Mockery::mock(RequestInterface::class);
188+
$request->shouldReceive('getMethod')->andReturn('GET');
189+
$request->shouldReceive('getUri')->andReturn($requestUri);
190+
191+
$client->addResponse('POST', 'https://example', Mockery::mock(ResponseInterface::class));
192+
193+
$client->sendRequest($request);
194+
})->throws(ClientRequestMissed::class, sprintf(ClientRequestMissed::STRING_QUEUE_MISSED_EMPTY_FOR_URI, 'GET https://example'));
195+
180196
it('can send a request and record the exchange', function () {
181197
$client = new Client();
182198

@@ -208,3 +224,75 @@
208224
->toHaveKey('response', $response)
209225
->toHaveKey('count', 1);
210226
});
227+
228+
it('will queue and return wildcard responses', function () {
229+
$client = new Client();
230+
231+
$uri1 = Mockery::mock(UriInterface::class);
232+
$uri1->shouldReceive('__toString')->andReturn('https://example');
233+
234+
$uri2 = Mockery::mock(UriInterface::class);
235+
$uri2->shouldReceive('__toString')->andReturn('https://somewhere');
236+
237+
$request1 = Mockery::mock(RequestInterface::class);
238+
$request1->shouldReceive('getMethod')->andReturn('GET');
239+
$request1->shouldReceive('getUri')->andReturn($uri1);
240+
241+
$request2 = Mockery::mock(RequestInterface::class);
242+
$request2->shouldReceive('getMethod')->andReturn('POST');
243+
$request2->shouldReceive('getUri')->andReturn($uri2);
244+
245+
$request3 = Mockery::mock(RequestInterface::class);
246+
$request3->shouldReceive('getMethod')->andReturn('PATCH');
247+
$request3->shouldReceive('getUri')->andReturn($uri1);
248+
249+
$request4 = Mockery::mock(RequestInterface::class);
250+
$request4->shouldReceive('getMethod')->andReturn('PUT');
251+
$request4->shouldReceive('getUri')->andReturn($uri2);
252+
253+
$wildcard1 = Mockery::mock(ResponseInterface::class);
254+
$wildcard2 = Mockery::mock(ResponseInterface::class);
255+
$wildcard3 = Mockery::mock(ResponseInterface::class);
256+
257+
$fallback = Mockery::mock(ResponseInterface::class);
258+
$client->setFallbackResponse($fallback);
259+
260+
expect($client->getWildcardResponses())
261+
->toBeArray()
262+
->toHaveCount(0);
263+
264+
$client->addResponseWildcard($wildcard1);
265+
$client->addResponseWildcard($wildcard2);
266+
$client->addResponseWildcard($wildcard3);
267+
268+
expect($client->getWildcardResponses())
269+
->toBeArray()
270+
->toHaveCount(3);
271+
272+
expect($client->getWildcardResponses()[0])
273+
->toBe($wildcard1);
274+
275+
expect($client->getWildcardResponses()[1])
276+
->toBe($wildcard2);
277+
278+
expect($client->getWildcardResponses()[2])
279+
->toBe($wildcard3);
280+
281+
$returnedResponses = $client->sendRequests([$request1, $request2, $request3, $request4]);
282+
283+
expect($returnedResponses)
284+
->toBeArray()
285+
->toHaveCount(4);
286+
287+
expect($returnedResponses[0])
288+
->toBe($wildcard1);
289+
290+
expect($returnedResponses[1])
291+
->toBe($wildcard2);
292+
293+
expect($returnedResponses[2])
294+
->toBe($wildcard3);
295+
296+
expect($returnedResponses[3])
297+
->toBe($fallback);
298+
});

0 commit comments

Comments
 (0)