ldc-mesbr-app/tests/Architecture/ApplicationTest.php

56 lines
1.7 KiB
PHP
Raw Normal View History

2026-07-24 17:19:56 +02:00
<?php
declare(strict_types=1);
use Shared\DDD\UseCases\Input;
use Shared\DDD\UseCases\Output;
use Shared\DDD\UseCases\UseCase;
2026-07-24 17:19:56 +02:00
describe('application layer architecture rules', function (): void {
arch('use cases implement UseCase and are final')
->expect('Application\\UseCases')
->classes()
->implementing(UseCase::class)
->toBeFinal();
2026-07-24 17:19:56 +02:00
arch('use cases implement UseCase and are readonly')
->expect('Application\\UseCases')
->classes()
->implementing(UseCase::class)
->toBeReadonly();
2026-07-24 17:19:56 +02:00
arch('use case inputs implement Input interface and are final')
->expect('Application\\UseCases')
->classes()
->implementing(Input::class)
->toBeFinal();
2026-07-24 17:19:56 +02:00
arch('use case inputs implement Input interface and are readonly')
->expect('Application\\UseCases')
2026-07-24 17:19:56 +02:00
->classes()
->implementing(Input::class)
2026-07-24 17:19:56 +02:00
->toBeReadonly();
arch('use case outputs implement Output interface and are final')
->expect('Application\\UseCases')
->classes()
->implementing(Output::class)
->toBeFinal();
arch('use case outputs implement Output interface and are readonly')
->expect('Application\\UseCases')
->classes()
->implementing(Output::class)
->toBeReadonly();
arch('application exceptions extend Exception and are final')
->expect('Application')
->classes()
->extending(\Exception::class)
->toBeFinal();
arch('application layer does not use Infrastructure or framework internals')
->expect('Application')
->not->toUse(['Infrastructure', 'Illuminate', 'Symfony']);
2026-07-24 17:19:56 +02:00
});