61 lines
1.6 KiB
PHP
61 lines
1.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Architecture;
|
|
|
|
use PHPat\Selector\Selector;
|
|
use PHPat\Test\Builder\Rule;
|
|
use PHPat\Test\PHPat;
|
|
|
|
final class ArchitectureTest
|
|
{
|
|
private const ACTION_NAMESPACE = 'App\Action';
|
|
|
|
function test_action_classes_are_not_suffixed(): Rule
|
|
{
|
|
return PHPat::rule()
|
|
->classes(Selector::inNamespace(self::ACTION_NAMESPACE))
|
|
->shouldBeNamed(
|
|
fqcn: '/^(?!.*Action$).*$/',
|
|
regex: TRUE,
|
|
);
|
|
}
|
|
|
|
function test_action_classes_are_final(): Rule
|
|
{
|
|
return PHPat::rule()
|
|
->classes(Selector::inNamespace(self::ACTION_NAMESPACE))
|
|
->shouldBeFinal();
|
|
}
|
|
|
|
function test_action_classes_are_readonly(): Rule
|
|
{
|
|
return PHPat::rule()
|
|
->classes(Selector::inNamespace(self::ACTION_NAMESPACE))
|
|
->shouldBeReadonly();
|
|
}
|
|
|
|
function test_action_classes_are_invokeable(): Rule
|
|
{
|
|
return PHPat::rule()
|
|
->classes(Selector::inNamespace(self::ACTION_NAMESPACE))
|
|
->shouldHaveOnlyOnePublicMethodNamed('__invoke');
|
|
}
|
|
|
|
function test_action_classes_do_not_extend_other_classes(): Rule
|
|
{
|
|
return PHPat::rule()
|
|
->classes(Selector::inNamespace(self::ACTION_NAMESPACE))
|
|
->shouldNotExtend()
|
|
->classes(Selector::all());
|
|
}
|
|
|
|
function test_action_classes_do_not_implement_interfaces(): Rule
|
|
{
|
|
return PHPat::rule()
|
|
->classes(Selector::inNamespace(self::ACTION_NAMESPACE))
|
|
->shouldNotImplement()
|
|
->classes(Selector::all());
|
|
}
|
|
}
|