38 lines
1.2 KiB
PHP
38 lines
1.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Unit\Domain\Models\ValueObjects\Inco;
|
|
|
|
use Domain\Models\ValueObjects\Inco\Additive;
|
|
|
|
covers(Additive::class);
|
|
|
|
describe('Additive Value Object Instantiation', function (): void {
|
|
it('can be instantiated with valid E-number code and label', function (): void {
|
|
// GIVEN
|
|
$code = 'E300';
|
|
$label = 'Acide ascorbique';
|
|
|
|
// WHEN
|
|
$additive = new Additive($code, $label);
|
|
|
|
// THEN
|
|
expect($additive->code)->toBe('E300')
|
|
->and($additive->label)->toBe('Acide ascorbique');
|
|
});
|
|
});
|
|
|
|
describe('Additive Value Object Domain Rules', function (): void {
|
|
it('throws DomainException for invalid code format', function (): void {
|
|
// GIVEN, WHEN & THEN
|
|
expect(fn () => new Additive('300', 'Acide ascorbique'))
|
|
->toThrow(\DomainException::class, "Invalid additive code '300'");
|
|
});
|
|
|
|
it('throws DomainException for empty label', function (): void {
|
|
// GIVEN, WHEN & THEN
|
|
expect(fn () => new Additive('E300', ' '))
|
|
->toThrow(\DomainException::class, "Invalid label for additive 'E300': must not be empty");
|
|
});
|
|
});
|