function ConfigureAndExecuteTest::testAssignmentRestriction
Tests the implementation of assignment restriction in context form.
File
-
tests/
src/ Functional/ ConfigureAndExecuteTest.php, line 516
Class
- ConfigureAndExecuteTest
- Tests that a rule can be configured and triggered when a node is edited.
Namespace
Drupal\Tests\rules\FunctionalCode
public function testAssignmentRestriction() {
// Create a rule.
$rule = $this->expressionManager
->createRule();
// Add a condition which is restricted to selector for 'data', restricted to
// input for 'operation' but unrestricted on 'value'.
$condition1 = $this->expressionManager
->createCondition('rules_data_comparison');
$rule->addExpressionObject($condition1);
// Add an action which is unrestricted on 'message' and 'type' but is
// restricted to input for 'repeat'.
$action1 = $this->expressionManager
->createAction('rules_system_message');
$rule->addExpressionObject($action1);
// As the ContextFormTrait is action/condition agnostic it is not necessary
// to check an action restricted by selector because the condition covers
// this. Save the rule to config. No event needed.
$config_entity = $this->storage
->create([
'id' => 'test_rule',
'expression' => $rule->getConfiguration(),
]);
$config_entity->save();
/** @var \Drupal\Tests\WebAssert $assert */
$assert = $this->assertSession();
// Display the rule edit page to show the actions and conditions.
$this->drupalGet('admin/config/workflow/rules/reactions/edit/test_rule');
$assert->statusCodeEquals(200);
// Edit the condition and assert that the page loads correctly.
$this->drupalGet('admin/config/workflow/rules/reactions/edit/test_rule/edit/' . $condition1->getUuid());
$assert->statusCodeEquals(200);
// Check that a switch button is not shown for 'data' and that the field is
// an autocomplete selector field not plain text entry.
$assert->buttonNotExists('edit-context-definitions-data-switch-button');
$assert->elementExists('xpath', '//input[@id="edit-context-definitions-data-setting" and contains(@class, "rules-autocomplete")]');
// Check that a switch button is not shown for 'operation'.
$assert->buttonNotExists('edit-context-definitions-operation-switch-button');
// Check that a switch button is shown for 'value' and that the default
// field is plain text entry not an autocomplete selector field.
$assert->buttonExists('edit-context-definitions-value-switch-button');
$assert->elementExists('xpath', '//input[@id="edit-context-definitions-value-setting" and not(contains(@class, "rules-autocomplete"))]');
// Edit the action and assert that page loads correctly.
$this->drupalGet('admin/config/workflow/rules/reactions/edit/test_rule/edit/' . $action1->getUuid());
$assert->statusCodeEquals(200);
// Check that a switch button is shown for 'message' and that the field is a
// plain text entry field not an autocomplete selector field.
$assert->buttonExists('edit-context-definitions-message-switch-button');
$assert->elementExists('xpath', '//input[@id="edit-context-definitions-message-setting" and not(contains(@class, "rules-autocomplete"))]');
// Check that a switch button is shown for 'type'.
$assert->buttonExists('edit-context-definitions-type-switch-button');
// Check that a switch button is not shown for 'repeat'.
$assert->buttonNotExists('edit-context-definitions-repeat-switch-button');
}