function RulesUiTestCase::testOverrideStatus
Tests overriding and reverting configurations.
Verify that when we overwrite a default rule with an import, the status of that rule is overridden.
See also
https://www.drupal.org/project/rules/issues/2027717#comment-12904190
File
-
rules_admin/
tests/ rules_admin.test, line 259
Class
- RulesUiTestCase
- Tests for creating rules through the UI.
Code
public function testOverrideStatus() {
// Create a simple user account with permission to create a rule.
$user = $this->drupalCreateUser(array(
'access administration pages',
'administer rules',
'bypass rules access',
));
$this->drupalLogin($user);
// The rules_test module defines the rule 'rules_test_default_1' in code.
// Ensure this rule has status equals ENTITY_IN_CODE.
$rule = rules_config_load('rules_test_default_1');
$this->assertTrue($rule->hasStatus(ENTITY_IN_CODE), 'Rule defined in hook_default_rules_configuration() has status ENTITY_IN_CODE.');
// Verify the code-provided rule appears in the UI.
$this->drupalGet('admin/config/workflow/rules');
$this->assertText('example default rule', 'Example default rule is defined in code.');
$this->assertText('rules_test_default_1', 'Machine name shows up in UI.');
// Now we need to overwrite the 'rules_test_default_1' rule in the
// database by importing a rule with the same id and forcing the overwrite.
// First check that importing fails if the 'overwrite' box is not checked.
$this->drupalGet('admin/config/workflow/rules/reaction/import');
$edit = array(
'import' => $this->getTestRuleExport('rules_test_default_1'),
'overwrite' => FALSE,
);
$this->drupalPost(NULL, $edit, 'Import');
$this->assertText('Import of Rules configuration example imported default rule failed, a Rules configuration with the same machine name already exists. Check the overwrite option to replace it.', 'Rule overwrite failed.');
// Now set the 'overwrite' checkbox to force the overwrite and resubmit.
$edit = array(
'import' => $this->getTestRuleExport('rules_test_default_1'),
'overwrite' => TRUE,
);
$this->drupalPost(NULL, $edit, 'Import');
// Verify that the overwritten rule now has a status of ENTITY_OVERRIDDEN.
$this->assertText('example imported default rule', 'New example default rule has been imported.');
$this->assertText('rules_test_default_1', 'Machine name shows up in UI.');
$this->assertText('Overridden', 'Example default rule has overridden status.');
// Clear cache and ensure the rule is still overridden.
cache_clear_all();
// Visit reaction rules listing page to force refresh.
$this->clickLink('Rules');
$this->assertText('example imported default rule', 'Rule label unchanged after cache clear.');
$this->assertText('Overridden', 'Rule overridden status unchanged after cache clear.');
// A 'revert' link should now be available for the overridden rule.
$this->assertText('revert', 'Revert link is now present.');
// Revert the overridden rule and verify it's back to its original status.
$this->clickLink('revert');
$this->drupalPost(NULL, array(), 'Confirm');
$this->assertText('example default rule', 'Example default rule original label restored.');
$this->assertText('Reverted reaction rule example imported default rule to the defaults', 'Example default rule was reverted.');
$this->assertNoText('revert', 'Revert link is not present.');
}