'NUGGETS DE POULET', 'NUMERO' => '96504', 'SOURCE' => '1', 'ID_INCO' => '47789', ]; $vo = IncoCompositionParser::toIdentification($row); expect($vo)->toBeInstanceOf(Identification::class) ->and($vo->name)->toBe('NUGGETS DE POULET') ->and($vo->number)->toBe('96504') ->and($vo->source)->toBe('1'); }); it('parses energy values for reference and portion', function (): void { $row = [ 'TAILLE_REF' => '100g', 'VAL_ENERG_KJ_R' => '890', 'VAL_ENERG_KCAL_R' => '212', 'TAILLE_PORT' => '150g', 'VAL_ENERG_KJ_P' => '1335', 'VAL_ENERG_KCAL_P' => '318', ]; $vo = IncoCompositionParser::toEnergy($row); expect($vo)->toBeInstanceOf(Energy::class) ->and($vo->reference->size)->toBe('100g') ->and($vo->reference->energyKj)->toBe('890') ->and($vo->reference->energyKcal)->toBe('212') ->and($vo->portion->size)->toBe('150g') ->and($vo->portion->energyKj)->toBe('1335') ->and($vo->portion->energyKcal)->toBe('318'); }); it('parses reference and portion macronutrients', function (): void { $row = [ 'MAT_GRASS_R' => '9.5', 'AGS_R' => '1.8', 'GLUCIDES_R' => '16.0', 'SUCRE_R' => '0.8', 'FIB_ALIM_R' => '1.5', 'PROTEINE_R' => '15.0', 'SEL_R' => '1.10', 'MAT_GRASS_P' => '14.25', 'AGS_P' => '2.7', 'GLUCIDES_P' => '24.0', 'SUCRE_P' => '1.2', 'FIB_ALIM_P' => '2.25', 'PROTEINE_P' => '22.5', 'SEL_P' => '1.65', ]; $refMacro = IncoCompositionParser::toReferenceMacronutrients($row); $portMacro = IncoCompositionParser::toPortionMacronutrients($row); expect($refMacro)->toBeInstanceOf(ReferenceMacronutrients::class) ->and($refMacro->fat->amount)->toBe('9.5') ->and($refMacro->protein->amount)->toBe('15.0') ->and($portMacro)->toBeInstanceOf(PortionMacronutrients::class) ->and($portMacro->fat->amount)->toBe('14.25') ->and($portMacro->protein->amount)->toBe('22.5'); }); it('parses fresh produce and nuts amounts', function (): void { $row = [ 'FRUITS_R' => '10', 'FRUITS_COQUE_SECH_R' => '5', 'FRUITS_P' => '15', 'FRUITS_COQUE_SECH_P' => '7.5', 'POURCENT_FNL_FRAIS' => '20', 'POURCENT_FRUITS' => '15', ]; $vo = IncoCompositionParser::toFreshProduceAndNuts($row); expect($vo)->toBeInstanceOf(FreshProduceAndNuts::class) ->and($vo->reference->fruits)->toBe('10') ->and($vo->reference->nuts)->toBe('5') ->and($vo->freshFnlPercentage->value)->toBe('20'); }); it('parses reference intakes and nutriscore points', function (): void { $row = [ 'POURCENT_APPORT_REF_E14_P' => '10', 'POURCENT_APPORT_REF_KJO_P' => '10', 'POURCENT_APPORT_REF_FAT_P' => '12', 'POURCENT_APPORT_REF_FATSAT_P' => '14', 'POURCENT_APPORT_REF_CHOVAL_P' => '6', 'POURCENT_APPORT_REF_SUGAR_P' => '1', 'POURCENT_APPORT_REF_PRO_P' => '30', 'POURCENT_APPORT_REF_SALTEQ_P' => '18', 'APPORT_PORT' => '150g', 'POINTS_ENERGIE' => '3', 'POINTS_AGS' => '2', 'POINTS_SUCRES' => '0', 'POINTS_SEL' => '1', 'POINTS_FIBRES' => '1', 'POINTS_PROTEINES' => '4', 'POINTS_FNL_FRAIS' => '0', 'COMPOSANTE_N' => '6', 'SCORE_NUTRI' => '1', 'CLASSEMENT' => 'B', ]; $intakes = IncoCompositionParser::toReferenceIntakes($row); $points = IncoCompositionParser::toNutriScorePoints($row); $score = IncoCompositionParser::toNutriScore($row); expect($intakes)->toBeInstanceOf(ReferenceIntakes::class) ->and($intakes->portionAmount)->toBe('150g') ->and($points)->toBeInstanceOf(NutriScorePoints::class) ->and($points->energyPoints)->toBe('3') ->and($score)->toBeInstanceOf(NutriScore::class) ->and($score->grade)->toBe('B'); }); it('normalizes legacy overflow percentages by dividing by 10', function (): void { $row = [ 'POURCENT_APPORT_REF_PRO_P' => '130', 'POURCENT_APPORT_REF_FAT_P' => '105', 'POURCENT_APPORT_REF_E14_P' => '10', 'POURCENT_APPORT_REF_KJO_P' => '10', 'POURCENT_APPORT_REF_FATSAT_P' => '14', 'POURCENT_APPORT_REF_CHOVAL_P' => '6', 'POURCENT_APPORT_REF_SUGAR_P' => '1', 'POURCENT_APPORT_REF_SALTEQ_P' => '18', 'APPORT_PORT' => '100g', ]; $intakes = IncoCompositionParser::toReferenceIntakes($row); expect($intakes->protein->value)->toBe('13') ->and($intakes->fat->value)->toBe('10.5'); }); it('parses minerals, vitamins, fatty acids, amino acids, and special compounds', function (): void { $row = [ 'NUT_CA' => '120', 'NUT_FE' => '2.5', 'NUT_VITA' => '80', 'NUT_VITC' => '15', 'NUT_STARCH' => '10', 'NUT_SUCS' => '0.5', 'NUT_CHOL' => '45', 'NUT_FOLEIQ' => '3.2', 'NUT_AAE' => '12', 'NUT_CHOLN' => '50', 'NUT_CARNITINE' => '10', 'NUT_TAU' => '20', 'NUT_NUCLEOTIDE' => '5', ]; expect(IncoCompositionParser::toMinerals($row))->toBeInstanceOf(Minerals::class) ->and(IncoCompositionParser::toVitamines($row))->toBeInstanceOf(Vitamins::class) ->and(IncoCompositionParser::toCarbohydratesDetail($row))->toBeInstanceOf(CarbohydratesDetail::class) ->and(IncoCompositionParser::toFattyAcids($row))->toBeInstanceOf(FattyAcids::class) ->and(IncoCompositionParser::toAminoAcids($row))->toBeInstanceOf(AminoAcids::class) ->and(IncoCompositionParser::toSpecialCompounds($row))->toBeInstanceOf(SpecialCompounds::class); }); });