View source
<?php
namespace Drupal\Tests\rules\Kernel;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\rules\Context\ContextConfig;
use Drupal\rules\Event\EntityEvent;
class ConfigurableEventHandlerTest extends RulesKernelTestBase {
protected static $modules = [
'rules',
'system',
'node',
'field',
'user',
];
protected $storage;
protected $node;
protected function setUp() : void {
parent::setUp();
$this
->installSchema('system', [
'sequences',
]);
$this
->installEntitySchema('user');
$this
->installEntitySchema('node');
$this
->installConfig([
'field',
]);
$this->storage = $this->container
->get('entity_type.manager')
->getStorage('rules_reaction_rule');
$entity_type_manager = $this->container
->get('entity_type.manager');
$entity_type_manager
->getStorage('node_type')
->create([
'type' => 'page',
])
->save();
FieldStorageConfig::create([
'field_name' => 'field_integer',
'type' => 'integer',
'entity_type' => 'node',
'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
])
->save();
FieldConfig::create([
'field_name' => 'field_integer',
'entity_type' => 'node',
'bundle' => 'page',
])
->save();
$this->node = $entity_type_manager
->getStorage('node')
->create([
'title' => 'test',
'type' => 'page',
]);
}
public function testConfigurableEventHandler() {
$rule1 = $this->expressionManager
->createRule();
$rule1
->addAction('rules_test_debug_log', ContextConfig::create()
->map('message', 'node.field_integer.0.value'));
$config_entity1 = $this->storage
->create([
'id' => 'test_rule1',
]);
$config_entity1
->set('events', [
[
'event_name' => 'rules_entity_presave:node--page',
],
]);
$config_entity1
->set('expression', $rule1
->getConfiguration());
$config_entity1
->save();
$rule2 = $this->expressionManager
->createRule();
$rule2
->addAction('rules_test_debug_log', ContextConfig::create()
->map('message', 'node.field_integer.1.value'));
$config_entity2 = $this->storage
->create([
'id' => 'test_rule2',
]);
$config_entity2
->set('events', [
[
'event_name' => 'rules_entity_presave:node',
],
]);
$config_entity2
->set('expression', $rule2
->getConfiguration());
$config_entity2
->save();
$this->logger = $this->container
->get('logger.channel.rules_debug');
$this->logger
->addLogger($this->debugLog);
$this->node->field_integer
->setValue([
'0' => 11,
'1' => 22,
]);
$entity_type_id = $this->node
->getEntityTypeId();
$event = new EntityEvent($this->node, [
$entity_type_id => $this->node,
$entity_type_id . '_unchanged' => $this->node,
]);
$event_dispatcher = $this->container
->get('event_dispatcher');
$event_dispatcher
->dispatch("rules_entity_presave:{$entity_type_id}", $event);
$this
->assertRulesDebugLogEntryExists(11, 1);
$this
->assertRulesDebugLogEntryExists(22, 0);
}
}