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); } }