+ ],
+ ]);
+
+ $resp->assertRedirect($editUrl);
+
+ $resp = $this->get($editUrl);
+ $resp->assertSee('This user is the only user assigned to the administrator role');
+ }
+
+ public function test_migrate_users_on_delete_works()
+ {
+ /** @var Role $roleA */
+ $roleA = Role::query()->create(['display_name' => 'Delete Test A']);
+ /** @var Role $roleB */
+ $roleB = Role::query()->create(['display_name' => 'Delete Test B']);
+ $this->user->attachRole($roleB);
+
+ $this->assertCount(0, $roleA->users()->get());
+ $this->assertCount(1, $roleB->users()->get());
+
+ $deletePage = $this->asAdmin()->get("/settings/roles/delete/$roleB->id");
+ $this->withHtml($deletePage)->assertElementExists('select[name=migrate_role_id]');
+ $this->asAdmin()->delete("/settings/roles/delete/$roleB->id", [
+ 'migrate_role_id' => $roleA->id,
+ ]);
+
+ $this->assertCount(1, $roleA->users()->get());
+ $this->assertEquals($this->user->id, $roleA->users()->first()->id);
+ }
+
+ public function test_delete_with_empty_migrate_option_works()
+ {
+ $role = $this->users->attachNewRole($this->user);
+
+ $this->assertCount(1, $role->users()->get());
+
+ $deletePage = $this->asAdmin()->get("/settings/roles/delete/$role->id");
+ $this->withHtml($deletePage)->assertElementExists('select[name=migrate_role_id]');
+ $resp = $this->asAdmin()->delete("/settings/roles/delete/$role->id", [
+ 'migrate_role_id' => '',
+ ]);
+
+ $resp->assertRedirect('/settings/roles');
+ $this->assertDatabaseMissing('roles', ['id' => $role->id]);
+ }
+
+ public function test_entity_permissions_are_removed_on_delete()
+ {
+ /** @var Role $roleA */
+ $roleA = Role::query()->create(['display_name' => 'Entity Permissions Delete Test']);
+ $page = $this->entities->page();
+
+ $this->permissions->setEntityPermissions($page, ['view'], [$roleA]);
+
+ $this->assertDatabaseHas('entity_permissions', [
+ 'role_id' => $roleA->id,
+ 'entity_id' => $page->id,
+ 'entity_type' => $page->getMorphClass(),
+ ]);
+
+ $this->asAdmin()->delete("/settings/roles/delete/$roleA->id");
+
+ $this->assertDatabaseMissing('entity_permissions', [
+ 'role_id' => $roleA->id,
+ 'entity_id' => $page->id,
+ 'entity_type' => $page->getMorphClass(),
+ ]);
+ }
+
+ public function test_image_view_notice_shown_on_role_form()
+ {
+ /** @var Role $role */
+ $role = Role::query()->first();
+ $this->asAdmin()->get("/settings/roles/{$role->id}")
+ ->assertSee('Actual access of uploaded image files will be dependant upon system image storage option');
+ }