createMock(HttpClientInterface::class); $httpClient->expects(self::never())->method('request'); $service = new PontBasculeService($httpClient, $decoder, 'http://example.test', true); $result = $service->fetch(); self::assertSame(121, $result->getDsd()); self::assertSame(1420.0, $result->getWeight()); self::assertInstanceOf(DateTimeImmutable::class, $result->getWeighedAt()); } public function testFetchUsesHttpClientWhenNotBypass(): void { $payload = json_encode([ 'response_ascii' => "\u{0001}\u{0002}040200\u{0002}03000123.kg \u{0002}9900042", ], JSON_THROW_ON_ERROR); $response = $this->createMock(ResponseInterface::class); $response->expects(self::once())->method('getContent')->with(false)->willReturn($payload); $httpClient = $this->createMock(HttpClientInterface::class); $httpClient ->expects(self::once()) ->method('request') ->with('POST', 'http://example.test') ->willReturn($response) ; $decoder = new PontBasculePayloadDecoder(); $service = new PontBasculeService($httpClient, $decoder, 'http://example.test', false); $result = $service->fetch(); self::assertSame(42, $result->getDsd()); self::assertSame(123.0, $result->getWeight()); self::assertInstanceOf(DateTimeImmutable::class, $result->getWeighedAt()); } public function testFetchThrowsOnTransportFailure(): void { $exception = $this->createStub(TransportExceptionInterface::class); $httpClient = $this->createMock(HttpClientInterface::class); $httpClient ->expects(self::once()) ->method('request') ->willThrowException($exception) ; $decoder = new PontBasculePayloadDecoder(); $service = new PontBasculeService($httpClient, $decoder, 'http://example.test', false); $this->expectException(PontBasculeException::class); $this->expectExceptionMessage('Erreur lors de la communication avec le pont bascule:'); $service->fetch(); } }