function CoreIntegrationTest::testComponentActionAutoSave
Tests that auto saving in a component executed as action works.
File
-
tests/
src/ Kernel/ CoreIntegrationTest.php, line 251
Class
- CoreIntegrationTest
- Test using Drupal core integration of Rules API.
Namespace
Drupal\Tests\rules\KernelCode
public function testComponentActionAutoSave() {
$entity_type_manager = $this->container
->get('entity_type.manager');
$entity_type_manager->getStorage('node_type')
->create([
'type' => 'page',
])
->save();
$nested_rule = $this->expressionManager
->createRule();
// Create a node entity with the action.
$nested_rule->addAction('rules_entity_create:node', ContextConfig::create()->setValue('type', 'page'));
// Set the title of the new node so that it is marked for auto-saving.
$nested_rule->addAction('rules_data_set', ContextConfig::create()->map('data', 'node_created.title')
->setValue('value', 'new title'));
$rules_config = new RulesComponentConfig([
'id' => 'test_rule',
'label' => 'Test rule',
], 'rules_component');
$rules_config->setExpression($nested_rule);
$rules_config->save();
// Invoke the rules component in another rule.
$rule = $this->expressionManager
->createRule();
$rule->addAction('rules_component:test_rule');
RulesComponent::create($rule)->execute();
$nodes = Node::loadMultiple();
$node = reset($nodes);
$this->assertEquals('new title', $node->getTitle());
$this->assertNotNull($node->id(), 'Node ID is set, which means that the node has been auto-saved.');
}