ldc-mesbr-app/tests/Architecture/DomainTest.php
2026-09-15 18:12:03 +02:00

47 lines
1.3 KiB
PHP

<?php
declare(strict_types=1);
use Shared\DDD\Models\Entity;
use Shared\DDD\Ports\Repository;
describe('domain coding rules', function (): void {
arch('entities implements Entity')
->expect('Domain\\Models\\Entities')
->toImplement(Entity::class);
arch('entities are immutable (disabled due to mock-final-classes conflict)')
->expect('Domain\\Models\\Entities')
->toBeReadonly()
->toBeFinal();
arch('valueObjects are immutable (disabled due to mock-final-classes conflict)')
->expect('Domain\\Models\\ValueObjects')
->toBeReadonly()
->toBeFinal();
arch('ports contains only interfaces')
->expect('Domain\\Ports')
->classes()
->toBeInterface();
arch('port Repositories extend Shared\DDD\Repository')
->expect('Domain\\Ports\\Repositories')
->toExtend(Repository::class);
arch('no Application classes are used in Domain')
->expect('Domain')
->not->toUse('Application');
arch('no Infrastructure classes are used in Domain')
->expect('Domain')
->not->toUse('Infrastructure');
arch('no Illuminate classes are used in Domain')
->expect('Domain')
->not->toUse('Illuminate');
arch('no Symfony components are used in Domain')
->expect('Domain')
->not->toUse('Symfony');
});