container = new DefaultContainer(); $this->container->instance(MethodInvoker::class, new MethodInvoker( $this->container, new SimpleReflectionService() )); $this->executor = new CallbackExecutor($this->container); } public function testExecuteHandler(): void { $metadata = CallbackMetadata::fromHandler(PermissionGuard::class, [['edit_post']]); $context = AttributeExecutionContext::forClass( $this->container, \App\Framework\Core\ValueObjects\ClassName::create('TestClass') ); $result = $this->executor->execute($metadata, $context); // PermissionGuard gibt true zurück (Placeholder-Implementierung) $this->assertIsBool($result); } public function testExecuteStaticMethod(): void { $metadata = CallbackMetadata::fromCallable([UserPolicies::class, 'isAdmin']); $context = AttributeExecutionContext::forClass( $this->container, \App\Framework\Core\ValueObjects\ClassName::create('TestClass') ); $result = $this->executor->execute($metadata, $context); // UserPolicies::isAdmin gibt bool zurück $this->assertIsBool($result); } public function testExecuteFactory(): void { $metadata = CallbackMetadata::fromFactory( Policies::class, 'requirePermission', ['edit_post'] ); $context = AttributeExecutionContext::forClass( $this->container, \App\Framework\Core\ValueObjects\ClassName::create('TestClass') ); $closure = $this->executor->execute($metadata, $context); $this->assertInstanceOf(\Closure::class, $closure); // Führe Closure aus $result = $closure($context); $this->assertIsBool($result); } public function testExecuteThrowsForClosure(): void { $metadata = new CallbackMetadata(CallbackType::CLOSURE, ''); $context = AttributeExecutionContext::forClass( $this->container, \App\Framework\Core\ValueObjects\ClassName::create('TestClass') ); $this->expectException(\RuntimeException::class); $this->expectExceptionMessage('Closure execution not supported via metadata'); $this->executor->execute($metadata, $context); } }