From f4df77fabc3f761be979b61cc509e0e361cf812a Mon Sep 17 00:00:00 2001 From: tristan Date: Thu, 21 May 2026 14:30:29 +0200 Subject: [PATCH] test(fer-19) : couverture du mapping PontBasculeHealthProvider Co-Authored-By: Claude Opus 4.7 (1M context) --- tests/State/PontBasculeHealthProviderTest.php | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 tests/State/PontBasculeHealthProviderTest.php diff --git a/tests/State/PontBasculeHealthProviderTest.php b/tests/State/PontBasculeHealthProviderTest.php new file mode 100644 index 0000000..5fd8e80 --- /dev/null +++ b/tests/State/PontBasculeHealthProviderTest.php @@ -0,0 +1,78 @@ +providerForHealthBody(json_encode([ + 'ok' => true, + 'busy' => false, + 'port_connected' => true, + 'port_error' => null, + 'hostname' => 'liot-rasp-ferme-01', + ], JSON_THROW_ON_ERROR)); + + $result = $provider->provide(new Get()); + + self::assertInstanceOf(PontBasculeHealthCheck::class, $result); + self::assertTrue($result->healthy); + self::assertTrue($result->ok); + self::assertFalse($result->busy); + self::assertTrue($result->portConnected); + self::assertNull($result->portError); + self::assertSame('liot-rasp-ferme-01', $result->hostname); + } + + public function testProvideMapsUnhealthyPayloadWithPortError(): void + { + $provider = $this->providerForHealthBody(json_encode([ + 'ok' => true, + 'busy' => true, + 'port_connected' => false, + 'port_error' => 'device disconnected', + 'hostname' => 'liot-rasp-ferme-01', + ], JSON_THROW_ON_ERROR)); + + $result = $provider->provide(new Get()); + + self::assertFalse($result->healthy); + self::assertTrue($result->ok); + self::assertTrue($result->busy); + self::assertFalse($result->portConnected); + self::assertSame('device disconnected', $result->portError); + } + + private function providerForHealthBody(string $body): PontBasculeHealthProvider + { + $response = $this->createStub(ResponseInterface::class); + $response->method('getContent')->willReturn($body); + + $httpClient = $this->createMock(HttpClientInterface::class); + $httpClient + ->expects(self::once()) + ->method('request') + ->with('GET', 'http://example.test/health') + ->willReturn($response) + ; + + $service = new PontBasculeService($httpClient, new PontBasculePayloadDecoder(), 'http://example.test', false); + + return new PontBasculeHealthProvider($service); + } +}