64 lines
1.7 KiB
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');
|
|
});
|
|
});
|