ldc-arcadia-api/tests/Architecture/NamingConventionsTest.php

127 lines
4.3 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Architecture;
use Application\Security\Config\DevClientCredentials;
use Illuminate\Console\Command;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\ServiceProvider;
use Presentation\Api\V1\Contracts\ApiResponse;
use Shared\DDD\Port\Directory;
use Shared\DDD\Port\Repository;
use Shared\DDD\Usecase\Presenter;
describe('Naming Conventions in Domain', function (): void {
arch('Port Directory interfaces have Directory suffix')
->expect('Domain\Ports\Directories')
->toHaveSuffix('Directory');
arch('Port Repository interfaces have Repository suffix')
->expect('Domain\Ports\Repositories')
->toHaveSuffix('Repository');
arch('Domain Builders have Builder suffix')
->expect('Domain\Builders')
->toHaveSuffix('Builder');
arch('Domain Exceptions have Exception suffix')
->expect('Domain\Exceptions')
->toHaveSuffix('Exception');
});
describe('Naming Conventions in Application', function (): void {
arch('Application Port Directory interfaces have Directory suffix')
->expect('Application\Security\Ports\Directories')
->toHaveSuffix('Directory');
arch('Application Port Repository interfaces have Repository suffix')
->expect('Application\Security\Ports\Repositories')
->toHaveSuffix('Repository');
arch('Application Config classes have Config suffix')
->expect([
'Application\Arcadia\Config',
'Application\Health\Config',
'Application\Security\Config',
])
->classes()
->toHaveSuffix('Config')
->ignoring([
DevClientCredentials::class,
]);
arch('Application Exception classes have Exception suffix')
->expect([
'Application\Arcadia\Exceptions',
'Application\Health\Exceptions',
'Application\Security\Exceptions',
])
->toHaveSuffix('Exception');
});
describe('Naming Conventions in Presentation', function (): void {
arch('Controllers have Controller suffix')
->expect([
'Presentation\Api\V1\Http\Controllers',
'Presentation\Web\Http\Controllers',
])
->toHaveSuffix('Controller');
arch('Requests extending FormRequest must have Request suffix')
->expect('Presentation\Api\V1\Http\Requests')
->toExtend(FormRequest::class)
->toHaveSuffix('Request');
arch('Responses implementing ApiResponse must have Response suffix')
->expect('Presentation\Api\V1\Http\Responses')
->toImplement(ApiResponse::class)
->toHaveSuffix('Response');
arch('Console Commands extending Command must have Command suffix')
->expect('Presentation\Console\Commands')
->toExtend(Command::class)
->toHaveSuffix('Command');
arch('Classes implementing Presenter must have Presenter suffix')
->expect(Presenter::class)
->classes()
->toHaveSuffix('Presenter')
->ignoring(Presenter::class);
});
describe('Naming Conventions in Infra', function (): void {
arch('Infra classes extending ServiceProvider must have Provider suffix')
->expect('Infra\Providers')
->toExtend(ServiceProvider::class)
->toHaveSuffix('Provider');
arch('Infra directory adapters implementing Directory port must have Directory suffix')
->expect('Infra\Adapters\Directories')
->toImplement(Directory::class)
->toHaveSuffix('Directory');
arch('Infra repository adapters implementing Repository port must have Repository suffix')
->expect('Infra\Adapters\Repositories')
->toImplement(Repository::class)
->toHaveSuffix('Repository');
arch('Infra Mappers must have Mapper suffix')
->expect('Infra\Adapters\Mappers')
->toHaveSuffix('Mapper');
arch('Infra Parsers must have Parser suffix')
->expect('Infra\Adapters\Parsers')
->toHaveSuffix('Parser');
arch('Infra Casts implementing CastsAttributes must have Cast suffix')
->expect('Infra\Casts')
->toImplement(CastsAttributes::class)
->toHaveSuffix('Cast');
arch('Infra Jobs must have Job suffix')
->expect('Infra\Jobs')
->toHaveSuffix('Job');
});