test : tests adversariaux InventoryMapper + docblock EarTagSeriesDto
This commit is contained in:
@@ -4,6 +4,16 @@ declare(strict_types=1);
|
||||
|
||||
namespace Malio\EdnotifBundle\Bovin\Dto;
|
||||
|
||||
/**
|
||||
* Wrapper minimal d'une entrée `SerieBoucles` du message de l'opération
|
||||
* `IpBGetInventaire` (quand `includeEarTagStock: true`).
|
||||
*
|
||||
* Le noeud XSD `typeSerieBoucles` est riche (plages de numéros, fournisseur,
|
||||
* statut, dates...). En Phase 1 on garde volontairement la structure brute
|
||||
* via `$rawNode` : les consommateurs qui ont besoin d'un champ précis y
|
||||
* accèdent par `$serie->rawNode->NomDuChamp`. Si un cas d'usage métier concret
|
||||
* remonte (rebouclage, commande de boucles), on parsera dans un DTO dédié.
|
||||
*/
|
||||
final readonly class EarTagSeriesDto
|
||||
{
|
||||
public function __construct(
|
||||
|
||||
@@ -54,6 +54,82 @@ final class InventoryMapperTest extends TestCase
|
||||
self::assertNull($inventory->startDate);
|
||||
}
|
||||
|
||||
public function testMapInventoryWithStockBouclesAbsentYieldsNullFlag(): void
|
||||
{
|
||||
$mapper = new InventoryMapper(new AnimalSummaryMapper(), new StandardResponseMapper());
|
||||
|
||||
$message = new stdClass();
|
||||
$message->InformationsMessage = new stdClass();
|
||||
$message->InformationsMessage->DateDebut = '2026-01-01';
|
||||
// StockBoucles deliberately omitted
|
||||
|
||||
$inventory = $mapper->map($this->makeSoapResponse(), $message);
|
||||
|
||||
self::assertNull($inventory->includesEarTagStock);
|
||||
}
|
||||
|
||||
public function testMapInventoryWithStockBouclesZeroYieldsFalseFlag(): void
|
||||
{
|
||||
$mapper = new InventoryMapper(new AnimalSummaryMapper(), new StandardResponseMapper());
|
||||
|
||||
$message = new stdClass();
|
||||
$message->InformationsMessage = new stdClass();
|
||||
$message->InformationsMessage->StockBoucles = '0';
|
||||
|
||||
$inventory = $mapper->map($this->makeSoapResponse(), $message);
|
||||
|
||||
self::assertFalse($inventory->includesEarTagStock);
|
||||
}
|
||||
|
||||
public function testMapInventoryWithDateFinAbsentYieldsNullEndDate(): void
|
||||
{
|
||||
$mapper = new InventoryMapper(new AnimalSummaryMapper(), new StandardResponseMapper());
|
||||
|
||||
$message = new stdClass();
|
||||
$message->InformationsMessage = new stdClass();
|
||||
$message->InformationsMessage->DateDebut = '2026-01-01';
|
||||
// DateFin deliberately omitted
|
||||
|
||||
$inventory = $mapper->map($this->makeSoapResponse(), $message);
|
||||
|
||||
self::assertNull($inventory->endDate);
|
||||
}
|
||||
|
||||
public function testMapInventoryWithSerieBouclesAsListPreservesAllEntries(): void
|
||||
{
|
||||
$mapper = new InventoryMapper(new AnimalSummaryMapper(), new StandardResponseMapper());
|
||||
|
||||
$serie1 = new stdClass();
|
||||
$serie1->NumeroSerieDebut = 'A0001';
|
||||
$serie2 = new stdClass();
|
||||
$serie2->NumeroSerieDebut = 'B0001';
|
||||
|
||||
$message = new stdClass();
|
||||
$message->Boucles = new stdClass();
|
||||
$message->Boucles->SerieBoucles = [$serie1, $serie2];
|
||||
|
||||
$inventory = $mapper->map($this->makeSoapResponse(), $message);
|
||||
|
||||
self::assertCount(2, $inventory->earTagSeries);
|
||||
self::assertSame('A0001', $inventory->earTagSeries[0]->rawNode->NumeroSerieDebut);
|
||||
self::assertSame('B0001', $inventory->earTagSeries[1]->rawNode->NumeroSerieDebut);
|
||||
}
|
||||
|
||||
public function testMapInventoryWithMissingNbBovinsDefaultsToZero(): void
|
||||
{
|
||||
$mapper = new InventoryMapper(new AnimalSummaryMapper(), new StandardResponseMapper());
|
||||
|
||||
$soapResponse = new stdClass();
|
||||
$soapResponse->ReponseStandard = new stdClass();
|
||||
$soapResponse->ReponseStandard->Resultat = true;
|
||||
$soapResponse->ReponseSpecifique = new stdClass();
|
||||
// NbBovins deliberately omitted
|
||||
|
||||
$inventory = $mapper->map($soapResponse, null);
|
||||
|
||||
self::assertSame(0, $inventory->nbBovins);
|
||||
}
|
||||
|
||||
private function makeSoapResponse(): object
|
||||
{
|
||||
$response = new stdClass();
|
||||
|
||||
Reference in New Issue
Block a user