function ConfigureAndExecuteTest::testConfigureAndExecute

Tests creation of a rule and then triggering its execution.

File

tests/src/Functional/ConfigureAndExecuteTest.php, line 110

Class

ConfigureAndExecuteTest
Tests that a rule can be configured and triggered when a node is edited.

Namespace

Drupal\Tests\rules\Functional

Code

public function testConfigureAndExecute() {
  // Set up a rule that will show a system message if the title of a node
  // matches "Test title".
  $this->createRule('Test rule', 'test_rule', 'rules_entity_presave:node');
  $this->clickLink('Add condition');
  $this->fillField('Condition', 'rules_data_comparison');
  $this->pressButton('Continue');
  $this->fillField('context_definitions[data][setting]', 'node.title.0.value');
  $this->fillField('context_definitions[value][setting]', 'Test title');
  $this->pressButton('Save');
  $this->clickLink('Add action');
  $this->fillField('Action', 'rules_system_message');
  $this->pressButton('Continue');
  $this->fillField('context_definitions[message][setting]', 'Title matched "Test title"!');
  $this->fillField('context_definitions[type][setting]', 'status');
  $this->pressButton('Save');
  // One more save to permanently store the rule.
  $this->pressButton('Save');
  /** @var \Drupal\Tests\WebAssert $assert */
  $assert = $this->assertSession();
  // Add a node now and check if our rule triggers.
  $this->drupalGet('node/add/article');
  $this->fillField('Title', 'Test title');
  $this->pressButton('Save');
  $assert->pageTextContains('Title matched "Test title"!');
  // Add a second node with the same title and check the rule triggers again.
  // This tests that the cache update (or non-update) works OK.
  // @see https://www.drupal.org/project/rules/issues/3108494
  $this->drupalGet('node/add/article');
  $this->fillField('Title', 'Test title');
  $this->pressButton('Save');
  $assert->pageTextContains('Title matched "Test title"!');
  // Disable rule and make sure it doesn't get triggered.
  $this->drupalGet('admin/config/workflow/rules');
  $this->clickLink('Disable');
  $this->drupalGet('node/add/article');
  $this->fillField('Title', 'Test title');
  $this->pressButton('Save');
  $assert->pageTextNotContains('Title matched "Test title"!');
  // Re-enable the rule and make sure it gets triggered again.
  $this->drupalGet('admin/config/workflow/rules');
  $this->clickLink('Enable');
  $this->drupalGet('node/add/article');
  $this->fillField('Title', 'Test title');
  $this->pressButton('Save');
  $assert->pageTextContains('Title matched "Test title"!');
  // Edit the rule and negate the condition.
  $this->drupalGet('admin/config/workflow/rules/reactions/edit/test_rule');
  $this->clickLink('Edit', 0);
  $this->getSession()
    ->getPage()
    ->checkField('negate');
  $this->pressButton('Save');
  // One more save to permanently store the rule.
  $this->pressButton('Save');
  // Create node with same title and check that the message is not shown.
  $this->drupalGet('node/add/article');
  $this->fillField('Title', 'Test title');
  $this->pressButton('Save');
  $assert->pageTextNotContains('Title matched "Test title"!');
}