Skip to content

Commit 2aaf2da

Browse files
committed
feature: Add the ability to send a list of expected status codes
Breaking change: If you implement SendRequestActionContract then update your signature from ?int $expectedResponseStatusCode = null to int|array|null $expectedResponseStatusCode = null,
1 parent d8553a9 commit 2aaf2da

File tree

4 files changed

+17
-12
lines changed

4 files changed

+17
-12
lines changed

src/Actions/SendRequestAction.php

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public function execute(
4343
string $responseClass,
4444
OptionsInterface|StreamInterface|string|null $body = null,
4545
array $headers = [],
46-
?int $expectedResponseStatusCode = null,
46+
int|array|null $expectedResponseStatusCode = null,
4747
?ResponseInterface $fakedResponse = null,
4848
?Closure $shouldIgnoreLoggersOnError = null,
4949
): AbstractResponse {
@@ -175,7 +175,7 @@ private function getRequestDuration(float $timeStart): float
175175
private function handleResponse(
176176
ApiInterface $api,
177177
ResponseInterface $response,
178-
?int $expectedResponseStatusCode,
178+
int|array|null $expectedResponseStatusCode,
179179
string $responseClass,
180180
?EventDispatcherInterface $dispatcher,
181181
?ApiLoggerInterface $logger,
@@ -189,10 +189,15 @@ private function handleResponse(
189189
$container = $api->factory()
190190
->container();
191191

192+
if (is_array($expectedResponseStatusCode) === false) {
193+
$expectedResponseStatusCode = $expectedResponseStatusCode === null ? [200, 201] : [
194+
$expectedResponseStatusCode,
195+
];
196+
}
197+
192198
$statusCode = $response->getStatusCode();
193199

194-
if ($expectedResponseStatusCode === $statusCode ||
195-
($expectedResponseStatusCode === null && ($statusCode === 200 || $statusCode === 201))) {
200+
if (in_array($statusCode, $expectedResponseStatusCode, true)) {
196201
$body = $this->makeBodyFromResponseAction->execute($responseClass, $response);
197202

198203
$finalResponse = $container->makeResponse($responseClass, $response, $body);

src/Contracts/SendRequestActionContract.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ interface SendRequestActionContract
2323
*
2424
* @param array<int|string,HeadersInterface|string|string[]> $headers
2525
* @param class-string<TResponse> $responseClass
26-
* @param int|null $expectedResponseStatusCode Will raise and failed
27-
* exception if response
28-
* status code is different
29-
* @param IgnoreLoggersOnExceptionClosure|null $shouldIgnoreLoggersOnError
26+
* @param int|array<int>|null $expectedResponseStatusCode Will raise and failed
27+
* exception if response status code is different
28+
* @param IgnoreLoggersOnExceptionClosure|null $shouldIgnoreLoggersOnError
29+
*
3030
* @return TResponse
3131
*/
3232
public function execute(
@@ -35,7 +35,7 @@ public function execute(
3535
string $responseClass,
3636
OptionsInterface|StreamInterface|string|null $body = null,
3737
array $headers = [],
38-
?int $expectedResponseStatusCode = null,
38+
int|array|null $expectedResponseStatusCode = null,
3939
?ResponseInterface $fakedResponse = null,
4040
?Closure $shouldIgnoreLoggersOnError = null
4141
): AbstractResponse;

src/Testing/Assertions/SendTestRequestActionAssert.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public function __construct(
2929
private readonly string $expectedMethod = 'GET',
3030
private readonly Closure|StreamInterface|string|OptionsInterface|array|null $expectedBody = null,
3131
private readonly array $expectedHeaders = [],
32-
private readonly ?int $expectedResponseStatusCode = null,
32+
private readonly int|array|null $expectedResponseStatusCode = null,
3333
) {
3434
$this->buildHeadersAction = new BuildHeadersAction();
3535
}
@@ -40,7 +40,7 @@ public function execute(
4040
string $responseClass,
4141
StreamInterface|string|OptionsInterface|null $body = null,
4242
array $headers = [],
43-
?int $expectedResponseStatusCode = null,
43+
int|array|null $expectedResponseStatusCode = null,
4444
?ResponseInterface $fakedResponse = null,
4545
?Closure $shouldIgnoreLoggersOnError = null,
4646
): TResponse {

tests/Endpoints/TestShouldIgnoreLoggersSendRequestActionAssert.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public function execute(
3434
string $responseClass,
3535
StreamInterface|string|OptionsInterface|null $body = null,
3636
array $headers = [],
37-
?int $expectedResponseStatusCode = null,
37+
int|array|null $expectedResponseStatusCode = null,
3838
?ResponseInterface $fakedResponse = null,
3939
?Closure $shouldIgnoreLoggersOnError = null
4040
): AbstractResponse {

0 commit comments

Comments
 (0)