ldc-arcadia-api/tests/Unit/Domain/Entities/IncoCompositionEntityTest.php

230 lines
7.5 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Unit\Domain\Entities;
use Domain\Models\Entities\Inco\Composition\IncoComposition;
use Domain\Models\ValueObjects\Inco\Composition\AminoAcids;
use Domain\Models\ValueObjects\Inco\Composition\CarbohydratesDetail;
use Domain\Models\ValueObjects\Inco\Composition\Energy;
use Domain\Models\ValueObjects\Inco\Composition\EnergyValues;
use Domain\Models\ValueObjects\Inco\Composition\FattyAcids;
use Domain\Models\ValueObjects\Inco\Composition\FreshProduceAndNuts;
use Domain\Models\ValueObjects\Inco\Composition\FruitAndNutAmount;
use Domain\Models\ValueObjects\Inco\Composition\Identification;
use Domain\Models\ValueObjects\Inco\Composition\IncoCompositionId;
use Domain\Models\ValueObjects\Inco\Composition\Minerals;
use Domain\Models\ValueObjects\Inco\Composition\NutrientValue;
use Domain\Models\ValueObjects\Inco\Composition\NutriScore;
use Domain\Models\ValueObjects\Inco\Composition\NutriScorePoints;
use Domain\Models\ValueObjects\Inco\Composition\PercentageValue;
use Domain\Models\ValueObjects\Inco\Composition\PortionMacronutrients;
use Domain\Models\ValueObjects\Inco\Composition\ReferenceIntakes;
use Domain\Models\ValueObjects\Inco\Composition\ReferenceMacronutrients;
use Domain\Models\ValueObjects\Inco\Composition\SpecialCompounds;
use Domain\Models\ValueObjects\Inco\Composition\Vitamins;
use Domain\Models\ValueObjects\Inco\IncoId;
use Shared\DDD\Model\Entity;
covers(IncoComposition::class);
describe('IncoComposition Domain Entity Unit Tests', function (): void {
it('instantiates IncoCompo entity and returns correct id', function (): void {
// GIVEN
$id = new IncoCompositionId('67890');
$idInco = new IncoId('12345');
$identification = new Identification('Poulet Rôti', '12345', 'LDC');
$zeroNutrient = new NutrientValue('0');
$zeroPercent = new PercentageValue('0');
$energyValues = new EnergyValues('100g', '750', '180');
$energy = new Energy($energyValues, $energyValues);
$refMacronutrients = new ReferenceMacronutrients(
fat: $zeroNutrient,
saturatedFat: $zeroNutrient,
carbohydrates: $zeroNutrient,
sugars: $zeroNutrient,
fiber: $zeroNutrient,
protein: $zeroNutrient,
salt: $zeroNutrient,
);
$portionMacronutrients = new PortionMacronutrients(
fat: $zeroNutrient,
saturatedFat: $zeroNutrient,
carbohydrates: $zeroNutrient,
sugars: $zeroNutrient,
fiber: $zeroNutrient,
protein: $zeroNutrient,
salt: $zeroNutrient,
);
$fruitNutAmount = new FruitAndNutAmount();
$freshProduce = new FreshProduceAndNuts(
reference: $fruitNutAmount,
portion: $fruitNutAmount,
freshFnlPercentage: $zeroPercent,
fruitsPercentage: $zeroPercent,
);
$referenceIntakes = new ReferenceIntakes(
energyE14: $zeroPercent,
energyKj: $zeroPercent,
fat: $zeroPercent,
saturatedFat: $zeroPercent,
carbohydrates: $zeroPercent,
sugars: $zeroPercent,
protein: $zeroPercent,
salt: $zeroPercent,
portionAmount: '100g',
);
$nutriScorePoints = new NutriScorePoints('0', '0', '0', '0', '0', '0', '0');
$minerals = new Minerals(
calcium: '0',
magnesium: '0',
potassium: '0',
phosphorus: '0',
chloride: '0',
iron: '0',
zinc: '0',
copper: '0',
manganese: '0',
selenium: '0',
iodine: '0',
chromium: '0',
molybdenum: '0',
sulfur: '0',
nitrates: '0',
);
$vitamins = new Vitamins(
vitaminA: '0',
vitaminB6: '0',
vitaminB12: '0',
vitaminC: '0',
vitaminD: '0',
vitaminE: '0',
vitaminK: '0',
cholecalciferol: '0',
niacin: '0',
riboflavin: '0',
thiamine: '0',
pantothenicAcid: '0',
biotin: '0',
folates: '0',
);
$carbohydratesDetail = new CarbohydratesDetail(
starch: '0',
maltodextrin: '0',
sucrose: '0',
glucose: '0',
lactose: '0',
maltose: '0',
galactose: '0',
carbohydrateHydrates: '0',
boundFructose: '0',
freeFructose: '0',
oligosaccharides: '0',
polyols: '0',
solubleFiber: '0',
inositol: '0',
);
$fattyAcids = new FattyAcids(
fd: '0',
cholesterol: '0',
transFat: '0',
formic: '0',
acetic: '0',
propionic: '0',
butyric: '0',
valeric: '0',
caproic: '0',
enanthic: '0',
caprylic: '0',
pelargonic: '0',
capric: '0',
undecylic: '0',
lauric: '0',
tridecylic: '0',
myristic: '0',
pentadecylic: '0',
f16d0: '0',
margaric: '0',
stearic: '0',
arachidic: '0',
heneicosylic: '0',
behenic: '0',
tricosylic: '0',
lignoceric: '0',
carboceric: '0',
cerotic: '0',
ceroplastic: '0',
montanic: '0',
nonacosylic: '0',
melissic: '0',
laceric: '0',
hentriacontylic: '0',
hextriacontylic: '0',
heptatriacontylic: '0',
octatriacontylic: '0',
nonadylie: '0',
psyllic: '0',
palmitic: '0',
oleic: '0',
f18d: '0',
f19d: '0',
f11eico: '0',
geddic: '0',
erucic: '0',
nervonic: '0',
hyenic: '0',
amscis: '0',
f18d2cn6: '0',
f18d3n3: '0',
f20d4: '0',
f20d5n3: '0',
f22d6n3: '0',
fapun3: '0',
fapun6: '0',
fapun9: '0',
fapucis: '0',
fapulc: '0',
);
$aminoAcids = new AminoAcids('0', '0', '0');
$specialCompounds = new SpecialCompounds('0', '0', '0', '0');
// WHEN
$compo = IncoComposition::hydrate(
id: $id,
idInco: $idInco,
identification: $identification,
energy: $energy,
referenceMacronutrients: $refMacronutrients,
portionMacronutrients: $portionMacronutrients,
freshProduceAndNuts: $freshProduce,
referenceIntakes: $referenceIntakes,
nutriScore: new NutriScore('0', grade: 'D'),
nutriScorePoints: $nutriScorePoints,
minerals: $minerals,
vitamins: $vitamins,
carbohydratesDetail: $carbohydratesDetail,
fattyAcids: $fattyAcids,
aminoAcids: $aminoAcids,
specialCompounds: $specialCompounds,
);
// THEN
expect($compo)->toBeInstanceOf(Entity::class)
->and($compo->id())->toBe($id)
->and($compo->idInco)->toBe($idInco)
->and($compo->identification->name)->toBe('Poulet Rôti')
->and($compo->nutriScore->grade)->toBe('D');
});
});