Namespace
Drupal\Tests\rules\Functional
File
-
tests/src/Functional/UiPageTest.php
View source
<?php
namespace Drupal\Tests\rules\Functional;
use Drupal\node\Entity\NodeType;
class UiPageTest extends RulesBrowserTestBase {
protected static $modules = [
'rules',
'rules_test',
];
protected $profile = 'minimal';
protected $storage;
protected $adminUser;
protected function setUp() : void {
parent::setUp();
$this->storage = $this->container
->get('entity_type.manager')
->getStorage('rules_reaction_rule');
$this->adminUser = $this->drupalCreateUser([
'administer rules',
]);
}
public function testReactionRulePage() {
$account = $this->drupalCreateUser([
'administer rules',
]);
$this->drupalLogin($account);
$this->drupalGet('admin/config/workflow/rules');
$assert = $this->assertSession();
$assert->statusCodeEquals(200);
$assert->pageTextContains('There are no enabled reaction rules.');
}
public function testCreateReactionRule() {
$this->drupalLogin($this->adminUser);
$this->drupalGet('admin/config/workflow/rules');
$this->clickLink('Add reaction rule');
$this->fillField('Label', 'Test rule');
$this->fillField('Machine-readable name', 'test_rule');
$this->fillField('Description', 'This is a test description for a test reaction rule.');
$this->fillField('React on event', 'rules_entity_insert:node');
$this->pressButton('Save');
$assert = $this->assertSession();
$assert->statusCodeEquals(200);
$assert->pageTextContains('Reaction rule Test rule has been created.');
$this->clickLink('Add condition');
$this->fillField('Condition', 'rules_node_is_promoted');
$this->pressButton('Continue');
$this->fillField('context_definitions[node][setting]', 'node');
$this->pressButton('Save');
$assert->statusCodeEquals(200);
$assert->pageTextContains('You have unsaved changes.');
$this->pressButton('Save');
$assert->pageTextContains('Reaction rule Test rule has been updated. ');
}
public function testRuleStatusOperations() {
$this->testCreateReactionRule();
$this->drupalGet('admin/config/workflow/rules');
$assert = $this->assertSession();
$this->clickLink('Disable');
$assert->pageTextContains('The reaction rule Test rule has been disabled.');
$this->clickLink('Enable');
$assert->pageTextContains('The reaction rule Test rule has been enabled.');
}
public function testAddEvent() {
$this->testCreateReactionRule();
$this->clickLink('Add event');
$assert = $this->assertSession();
$assert->pageTextContains('Add event to Test rule');
$assert->pageTextContains('Event selection');
$assert->pageTextContains('React on event');
$this->findField('events[0][event_name]')
->selectOption('rules_entity_update:node');
$this->pressButton('Add');
$this->pressButton('Add');
$assert->pageTextContains('Added event After updating a content item entity to Test rule.');
$expected = [
'rules_entity_insert:node',
'rules_entity_update:node',
];
$rule = $this->storage
->load('test_rule');
$this->assertSame($expected, $rule->getEventNames());
}
public function testAddEventWithRestrictByType() {
$node_type = NodeType::create([
'type' => 'article',
'name' => 'Article',
]);
$node_type->save();
$this->testCreateReactionRule();
$this->clickLink('Add event');
$assert = $this->assertSession();
$assert->pageTextContains('Add event to Test rule');
$assert->pageTextContains('Event selection');
$assert->pageTextContains('React on event');
$this->findField('events[0][event_name]')
->selectOption('rules_entity_update:node');
$this->pressButton('Add');
$this->findField('bundle')
->selectOption('article');
$this->pressButton('Add');
$assert->pageTextContains('Added event After updating a content item entity of type Article to Test rule.');
$expected = [
'rules_entity_insert:node',
'rules_entity_update:node--article',
];
$rule = $this->storage
->load('test_rule');
$this->assertSame($expected, $rule->getEventNames());
}
public function testDeleteEvent() {
$rule = $this->storage
->create([
'id' => 'test_rule',
'label' => 'Test rule',
'events' => [
[
'event_name' => 'rules_entity_insert:node',
],
[
'event_name' => 'rules_entity_update:node',
],
],
]);
$rule->save();
$assert = $this->assertSession();
$this->drupalLogin($this->adminUser);
$this->drupalGet('admin/config/workflow/rules/reactions/edit/test_rule');
$this->clickLinkByHref('event-delete/rules_entity_update');
$assert->pageTextContains('Are you sure you want to delete the event After updating a content item entity from Test rule?');
$this->pressButton('Delete');
$assert->pageTextContains('Deleted event After updating a content item entity from Test rule.');
$this->resetAll();
$this->storage = $this->container
->get('entity_type.manager')
->getStorage('rules_reaction_rule');
$rule = $this->storage
->loadUnchanged('test_rule');
$this->assertSame([
'rules_entity_insert:node',
], $rule->getEventNames());
}
public function testNoDeleteEventWhenRulesHasSingleEvent() {
$rule = $this->storage
->create([
'id' => 'test_rule',
'label' => 'Test rule',
'events' => [
[
'event_name' => 'rules_entity_insert:node',
],
],
]);
$rule->save();
$this->drupalLogin($this->adminUser);
$this->drupalGet('admin/config/workflow/rules/reactions/edit/test_rule');
$this->assertNull($this->getSession()
->getPage()
->find('xpath', './/a[contains(@href, "event-delete/rules_entity_insert")]'));
$this->drupalGet('admin/config/workflow/rules/reactions/edit/test_rule/event-delete/rules_entity_insert:node');
$assert = $this->assertSession();
$assert->statusCodeEquals(403);
}
public function testCancelExpressionInRule() {
$this->testCreateReactionRule();
$this->clickLink('Add condition');
$this->fillField('Condition', 'rules_node_is_promoted');
$this->pressButton('Continue');
$this->fillField('context_definitions[node][setting]', 'node');
$this->pressButton('Save');
$assert = $this->assertSession();
$assert->pageTextContains('You have unsaved changes.');
$this->pressButton('Cancel');
$assert->pageTextContains('Canceled.');
$this->assertEquals(1, preg_match('#/admin/config/workflow/rules$#', $this->getSession()
->getCurrentUrl()));
}
public function testDeleteExpressionInRule() {
$this->testCreateReactionRule();
$assert = $this->assertSession();
$this->clickLink('Delete');
$assert->pageTextContains('Are you sure you want to delete Node is promoted from Test rule?');
$this->pressButton('Delete');
$assert->pageTextContains('You have unsaved changes.');
$this->pressButton('Save');
$assert->pageTextContains('Reaction rule Test rule has been updated. ');
}
public function testNoContextCondition() {
$this->testCreateReactionRule();
$this->clickLink('Add condition');
$this->fillField('Condition', 'rules_test_true');
$this->pressButton('Continue');
$this->pressButton('Save');
}
public function testNegatedCondition() {
$this->testCreateReactionRule();
$assert = $this->assertSession();
$assert->pageTextContains('Node is promoted');
$this->clickLink('Edit');
$this->fillField('Negate', 1);
$this->pressButton('Save');
$assert->pageTextContains('NOT Node is promoted');
}
public function testMultipleContextAction() {
$this->drupalLogin($this->adminUser);
$this->drupalGet('admin/config/workflow/rules');
$this->clickLink('Add reaction rule');
$this->fillField('Label', 'Test rule');
$this->fillField('Machine-readable name', 'test_rule');
$this->fillField('React on event', 'rules_entity_insert:node');
$this->pressButton('Save');
$this->clickLink('Add action');
$this->fillField('Action', 'rules_send_email');
$this->pressButton('Continue');
$this->pressButton('Switch to data selection');
$this->pressButton('Switch to the direct input mode');
$this->fillField('context_definitions[to][setting]', 'klausi@example.com');
$this->fillField('context_definitions[subject][setting]', 'subject');
$this->fillField('context_definitions[message][setting]', 'message');
$this->pressButton('Save');
$assert = $this->assertSession();
$assert->statusCodeEquals(200);
}
}
Classes
| Title |
Deprecated |
Summary |
| UiPageTest |
|
Tests that the Reaction Rules list builder pages work. |