public function ProtectionRuleCrudTest::testCrudRoleProtectionRule in User protect 8
Tests if role based protection rules can be created through the UI.
File
- tests/
src/ Functional/ ProtectionRuleCrudTest.php, line 35
Class
- ProtectionRuleCrudTest
- Tests creating, editing and deleting protection rules through the UI.
Namespace
Drupal\Tests\userprotect\FunctionalCode
public function testCrudRoleProtectionRule() {
$rid = $this
->drupalCreateRole([]);
$rule_id = strtolower($this
->randomMachineName());
$label = $this
->randomMachineName();
// Create rule.
$edit = [
'label' => $label,
'name' => $rule_id,
'entity_id' => $rid,
'protection[user_mail]' => TRUE,
];
$this
->drupalPostForm('admin/config/people/userprotect/add', $edit, t('Save'));
// Assert that the rule was created.
$protection_rule = ProtectionRule::load($rule_id);
$this
->assertInstanceOf(ProtectionRuleInterface::class, $protection_rule, 'A protection rule was created through the UI.');
// Assert that the rule has the expected values.
$this
->assertEquals($rule_id, $protection_rule
->id());
$this
->assertEquals($label, $protection_rule->label);
$this
->assertEquals('user_role', $protection_rule
->getProtectedEntityTypeId());
$this
->assertEquals($rid, $protection_rule
->getProtectedEntityId());
$enabled_plugins = $protection_rule
->getProtections()
->getEnabledPlugins();
$this
->assertCount(1, $enabled_plugins, 'One plugin was enabled.');
$plugin = reset($enabled_plugins);
$this
->assertEquals('user_mail', $plugin
->getPluginId());
// Edit rule.
$edit = [
'protection[user_name]' => TRUE,
'protection[user_mail]' => FALSE,
];
$this
->drupalPostForm('admin/config/people/userprotect/manage/' . $rule_id, $edit, t('Save'));
// Assert that the rule was updated with the expected values.
$protection_rule = ProtectionRule::load($rule_id);
$this
->assertEquals($rule_id, $protection_rule
->id());
$this
->assertEquals($label, $protection_rule->label);
$this
->assertEquals('user_role', $protection_rule
->getProtectedEntityTypeId());
$this
->assertEquals($rid, $protection_rule
->getProtectedEntityId());
$enabled_plugins = $protection_rule
->getProtections()
->getEnabledPlugins();
$this
->assertCount(1, $enabled_plugins, 'One plugin was enabled.');
$plugin = reset($enabled_plugins);
$this
->assertEquals('user_name', $plugin
->getPluginId());
// Attempt to create a rule with the same name.
$edit = [
'label' => $label,
'name' => $rule_id,
'entity_id' => $rid,
'protection[user_mail]' => TRUE,
];
$this
->drupalPostForm('admin/config/people/userprotect/add', $edit, t('Save'));
$this
->assertSession()
->pageTextContains('The machine-readable name is already in use. It must be unique.');
// Assert only one protection rule exists.
$entities = ProtectionRule::loadMultiple(NULL);
$this
->assertCount(1, $entities, 'Only one protection rule exists.');
// Delete rule.
$this
->drupalPostForm('admin/config/people/userprotect/manage/' . $rule_id . '/delete', [], t('Delete'));
// Assert the rule no longer exists.
$protection_rule = ProtectionRule::load($rule_id);
$this
->assertEmpty($protection_rule, 'The protection rule was deleted.');
}