From 73482312ba17cd6c2dbc0cbf50682303c6703510 Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Wed, 20 Aug 2025 16:20:52 +0200 Subject: [PATCH 1/4] [Composer] Added missing requirement on symfony/http-foundation --- composer.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index fcd5d9f..3ad4a2a 100644 --- a/composer.json +++ b/composer.json @@ -10,11 +10,12 @@ "prefer-stable": true, "require": { "php": "^7.4 || ^8.0", - "ext-json": "*", "ext-dom": "*", + "ext-json": "*", "ibexa/test-core": "~4.6.x-dev", "justinrainbow/json-schema": "^5.2", "symfony/browser-kit": "^5.4", + "symfony/http-foundation": "^5.4", "symfony/mime": "^5.4", "symfony/proxy-manager-bridge": "^5.4", "symfony/translation": "^5.4", From 6cc8d91a908e0029f760488765e5f6143efc8a7a Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Wed, 20 Aug 2025 16:21:48 +0200 Subject: [PATCH 2/4] Added `$expectedStatusCode` property to EndpointRequestDefinition --- .../Value/EndpointRequestDefinition.php | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/contracts/Request/Value/EndpointRequestDefinition.php b/src/contracts/Request/Value/EndpointRequestDefinition.php index 1e1ea5e..5a18b72 100644 --- a/src/contracts/Request/Value/EndpointRequestDefinition.php +++ b/src/contracts/Request/Value/EndpointRequestDefinition.php @@ -38,9 +38,12 @@ final class EndpointRequestDefinition implements Stringable */ private ?string $snapshotName; + private ?int $expectedStatusCode; + /** * @param array $headers input headers * @param string|null $name unique name + * @param int|null $expectedStatusCode expected HTTP status code. If none is given, any successful status code is accepted (>=200 <300) */ public function __construct( string $method, @@ -50,7 +53,8 @@ public function __construct( array $headers = [], ?InputPayload $payload = null, ?string $name = null, - ?string $snapshotName = null + ?string $snapshotName = null, + ?int $expectedStatusCode = null ) { $this->method = $method; $this->uri = $uri; @@ -60,6 +64,7 @@ public function __construct( $this->payload = $payload; $this->name = $name; $this->snapshotName = $snapshotName; + $this->expectedStatusCode = $expectedStatusCode; } public function getMethod(): string @@ -149,6 +154,11 @@ public function getSnapshotName(): ?string return $this->snapshotName; } + public function getExpectedStatusCode(): ?int + { + return $this->expectedStatusCode; + } + public function withAcceptHeader(?string $acceptHeader): self { $endpointDefinition = clone $this; @@ -173,6 +183,14 @@ public function withSnapshotName(?string $snapshotName): self return $endpointDefinition; } + public function withExpectedStatusCode(?int $expectedStatusCode): self + { + $endpointDefinition = clone $this; + $endpointDefinition->expectedStatusCode = $expectedStatusCode; + + return $endpointDefinition; + } + public function __clone() { if (null !== $this->payload) { From 2183d940a877fa309359f62e296014eeb1167fff Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Wed, 20 Aug 2025 16:22:31 +0200 Subject: [PATCH 3/4] Added asserting expected HTTP status code to BaseRestWebTestCase --- src/contracts/BaseRestWebTestCase.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/contracts/BaseRestWebTestCase.php b/src/contracts/BaseRestWebTestCase.php index c40a86e..b23ce2d 100644 --- a/src/contracts/BaseRestWebTestCase.php +++ b/src/contracts/BaseRestWebTestCase.php @@ -41,7 +41,17 @@ public function testEndpoint(EndpointRequestDefinition $endpointDefinition): voi { $response = $this->performRequest($endpointDefinition); - self::assertResponseIsSuccessful(); + $expectedStatusCode = $endpointDefinition->getExpectedStatusCode(); + if (null === $expectedStatusCode) { + self::assertResponseIsSuccessful(); + } else { + $actualStatusCode = $response->getStatusCode(); + self::assertSame( + $actualStatusCode, + $expectedStatusCode, + "Expected HTTP $expectedStatusCode, got HTTP $actualStatusCode status code" + ); + } $content = (string)$response->getContent(); $this->assertResponseIsValid( From a24bd3e165eedaea9440832b7123d8e190725b04 Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Wed, 20 Aug 2025 16:23:31 +0200 Subject: [PATCH 4/4] [Tests] Added coverage for the ` EndpointRequestDefinition::$expectedStatusCode` property --- .../Value/EndpointRequestDefinitionTest.php | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/lib/Request/Value/EndpointRequestDefinitionTest.php b/tests/lib/Request/Value/EndpointRequestDefinitionTest.php index df1bff4..76ab939 100644 --- a/tests/lib/Request/Value/EndpointRequestDefinitionTest.php +++ b/tests/lib/Request/Value/EndpointRequestDefinitionTest.php @@ -11,6 +11,7 @@ use Ibexa\Contracts\Test\Rest\Request\Value\EndpointRequestDefinition; use PHPUnit\Framework\TestCase; use RuntimeException; +use Symfony\Component\HttpFoundation\Response; /** * @covers \Ibexa\Contracts\Test\Rest\Request\Value\EndpointRequestDefinition @@ -74,4 +75,26 @@ public function testWithSnapshotName(): void self::assertNull($endpointRequestDefinition->getSnapshotName()); self::assertSame($snapshotName, $clonedEndpointRequestDefinition->getSnapshotName()); } + + public function testWithExpectedStatusCode(): void + { + $endpointRequestDefinition = new EndpointRequestDefinition('GET', '/foo', null, 'application/xml'); + self::assertNull($endpointRequestDefinition->getExpectedStatusCode()); + + $endpointRequestDefinition = $endpointRequestDefinition->withExpectedStatusCode(Response::HTTP_CREATED); + self::assertSame(Response::HTTP_CREATED, $endpointRequestDefinition->getExpectedStatusCode()); + + $endpointRequestDefinition = new EndpointRequestDefinition( + 'GET', + '/foo', + null, + 'application/xml', + [], + null, + null, + null, + Response::HTTP_NO_CONTENT + ); + self::assertSame(Response::HTTP_NO_CONTENT, $endpointRequestDefinition->getExpectedStatusCode()); + } }