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(); });