Some checks failed
Deploy Application / deploy (push) Has been cancelled
111 lines
3.7 KiB
PHP
111 lines
3.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Framework\Attributes\Execution;
|
|
|
|
use App\Framework\Attributes\Execution\AttributeExecutionContext;
|
|
use App\Framework\Attributes\Execution\AttributeRunner;
|
|
use App\Framework\Attributes\Execution\CallbackExecutor;
|
|
use App\Framework\Attributes\Guard;
|
|
use App\Framework\Core\ValueObjects\ClassName;
|
|
use App\Framework\Core\ValueObjects\MethodName;
|
|
use App\Framework\DI\Container;
|
|
use App\Framework\DI\DefaultContainer;
|
|
use App\Framework\DI\MethodInvoker;
|
|
use App\Framework\Discovery\Results\AttributeRegistry;
|
|
use App\Framework\Discovery\Results\DiscoveryRegistry;
|
|
use App\Framework\Discovery\ValueObjects\AttributeTarget;
|
|
use App\Framework\Discovery\ValueObjects\DiscoveredAttribute;
|
|
use App\Framework\Reflection\SimpleReflectionService;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
final class AttributeRunnerTest extends TestCase
|
|
{
|
|
private Container $container;
|
|
private DiscoveryRegistry $discoveryRegistry;
|
|
private AttributeRunner $runner;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$this->container = new DefaultContainer();
|
|
$this->container->instance(MethodInvoker::class, new MethodInvoker(
|
|
$this->container,
|
|
new SimpleReflectionService()
|
|
));
|
|
|
|
$this->discoveryRegistry = new DiscoveryRegistry(
|
|
attributes: new AttributeRegistry()
|
|
);
|
|
|
|
$callbackExecutor = new CallbackExecutor($this->container);
|
|
$this->runner = new AttributeRunner(
|
|
discoveryRegistry: $this->discoveryRegistry,
|
|
container: $this->container,
|
|
callbackExecutor: $callbackExecutor
|
|
);
|
|
}
|
|
|
|
public function testExecuteAttributesReturnsEmptyArrayWhenNoAttributes(): void
|
|
{
|
|
$results = $this->runner->executeAttributes(Guard::class);
|
|
|
|
$this->assertIsArray($results);
|
|
$this->assertEmpty($results);
|
|
}
|
|
|
|
public function testExecuteAttributeReturnsNullForNonExecutable(): void
|
|
{
|
|
$discovered = new DiscoveredAttribute(
|
|
className: ClassName::create('TestClass'),
|
|
attributeClass: 'NonExecutableAttribute',
|
|
target: AttributeTarget::TARGET_CLASS
|
|
);
|
|
|
|
$result = $this->runner->executeAttribute($discovered);
|
|
|
|
$this->assertNull($result);
|
|
}
|
|
|
|
public function testExecuteForClass(): void
|
|
{
|
|
$className = ClassName::create('TestClass');
|
|
|
|
// Füge ein Guard-Attribut hinzu
|
|
$discovered = new DiscoveredAttribute(
|
|
className: $className,
|
|
attributeClass: Guard::class,
|
|
target: AttributeTarget::TARGET_CLASS,
|
|
arguments: [\App\Framework\Attributes\Execution\Handlers\PermissionGuard::class, [['edit_post']]]
|
|
);
|
|
|
|
$this->discoveryRegistry->attributes->add(Guard::class, $discovered);
|
|
|
|
$results = $this->runner->executeForClass($className, Guard::class);
|
|
|
|
$this->assertIsArray($results);
|
|
}
|
|
|
|
public function testExecuteForMethod(): void
|
|
{
|
|
$className = ClassName::create('TestClass');
|
|
$methodName = MethodName::create('testMethod');
|
|
|
|
// Füge ein Guard-Attribut hinzu
|
|
$discovered = new DiscoveredAttribute(
|
|
className: $className,
|
|
attributeClass: Guard::class,
|
|
target: AttributeTarget::METHOD,
|
|
methodName: $methodName,
|
|
arguments: [\App\Framework\Attributes\Execution\Handlers\PermissionGuard::class, [['edit_post']]]
|
|
);
|
|
|
|
$this->discoveryRegistry->attributes->add(Guard::class, $discovered);
|
|
|
|
$results = $this->runner->executeForMethod($className, $methodName, Guard::class);
|
|
|
|
$this->assertIsArray($results);
|
|
}
|
|
}
|
|
|