Skip to content

Commit cbb1d7e

Browse files
authored
Merge pull request #485 from markwalet/test-multiple-requests
Make sure multiple assertions can be made on the same request class
2 parents de1e0be + 1e8b182 commit cbb1d7e

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

src/Http/Faking/MockClient.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -463,16 +463,21 @@ private function checkClosureAgainstResponses(callable $closure, ?int $index = n
463463
// and call the callable accordingly. We will only fail if it returns `false`.
464464

465465
if ($fqcn = $this->getRequestClass($closure)) {
466-
/** @var Response */
466+
/** @var Response $response */
467467
foreach ($this->getRecordedResponses() as $response) {
468468
if (get_class($request = $response->getPendingRequest()->getRequest()) !== $fqcn) {
469469
continue;
470470
}
471471

472-
return $closure($request, $response) !== false;
472+
$passed = $closure($request, $response) !== false;
473+
474+
if ($passed === true) {
475+
return true;
476+
}
473477
}
474-
}
475478

479+
return false;
480+
}
476481
// Let's then check if the latest response resolves the callable
477482
// with a successful result.
478483

tests/Unit/MockClientTest.php

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -267,17 +267,28 @@
267267
test('`assertSent` accepts the request class as a type-hint', function () {
268268
$mockClient = new MockClient([
269269
MockResponse::make(['name' => 'Sam']),
270+
MockResponse::make(['name' => 'Sam']),
270271
]);
271272

272-
$request = new UserRequest;
273-
$request->headers()->add('X-Foo', 'bar');
273+
$requestA = new UserRequest;
274+
$requestA->headers()->add('X-Foo', 'bar');
275+
$requestB = new UserRequest;
276+
$requestB->headers()->add('X-Foo', 'two');
277+
278+
connector()->send($requestA, $mockClient);
279+
connector()->send($requestB, $mockClient);
274280

275-
connector()->send($request, $mockClient);
281+
$mockClient->assertSent(function (UserRequest $request) {
282+
$header = $request->headers()->get('X-Foo');
283+
expect($header)->toBeIn(['bar', 'two']);
276284

285+
return $header === 'bar';
286+
});
277287
$mockClient->assertSent(function (UserRequest $request) {
278-
expect($request->headers()->all())->toMatchArray([
279-
'X-Foo' => 'bar',
280-
]);
288+
$header = $request->headers()->get('X-Foo');
289+
expect($header)->toBeIn(['bar', 'two']);
290+
291+
return $header === 'two';
281292
});
282293
});
283294

0 commit comments

Comments
 (0)