*/
protected function setUserRoles(User $user, array $roles)
{
+ $roles = array_filter(array_values($roles));
+
if ($this->demotingLastAdmin($user, $roles)) {
throw new UserUpdateException(trans('errors.role_cannot_remove_only_admin'), $user->getEditUrl());
}
$resp->assertSessionHasErrors(['language' => 'The language may not be greater than 15 characters.']);
$resp->assertSessionHasErrors(['language' => 'The language may only contain letters, numbers, dashes and underscores.']);
}
+
+ public function test_role_removal_on_user_edit_removes_all_role_assignments()
+ {
+ $user = $this->getEditor();
+
+ $this->assertEquals(1, $user->roles()->count());
+
+ // A roles[0] hidden fields is used to indicate the existence of role selection in the submission
+ // of the user edit form. We check that field is used and emulate its submission.
+ $resp = $this->asAdmin()->get("/settings/users/{$user->id}");
+ $this->withHtml($resp)->assertElementExists('input[type="hidden"][name="roles[0]"][value="0"]');
+
+ $resp = $this->asAdmin()->put("/settings/users/{$user->id}", [
+ 'name' => $user->name,
+ 'email' => $user->email,
+ 'roles' => ['0' => '0'],
+ ]);
+ $resp->assertRedirect("/settings/users");
+
+ $this->assertEquals(0, $user->roles()->count());
+ }
+
+ public function test_role_form_hidden_indicator_field_does_not_exist_where_roles_cannot_be_managed()
+ {
+ $user = $this->getEditor();
+ $resp = $this->actingAs($user)->get("/settings/users/{$user->id}");
+ $html = $this->withHtml($resp);
+ $html->assertElementExists('input[name="email"]');
+ $html->assertElementNotExists('input[type="hidden"][name="roles[0]"]');
+ }
}