78 lines
2.1 KiB
PHP
78 lines
2.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Architecture;
|
|
|
|
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Support\ServiceProvider;
|
|
use Shared\DDD\Port\Directory;
|
|
use Shared\DDD\Port\Repository;
|
|
|
|
describe('Infra Architecture Rules', function (): void {
|
|
arch('Infra does not depend on App namespace')
|
|
->expect('Infra')
|
|
->not->toUse('App');
|
|
|
|
arch('Infra Eloquent Database Models extend Eloquent Model and are final')
|
|
->expect('Infra\Database\Models')
|
|
->toExtend(Model::class)
|
|
->classes()
|
|
->toBeFinal();
|
|
|
|
arch('Infra Service Providers extend ServiceProvider and are final')
|
|
->expect('Infra\Providers')
|
|
->toExtend(ServiceProvider::class)
|
|
->classes()
|
|
->toBeFinal();
|
|
|
|
arch('Infra Casts implement CastsAttributes and are final')
|
|
->expect('Infra\Casts')
|
|
->toImplement(CastsAttributes::class)
|
|
->classes()
|
|
->toBeFinal();
|
|
|
|
arch('Infra directory adapters implement Directory port and are final')
|
|
->expect('Infra\Adapters\Directories')
|
|
->toImplement(Directory::class)
|
|
->classes()
|
|
->toBeFinal();
|
|
|
|
arch('Infra repository adapters implement Repository port and are final')
|
|
->expect('Infra\Adapters\Repositories')
|
|
->toImplement(Repository::class)
|
|
->classes()
|
|
->toBeFinal();
|
|
|
|
arch('Infra Mappers are final and readonly')
|
|
->expect('Infra\Adapters\Mappers')
|
|
->classes()
|
|
->toBeReadonly()
|
|
->toBeFinal();
|
|
|
|
arch('Infra Parsers are final and readonly')
|
|
->expect('Infra\Adapters\Parsers')
|
|
->classes()
|
|
->toBeReadonly()
|
|
->toBeFinal();
|
|
|
|
arch('Infra Jobs are final')
|
|
->expect('Infra\Jobs')
|
|
->classes()
|
|
->toBeFinal();
|
|
|
|
arch('Infra Listeners are final')
|
|
->expect('Infra\Listeners')
|
|
->classes()
|
|
->toBeFinal();
|
|
|
|
arch('Infra Mailables are final')
|
|
->expect('Infra\Mail')
|
|
->classes()
|
|
->toBeFinal();
|
|
|
|
arch('Infra layer uses strict types')
|
|
->expect('Infra')
|
|
->toUseStrictTypes();
|
|
});
|