Files
many-notes/tests/Unit/ArchTest.php
2025-01-27 19:51:06 +00:00

81 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
use Illuminate\Database\Eloquent\Factories\Factory;
arch()->preset()->php();
arch()->preset()->laravel();
arch()->preset()->security();
arch('controllers')
->expect('App\Http\Controllers')
->not->toBeUsed();
arch('avoid mutation')
->expect('App')
->classes()
->toBeReadonly()
->ignoring([
'App\Exceptions',
'App\Jobs',
'App\Livewire',
'App\Models',
'App\Providers',
'App\Services',
]);
arch('avoid inheritance')
->expect('App')
->classes()
->toExtendNothing()
->ignoring([
'App\Exceptions',
'App\Jobs',
'App\Livewire',
'App\Models',
'App\Providers',
'App\Services',
]);
arch('avoid open for extension')
->expect('App')
->classes()
->toBeFinal()
->ignoring([
'App\Livewire',
]);
arch('avoid abstraction')
->expect('App')
->not->toBeAbstract();
arch('factories')
->expect('Database\Factories')
->toExtend(Factory::class)
->toHaveMethod('definition')
->toOnlyBeUsedIn([
'App\Models',
]);
arch('models')
->expect('App\Models')
->toHaveMethod('casts')
->toOnlyBeUsedIn([
'App\Actions',
'App\Http',
'App\Jobs',
'App\Livewire',
'App\Models',
'App\Observers',
'App\Policies',
'App\Providers',
'App\Services',
'Database\Factories',
'Database\Seeders',
]);
arch('actions')
->expect('App\Actions')
->toHaveMethod('handle');