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'); }); });