From d0a73afd542303234177d645b27942814d8c0b35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20St=C3=B6hr?= Date: Wed, 2 Jul 2025 13:44:42 +0200 Subject: [PATCH] feat(http-client-mock): add new method to reset request builder --- .../MockRequestBuilderCollection.php | 5 ++ .../MockRequestBuilderCollectionTest.php | 46 +++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/src/HttpClientMock/MockRequestBuilderCollection.php b/src/HttpClientMock/MockRequestBuilderCollection.php index 7422794..92958b5 100644 --- a/src/HttpClientMock/MockRequestBuilderCollection.php +++ b/src/HttpClientMock/MockRequestBuilderCollection.php @@ -68,4 +68,9 @@ public function count(): int { return count($this->requestBuilders); } + + public function reset(): void + { + $this->requestBuilders = []; + } } diff --git a/tests/HttpClientMock/MockRequestBuilderCollectionTest.php b/tests/HttpClientMock/MockRequestBuilderCollectionTest.php index 4dca0b1..926426a 100644 --- a/tests/HttpClientMock/MockRequestBuilderCollectionTest.php +++ b/tests/HttpClientMock/MockRequestBuilderCollectionTest.php @@ -13,6 +13,7 @@ use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; +use Symfony\Component\HttpClient\Response\MockResponse; #[CoversClass(MockRequestBuilder::class)] #[CoversClass(MockRequestBuilderCollection::class)] @@ -237,6 +238,51 @@ public function testAssertThatFails(): void $this->fail('Expected assertion was not thrown'); } + public function testReset(): void + { + $collection = new MockRequestBuilderCollection(); + $collection->addMockRequestBuilder( + (new MockRequestBuilder()) + ->method('GET') + ->willRespond(new MockResponseBuilder()), + ); + + self::assertCount(1, $collection); + + $collection->reset(); + + self::assertCount(0, $collection); + } + + public function testResetPreventsStaleCallbacks(): void + { + $collection = new MockRequestBuilderCollection(); + + $collection->addMockRequestBuilder( + (new MockRequestBuilder()) + ->method('GET') + ->uri('/test') + ->onMatch(static function (): void { + // This callback should not be called after reset + }) + ->willRespond(new MockResponseBuilder()), + ); + + $collection->reset(); + + $collection->addMockRequestBuilder( + (new MockRequestBuilder()) + ->method('GET') + ->uri('/test') + ->willRespond(new MockResponseBuilder()), + ); + + // This should not throw "Value of type null is not callable" error + $response = $collection('GET', '/test', []); + + self::assertInstanceOf(MockResponse::class, $response); + } + /** @return mixed[] */ public static function requests(): array {