From 106f6dc4a7d0ae45a740714972fdc5139a690969 Mon Sep 17 00:00:00 2001 From: Alexey Kopytko Date: Tue, 29 Sep 2026 08:24:15 +0900 Subject: [PATCH 1/2] fix: Update StackHydratorTest to counter timeout mutation --- tests/Unit/StackHydratorTest.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/Unit/StackHydratorTest.php b/tests/Unit/StackHydratorTest.php index 8597049b..d3c2b586 100644 --- a/tests/Unit/StackHydratorTest.php +++ b/tests/Unit/StackHydratorTest.php @@ -30,6 +30,7 @@ use Patchlevel\Hydrator\Tests\Unit\Fixture\Circle3Dto; use Patchlevel\Hydrator\Tests\Unit\Fixture\ContextAwareDto; use Patchlevel\Hydrator\Tests\Unit\Fixture\DefaultDto; +use Patchlevel\Hydrator\Tests\Unit\Fixture\DummyMiddleware; use Patchlevel\Hydrator\Tests\Unit\Fixture\Email; use Patchlevel\Hydrator\Tests\Unit\Fixture\InferNormalizerDto; use Patchlevel\Hydrator\Tests\Unit\Fixture\InferNormalizerWithIterablesDto; @@ -139,7 +140,16 @@ public function testExtractCircularReference(): void $dto2->to = $dto3; $dto3->to = $dto1; - $this->hydrator->extract($dto1); + // Prevent infinite recursion + $middleware = $this->createMock(Middleware::class); + $middleware + ->expects($this->exactly(4)) + ->method('extract') + ->willReturnCallback((new DummyMiddleware())->extract(...)); + + $hydrator = new StackHydrator(middlewares: [$middleware, new TransformMiddleware()]); + + $hydrator->extract($dto1); } public function testExtractWithInferNormalizer(): void From c72dba473ee6f79aef36a7f5c41d631c3fd83859 Mon Sep 17 00:00:00 2001 From: Alexey Kopytko Date: Tue, 29 Sep 2026 08:30:56 +0900 Subject: [PATCH 2/2] make it more explicit --- tests/Unit/StackHydratorTest.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/Unit/StackHydratorTest.php b/tests/Unit/StackHydratorTest.php index d3c2b586..8b8e3195 100644 --- a/tests/Unit/StackHydratorTest.php +++ b/tests/Unit/StackHydratorTest.php @@ -141,11 +141,13 @@ public function testExtractCircularReference(): void $dto3->to = $dto1; // Prevent infinite recursion + $dummy = new DummyMiddleware(); + $middleware = $this->createMock(Middleware::class); $middleware ->expects($this->exactly(4)) ->method('extract') - ->willReturnCallback((new DummyMiddleware())->extract(...)); + ->willReturnCallback($dummy->extract(...)); $hydrator = new StackHydrator(middlewares: [$middleware, new TransformMiddleware()]);