ldc-arcadia-api/tests/Unit/Infra/Adapters/Mappers/ArcadiaBrandMapperTest.php

64 lines
1.7 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Unit\Infra\Adapters\Mappers;
use Domain\Models\ValueObjects\Brand\ArcadiaBrand;
use Infra\Adapters\Mappers\ArcadiaBrandMapper;
use PHPUnit\Framework\TestCase;
covers(ArcadiaBrandMapper::class);
uses(TestCase::class);
describe('ArcadiaBrandMapper', function (): void {
it('maps an array row to ArcadiaBrand domain VO', function (): void {
$row = [
'COD_MARQ' => 1,
'LIB_MARQ' => 'LE GAULOIS',
];
$domain = ArcadiaBrandMapper::toDomain($row);
expect($domain)->toBeInstanceOf(ArcadiaBrand::class)
->and((string) $domain->id->value)->toBe('1')
->and($domain->name->value)->toBe('Le Gaulois');
});
it('maps an object row to ArcadiaBrand domain VO', function (): void {
$row = (object) [
'COD_MARQ' => 2,
'LIB_MARQ' => 'MAITRE COQ',
];
$domain = ArcadiaBrandMapper::toDomain($row);
expect($domain)->toBeInstanceOf(ArcadiaBrand::class)
->and((string) $domain->id->value)->toBe('2')
->and($domain->name->value)->toBe('Maitre Coq');
});
it('generates fallback name when libelle is empty', function (): void {
$row = [
'COD_MARQ' => 99,
'LIB_MARQ' => '',
];
$domain = ArcadiaBrandMapper::toDomain($row);
expect($domain->name->value)->toBe('Marque 99');
});
it('supports alternative lowercase or alias keys', function (): void {
$row = [
'code' => 3,
'libelle' => 'LOUE',
];
$domain = ArcadiaBrandMapper::toDomain($row);
expect((string) $domain->id->value)->toBe('3')
->and($domain->name->value)->toBe('Loue');
});
});