229 lines
9.6 KiB
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');
|
|
});
|
|
});
|