EventPropertyAccessTest.php
Namespace
Drupal\Tests\rules\Kernel
File
-
tests/src/Kernel/EventPropertyAccessTest.php
View source
<?php
namespace Drupal\Tests\rules\Kernel;
use Drupal\rules\Context\ContextConfig;
use Drupal\rules_test_event\Event\PlainEvent;
use Drupal\rules_test_event\Event\GenericEvent;
use Drupal\rules_test_event\Event\GetterEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class EventPropertyAccessTest extends RulesKernelTestBase {
protected $storage;
protected static $modules = [
'rules_test_event',
];
protected function setUp() : void {
parent::setUp();
$this->storage = $this->container
->get('entity_type.manager')
->getStorage('rules_reaction_rule');
}
public function testEventProperties($event_name, object $event) : void {
$rule = $this->expressionManager
->createRule();
$rule->addCondition('rules_test_true');
$rule->addAction('rules_test_debug_log', ContextConfig::create()->map('message', 'publicProperty'));
$rule->addAction('rules_test_debug_log', ContextConfig::create()->map('message', 'protectedProperty'));
$rule->addAction('rules_test_debug_log', ContextConfig::create()->map('message', 'privateProperty'));
$config_entity = $this->storage
->create([
'id' => 'test_event_rule',
'events' => [
[
'event_name' => $event_name,
],
],
'expression' => $rule->getConfiguration(),
]);
$config_entity->save();
$this->logger = $this->container
->get('logger.channel.rules_debug');
$this->logger
->addLogger($this->debugLog);
$dispatcher = $this->container
->get('event_dispatcher');
$listeners = $dispatcher->getListeners(KernelEvents::REQUEST);
foreach ($listeners as $listener) {
if (empty($listener[1]) || $listener[1] != 'onRulesEvent') {
$dispatcher->removeListener(KernelEvents::REQUEST, $listener);
}
}
$dispatcher->dispatch($event, $event_name);
$this->assertRulesDebugLogEntryExists('public property', 0);
$this->assertRulesDebugLogEntryExists('protected property', 1);
$this->assertRulesDebugLogEntryExists('private property', 2);
}
public function provideTestEvent() : array {
return [
'Plain event' => [
'rules_test_event.plain_event',
new PlainEvent(),
],
'Generic event' => [
'rules_test_event.generic_event',
new GenericEvent('Test subject', [
'publicProperty' => 'public property',
'protectedProperty' => 'protected property',
'privateProperty' => 'private property',
]),
],
'Getter event' => [
'rules_test_event.getter_event',
new GetterEvent(),
],
];
}
}
Classes