--- /dev/null
+<?php
+
+namespace Unish;
+
+use Webmozart\PathUtil\Path;
+
+/**
+ * @group slow
+ * @group commands
+ */
+class RoleCase extends CommandUnishTestCase
+{
+ use TestModuleHelperTrait;
+
+ /**
+ * Create, edit, block, and cancel users.
+ */
+ public function testRole()
+ {
+ $this->setUpDrupal(1, true);
+
+ // In D8+, the testing profile has no perms.
+ // Copy the module to where Drupal expects it.
+ $this->setupModulesForTests(['user_form_test'], Path::join($this->webroot(), 'core/modules/user/tests/modules'));
+ $this->drush('pm-enable', ['user_form_test']);
+
+ $this->drush('role-list');
+ $output = $this->getOutput();
+ $this->assertNotContains('cancel other accounts', $output);
+
+ $this->drush('role-list', [], ['filter' => 'cancel other accounts']);
+ $output = $this->getOutput();
+ $this->assertNotContains('authenticated', $output);
+ $this->assertNotContains('anonymous', $output);
+
+ // Create the role foo.
+ $rid = 'foo';
+ $this->drush('role-create', [$rid]);
+ $this->drush('role-list');
+ $this->assertContains($rid, $this->getOutput());
+
+ // Assert that anon user starts without 'cancel other accounts' perm.
+ $perm = 'cancel other accounts';
+ $this->drush('role-list', [], ['format' => 'json']);
+ $role = $this->getOutputFromJSON($rid);
+ $this->assertFalse(in_array($perm, $role->perms));
+
+ // Now grant that perm to foo.
+ $this->drush('role-add-perm', [$rid, 'cancel other accounts']);
+ $this->drush('role-list', [], ['format' => 'json']);
+ $role = $this->getOutputFromJSON($rid);
+ $this->assertTrue(in_array($perm, $role->perms));
+
+ // Now remove the perm from foo.
+ $this->drush('role-remove-perm', [$rid, 'cancel other accounts']);
+ $this->drush('role-list', [], ['format' => 'json']);
+ $role = $this->getOutputFromJSON($rid);
+ $this->assertFalse(in_array($perm, $role->perms));
+
+ // Delete the foo role
+ $this->drush('role-delete', [$rid]);
+ $this->drush('role-list');
+ $this->assertNotContains($rid, $this->getOutput());
+ }
+}