ldc-arcadia-api/tests/Architecture/InfraTest.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();
});