ldc-arcadia-genesis-php-client/tests/Unit/Mapper/IncoCompoMapperTest.php

229 lines
9.6 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Unit\Mapper;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\IncoCompo;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\IncoCompo\AcideGras;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\IncoCompo\AcidesAmines;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\IncoCompo\ApportsReference;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\IncoCompo\ComposesSpeciaux;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\IncoCompo\Energie;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\IncoCompo\FruitLegumeNoix;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\IncoCompo\GlucidesDetail;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\IncoCompo\Identification;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\IncoCompo\MacronutrimentsPortion;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\IncoCompo\MacronutrimentsRef;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\IncoCompo\Mineraux;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\IncoCompo\NutriScore;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\IncoCompo\PointsNutriScore;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\IncoCompo\Vitamines;
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\IncoCompoId;
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\IncoId;
use Uwil\ArcadiaApiPhpClient\Mapper\IncoCompoMapper;
use Uwil\ArcadiaKiotaOpenApiClient\Models\EnergyValues;
use Uwil\ArcadiaKiotaOpenApiClient\Models\IncoCompo as KiotaIncoCompo;
use Uwil\ArcadiaKiotaOpenApiClient\Models\IncoCompoAminoAcids;
use Uwil\ArcadiaKiotaOpenApiClient\Models\IncoCompoEnergy;
use Uwil\ArcadiaKiotaOpenApiClient\Models\IncoCompoMinerals;
use Uwil\ArcadiaKiotaOpenApiClient\Models\IncoCompoNutriScore;
use Uwil\ArcadiaKiotaOpenApiClient\Models\IncoCompoNutriScorePoints;
use Uwil\ArcadiaKiotaOpenApiClient\Models\IncoCompositionIdentification;
use Uwil\ArcadiaKiotaOpenApiClient\Models\IncoCompoSpecialCompounds;
use Uwil\ArcadiaKiotaOpenApiClient\Models\IncoCompoVitamins;
describe('IncoCompoMapper test', function () {
it('can instanciate IncoCompoMapper', function () {
// GIVEN / WHEN
$mapper = new IncoCompoMapper();
// THEN
expect($mapper)->toBeInstanceOf(IncoCompoMapper::class);
});
it('can map full kiota model to an inco compo dto', function () {
// GIVEN
$kiotaModel = new KiotaIncoCompo();
$kiotaModel->setIncoCompoId('10');
$kiotaModel->setIncoId('20');
$ident = new IncoCompositionIdentification();
$ident->setName('Composition Poulet');
$ident->setNumber('COMP-001');
$ident->setSource('Laboratoire LDC');
$kiotaModel->setIdentification($ident);
$energy = new IncoCompoEnergy();
$ref = new EnergyValues();
$ref->setSize('100g');
$ref->setEnergyKj('650');
$ref->setEnergyKcal('155');
$energy->setReference($ref);
$portion = new EnergyValues();
$portion->setSize('150g');
$portion->setEnergyKj('975');
$portion->setEnergyKcal('232.5');
$energy->setPortion($portion);
$kiotaModel->setEnergy($energy);
$ns = new IncoCompoNutriScore();
$ns->setNegativeComponent('5');
$ns->setPositiveComponent('2');
$ns->setScore('3');
$ns->setGrade('B');
$kiotaModel->setNutriScore($ns);
$nsp = new IncoCompoNutriScorePoints();
$nsp->setEnergyPoints('1');
$nsp->setSaturatedFatPoints('1');
$nsp->setSugarsPoints('0');
$nsp->setSaltPoints('1');
$nsp->setFiberPoints('0');
$nsp->setProteinPoints('4');
$nsp->setFreshFnlPoints('0');
$kiotaModel->setNutriScorePoints($nsp);
$minerals = new IncoCompoMinerals();
$minerals->setCalcium('12');
$minerals->setIron('1.5');
$kiotaModel->setMinerals($minerals);
$vitamins = new IncoCompoVitamins();
$vitamins->setVitaminA('20');
$vitamins->setVitaminC('5');
$kiotaModel->setVitamins($vitamins);
$aa = new IncoCompoAminoAcids();
$aa->setEssentialAminoAcids('15');
$aa->setCaseins('0');
$aa->setWheyProtein('0');
$kiotaModel->setAminoAcids($aa);
$sc = new IncoCompoSpecialCompounds();
$sc->setCholine('30');
$sc->setCarnitine('10');
$sc->setTaurine('5');
$sc->setNucleotides('2');
$kiotaModel->setSpecialCompounds($sc);
// WHEN
$dto = (new IncoCompoMapper())->toDto($kiotaModel);
// THEN
expect($dto)->toBeInstanceOf(IncoCompo::class);
expect($dto->id)->toBeInstanceOf(IncoCompoId::class);
expect($dto->id->value)->toBe('10');
expect($dto->idInco)->toBeInstanceOf(IncoId::class);
expect($dto->idInco->value)->toBe('20');
// Identification
expect($dto->identification)->toBeInstanceOf(Identification::class);
expect($dto->identification->nom)->toBe('Composition Poulet');
expect($dto->identification->numero)->toBe('COMP-001');
expect($dto->identification->source)->toBe('Laboratoire LDC');
// Energie
expect($dto->energie)->toBeInstanceOf(Energie::class);
expect($dto->energie->tailleReference)->toBe('100g');
expect($dto->energie->valEnergKjReference)->toBe('650');
expect($dto->energie->valEnergKcalReference)->toBe('155');
expect($dto->energie->taillePortion)->toBe('150g');
expect($dto->energie->valEnergKjPortion)->toBe('975');
expect($dto->energie->valEnergKcalPortion)->toBe('232.5');
// NutriScore
expect($dto->nutriScore)->toBeInstanceOf(NutriScore::class);
expect($dto->nutriScore->composanteN)->toBe('5');
expect($dto->nutriScore->composanteP)->toBe('2');
expect($dto->nutriScore->scoreNutri)->toBe('3');
expect($dto->nutriScore->classement)->toBe('B');
// PointsNutriScore
expect($dto->pointsNutriScore)->toBeInstanceOf(PointsNutriScore::class);
expect($dto->pointsNutriScore->pointsEnergie)->toBe('1');
expect($dto->pointsNutriScore->pointsAcideGrasSature)->toBe('1');
expect($dto->pointsNutriScore->pointsProteines)->toBe('4');
// Mineraux & Vitamines
expect($dto->mineraux)->toBeInstanceOf(Mineraux::class);
expect($dto->mineraux->nutCa)->toBe('12');
expect($dto->mineraux->nutFe)->toBe('1.5');
expect($dto->vitamines)->toBeInstanceOf(Vitamines::class);
expect($dto->vitamines->nutVita)->toBe('20');
expect($dto->vitamines->nutVitc)->toBe('5');
// AcidesAmines & ComposesSpeciaux
expect($dto->acidesAmines)->toBeInstanceOf(AcidesAmines::class);
expect($dto->acidesAmines->nutAae)->toBe('15');
expect($dto->composesSpeciaux)->toBeInstanceOf(ComposesSpeciaux::class);
expect($dto->composesSpeciaux->nutCholn)->toBe('30');
// Sub-DTOs instantiated
expect($dto->macronutrimentsRef)->toBeInstanceOf(MacronutrimentsRef::class);
expect($dto->macronutrimentsPortion)->toBeInstanceOf(MacronutrimentsPortion::class);
expect($dto->fnl)->toBeInstanceOf(FruitLegumeNoix::class);
expect($dto->apportsReference)->toBeInstanceOf(ApportsReference::class);
expect($dto->glucidesDetail)->toBeInstanceOf(GlucidesDetail::class);
expect($dto->acideGras)->toBeInstanceOf(AcideGras::class);
});
it('can map minimal kiota model to an inco compo dto with default values', function () {
// GIVEN
$kiotaModel = new KiotaIncoCompo();
// WHEN
$dto = (new IncoCompoMapper())->toDto($kiotaModel);
// THEN
expect($dto)->toBeInstanceOf(IncoCompo::class);
expect($dto->id->value)->toBe('0');
expect($dto->idInco->value)->toBe('0');
expect($dto->identification->nom)->toBe('');
expect($dto->identification->numero)->toBe('');
expect($dto->identification->source)->toBe('');
expect($dto->energie->tailleReference)->toBe('');
expect($dto->energie->valEnergKjReference)->toBe('');
expect($dto->nutriScore->scoreNutri)->toBe('');
expect($dto->pointsNutriScore->pointsEnergie)->toBe('');
expect($dto->mineraux->nutCa)->toBe('');
expect($dto->vitamines->nutVita)->toBe('');
expect($dto->acidesAmines->nutAae)->toBe('');
expect($dto->composesSpeciaux->nutCholn)->toBe('');
});
it('verifies humanReadableValues and units on mapped compo parts', function () {
// GIVEN
$kiotaModel = new KiotaIncoCompo();
$energy = new IncoCompoEnergy();
$ref = new EnergyValues();
$ref->setSize('100');
$ref->setEnergyKj('650');
$ref->setEnergyKcal('155');
$energy->setReference($ref);
$kiotaModel->setEnergy($energy);
// WHEN
$dto = (new IncoCompoMapper())->toDto($kiotaModel);
// THEN
$humanValues = $dto->energie->humanReadableValues();
expect($humanValues)->toBeArray();
expect($humanValues)->toHaveKey('Taille de référence');
expect($humanValues['Taille de référence'])->toBe('100');
expect($humanValues)->toHaveKey('Énergie (kJ) / 100g');
expect($humanValues['Énergie (kJ) / 100g'])->toBe('650');
expect($humanValues)->toHaveKey('Énergie (kcal) / 100g');
expect($humanValues['Énergie (kcal) / 100g'])->toBe('155');
$units = Energie::units();
expect($units)->toBeArray();
expect($units['valEnergKjReference'])->toBe('kJ');
expect($units['valEnergKcalReference'])->toBe('kcal');
$humanUnits = Energie::humanReadableUnits();
expect($humanUnits['Énergie (kJ) / 100g'])->toBe('kJ');
expect($humanUnits['Énergie (kcal) / 100g'])->toBe('kcal');
});
});