"\u{0001}\u{0002}040200\u{0002}01001420.kg \u{0002}02000000.kg \u{0002}03001420.kg \u{0002}9900121", ], JSON_THROW_ON_ERROR); $result = $decoder->decode($payload); self::assertSame(121, $result->getDsd()); self::assertSame(1420.0, $result->getWeight()); } public function testDecodeInvalidPayloadThrows(): void { $decoder = new PontBasculePayloadDecoder(); $this->expectException(PontBasculeException::class); $this->expectExceptionMessage('Réponse invalide du pont bascule.'); $decoder->decode('not-json'); } public function testDecodeMissingFieldThrows(): void { $decoder = new PontBasculePayloadDecoder(); $payload = json_encode(['ok' => true], JSON_THROW_ON_ERROR); $this->expectException(PontBasculeException::class); $this->expectExceptionMessage('Réponse incomplète du pont bascule: champ "response_ascii" manquant.'); $decoder->decode($payload); } public function testDecodeUnreadableValuesThrows(): void { $decoder = new PontBasculePayloadDecoder(); $payload = json_encode(['response_ascii' => 'no-data'], JSON_THROW_ON_ERROR); $this->expectException(PontBasculeException::class); $this->expectExceptionMessage('Impossible de lire les valeurs de pesée du pont bascule.'); $decoder->decode($payload); } }