Files
Ferme/tests/Service/PontBasculePayloadDecoderTest.php

62 lines
1.8 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Tests\Service;
use App\Exception\PontBasculeException;
use App\Service\PontBasculePayloadDecoder;
use PHPUnit\Framework\TestCase;
/**
* @internal
*/
final class PontBasculePayloadDecoderTest extends TestCase
{
public function testDecodeValidPayload(): void
{
$decoder = new PontBasculePayloadDecoder();
$payload = json_encode([
'response_ascii' => "\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);
}
}