122 lines
5.5 KiB
PHP
122 lines
5.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Unit\Application\Arcadia\Usecase\IncoCompositions;
|
|
|
|
use Application\Arcadia\Exceptions\IncoCompositionNotFoundException;
|
|
use Application\Arcadia\Usecase\IncoCompositions\Find\FindIncoComposition;
|
|
use Application\Arcadia\Usecase\IncoCompositions\Find\Input;
|
|
use Application\Arcadia\Usecase\IncoCompositions\Find\Output;
|
|
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 Infra\Adapters\Directories\InMemoryIncoCompositionDirectory;
|
|
|
|
covers(
|
|
FindIncoComposition::class,
|
|
Input::class,
|
|
Output::class,
|
|
);
|
|
|
|
describe('FindIncoComposition Usecase Unit Tests', function (): void {
|
|
$directory = new InMemoryIncoCompositionDirectory();
|
|
|
|
beforeEach(function () use ($directory): void {
|
|
$directory->clear();
|
|
});
|
|
|
|
function createComposition(string $compoIdStr, string $incoIdStr): IncoComposition
|
|
{
|
|
$compoId = new IncoCompositionId($compoIdStr);
|
|
$incoId = new IncoId($incoIdStr);
|
|
$identification = new Identification('Poulet Rôti 1kg Test', $incoIdStr, 'LDC');
|
|
|
|
$energyValues = new EnergyValues('100g', '0', '0');
|
|
$energy = new Energy($energyValues, $energyValues);
|
|
|
|
$nutrient = new NutrientValue('0');
|
|
$refMacro = new ReferenceMacronutrients($nutrient, $nutrient, $nutrient, $nutrient, $nutrient, $nutrient, $nutrient);
|
|
$porMacro = new PortionMacronutrients($nutrient, $nutrient, $nutrient, $nutrient, $nutrient, $nutrient, $nutrient);
|
|
|
|
$fnAmount = new FruitAndNutAmount();
|
|
$pct = new PercentageValue('0');
|
|
$fresh = new FreshProduceAndNuts($fnAmount, $fnAmount, $pct, $pct);
|
|
|
|
$refIntakes = new ReferenceIntakes($pct, $pct, $pct, $pct, $pct, $pct, $pct, $pct, '100g');
|
|
$nutriScore = new NutriScore('0', '0', 'A');
|
|
$nutriScorePoints = new NutriScorePoints('0', '0', '0', '0', '0', '0', '0');
|
|
|
|
$minerals = new Minerals('0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0');
|
|
$vitamins = new Vitamins('0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0');
|
|
$carbs = new CarbohydratesDetail('0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0');
|
|
$fatty = new FattyAcids('0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0');
|
|
$amino = new AminoAcids('0', '0', '0');
|
|
$special = new SpecialCompounds('0', '0', '0', '0');
|
|
|
|
return IncoComposition::hydrate(
|
|
id: $compoId,
|
|
idInco: $incoId,
|
|
identification: $identification,
|
|
energy: $energy,
|
|
referenceMacronutrients: $refMacro,
|
|
portionMacronutrients: $porMacro,
|
|
freshProduceAndNuts: $fresh,
|
|
referenceIntakes: $refIntakes,
|
|
nutriScore: $nutriScore,
|
|
nutriScorePoints: $nutriScorePoints,
|
|
minerals: $minerals,
|
|
vitamins: $vitamins,
|
|
carbohydratesDetail: $carbs,
|
|
fattyAcids: $fatty,
|
|
aminoAcids: $amino,
|
|
specialCompounds: $special,
|
|
);
|
|
}
|
|
|
|
it('executes successfully and returns Output when composition exists', function () use ($directory): void {
|
|
// GIVEN
|
|
$incoId = new IncoId('12345');
|
|
$composition = createComposition('67890', '12345');
|
|
$directory->add($composition);
|
|
|
|
$usecase = new FindIncoComposition($directory);
|
|
$input = new Input($incoId);
|
|
|
|
// WHEN
|
|
$output = $usecase->execute($input);
|
|
|
|
// THEN
|
|
expect($output)->toBeInstanceOf(Output::class)
|
|
->and($output->id->value)->toBe('67890')
|
|
->and($output->idInco->value)->toBe('12345');
|
|
});
|
|
|
|
it('throws NotFoundException when composition does not exist', function () use ($directory): void {
|
|
// GIVEN
|
|
$incoId = new IncoId('99999');
|
|
$usecase = new FindIncoComposition($directory);
|
|
$input = new Input($incoId);
|
|
|
|
// WHEN & THEN
|
|
expect(fn () => $usecase->execute($input))->toThrow(IncoCompositionNotFoundException::class);
|
|
});
|
|
});
|