Merge pull request #4684 from betagouv/feat/admin-edit-email

Modification d'un email d'un utilisateur dans le manager
This commit is contained in:
Keirua 2020-01-28 16:23:01 +01:00 committed by GitHub
commit f2179979fe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 3 deletions

View file

@ -1,5 +1,18 @@
module Manager module Manager
class UsersController < Manager::ApplicationController class UsersController < Manager::ApplicationController
def update
user = User.find(params[:id])
new_email = params[:user][:email]
user.skip_reconfirmation!
user.update(email: new_email)
if (user.valid?)
flash[:notice] = "L'email a été modifié en « #{new_email} » sans notification ni validation par email."
else
flash[:error] = "« #{new_email} » n'est pas une adresse valide."
end
redirect_to edit_manager_user_path(user)
end
def resend_confirmation_instructions def resend_confirmation_instructions
user = User.find(params[:id]) user = User.find(params[:id])
user.resend_confirmation_instructions user.resend_confirmation_instructions

View file

@ -41,7 +41,9 @@ class UserDashboard < Administrate::BaseDashboard
# FORM_ATTRIBUTES # FORM_ATTRIBUTES
# an array of attributes that will be displayed # an array of attributes that will be displayed
# on the model's form (`new` and `edit`) pages. # on the model's form (`new` and `edit`) pages.
FORM_ATTRIBUTES = [].freeze FORM_ATTRIBUTES = [
:email
].freeze
# Overwrite this method to customize how users are displayed # Overwrite this method to customize how users are displayed
# across all pages of the admin dashboard. # across all pages of the admin dashboard.

View file

@ -24,9 +24,11 @@ as well as a link to its edit page.
<%= content_for(:title) %> <%= content_for(:title) %>
</h1> </h1>
<div>
<%= button_to "modifier", edit_manager_user_path(page.resource), method: :get, class: "button" %>
</div>
<div> <div>
<%= button_to "supprimer", delete_manager_user_path(page.resource), method: :delete, disabled: !page.resource.can_be_deleted?, class: "button", data: { confirm: "Confirmez-vous la suppression de l'utilisateur ?" }, title: page.resource.can_be_deleted? ? "Supprimer" : "Cet utilisateur a des dossiers dont l'instruction a commencé et ne peut être supprimé" %> <%= button_to "supprimer", delete_manager_user_path(page.resource), method: :delete, disabled: !page.resource.can_be_deleted?, class: "button", data: { confirm: "Confirmez-vous la suppression de l'utilisateur ?" }, title: page.resource.can_be_deleted? ? "Supprimer" : "Cet utilisateur a des dossiers dont l'instruction a commencé et ne peut être supprimé" %>
</div> </div>
<div> <div>
<% if !user.confirmed? %> <% if !user.confirmed? %>

View file

@ -24,7 +24,7 @@ Rails.application.routes.draw do
delete 'delete', on: :member delete 'delete', on: :member
end end
resources :users, only: [:index, :show] do resources :users, only: [:index, :show, :edit, :update] do
delete 'delete', on: :member delete 'delete', on: :member
post 'resend_confirmation_instructions', on: :member post 'resend_confirmation_instructions', on: :member
put 'enable_feature', on: :member put 'enable_feature', on: :member

View file

@ -1,6 +1,36 @@
describe Manager::UsersController, type: :controller do describe Manager::UsersController, type: :controller do
let(:administration) { create(:administration) } let(:administration) { create(:administration) }
describe '#update' do
let!(:user) { create(:user, email: 'ancien.email@domaine.fr') }
before {
sign_in administration
}
subject { patch :update, params: { id: user.id, user: { email: nouvel_email } } }
describe 'with a valid email' do
let(:nouvel_email) { 'nouvel.email@domaine.fr' }
it 'updates the user email' do
subject
expect(User.find_by(id: user.id).email).to eq(nouvel_email)
end
end
describe 'with an invalid email' do
let(:nouvel_email) { 'plop' }
it 'does not update the user email' do
subject
expect(User.find_by(id: user.id).email).not_to eq(nouvel_email)
expect(flash[:error]).to match("« #{nouvel_email} » n'est pas une adresse valide.")
end
end
end
describe '#delete' do describe '#delete' do
let!(:user) { create(:user) } let!(:user) { create(:user) }