Allow admins to create users with password and update user password

This commit is contained in:
Eugene Burmakin 2024-11-12 14:56:48 +01:00
parent bae84d19d9
commit 4048f4dac6
4 changed files with 40 additions and 9 deletions

View file

@ -25,13 +25,12 @@ class Settings::UsersController < ApplicationController
def create def create
@user = User.new( @user = User.new(
email: user_params[:email], email: user_params[:email],
password: 'password', password: user_params[:password],
password_confirmation: 'password' password_confirmation: user_params[:password]
) )
if @user.save if @user.save
redirect_to settings_users_url, redirect_to settings_users_url, notice: 'User was successfully created'
notice: "User was successfully created, email is #{@user.email}, password is \"password\"."
else else
redirect_to settings_users_url, notice: 'User could not be created.', status: :unprocessable_entity redirect_to settings_users_url, notice: 'User could not be created.', status: :unprocessable_entity
end end
@ -50,6 +49,6 @@ class Settings::UsersController < ApplicationController
private private
def user_params def user_params
params.require(:user).permit(:email) params.require(:user).permit(:email, :password)
end end
end end

View file

@ -13,6 +13,12 @@
<% end %> <% end %>
<%= f.email_field :email, value: @user.email, class: "input input-bordered" %> <%= f.email_field :email, value: @user.email, class: "input input-bordered" %>
</div> </div>
<div class="form-control">
<%= f.label :password do %>
Password
<% end %>
<%= f.password_field :password, autofocus: true, autocomplete: "new-password", class: "input input-bordered" %>
</div>
<div class="form-control mt-5"> <div class="form-control mt-5">
<%= f.submit "Update", class: "btn btn-primary" %> <%= f.submit "Update", class: "btn btn-primary" %>
</div> </div>

View file

@ -46,6 +46,12 @@
<% end %> <% end %>
<%= f.email_field :email, value: '', class: "input input-bordered" %> <%= f.email_field :email, value: '', class: "input input-bordered" %>
</div> </div>
<div class="form-control">
<%= f.label :password do %>
Password
<% end %>
<%= f.password_field :password, autofocus: true, autocomplete: "new-password", class: "input input-bordered" %>
</div>
<div class="form-control mt-5"> <div class="form-control mt-5">
<%= f.submit "Create", class: "btn btn-primary" %> <%= f.submit "Create", class: "btn btn-primary" %>
</div> </div>

View file

@ -3,7 +3,8 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe '/settings/users', type: :request do RSpec.describe '/settings/users', type: :request do
let(:valid_attributes) { { email: 'user@domain.com' } } let(:valid_attributes) { { email: 'user@domain.com', password: '4815162342' } }
let!(:admin) { create(:user, :admin) }
context 'when user is not authenticated' do context 'when user is not authenticated' do
it 'redirects to sign in page' do it 'redirects to sign in page' do
@ -25,8 +26,6 @@ RSpec.describe '/settings/users', type: :request do
end end
context 'when user is an admin' do context 'when user is an admin' do
let!(:admin) { create(:user, :admin) }
describe 'POST /create' do describe 'POST /create' do
before { sign_in admin } before { sign_in admin }
@ -35,13 +34,16 @@ RSpec.describe '/settings/users', type: :request do
expect do expect do
post settings_users_url, params: { user: valid_attributes } post settings_users_url, params: { user: valid_attributes }
end.to change(User, :count).by(1) end.to change(User, :count).by(1)
expect(User.last.email).to eq(valid_attributes[:email])
expect(User.last.valid_password?(valid_attributes[:password])).to be_truthy
end end
it 'redirects to the created settings_user' do it 'redirects to the created settings_user' do
post settings_users_url, params: { user: valid_attributes } post settings_users_url, params: { user: valid_attributes }
expect(response).to redirect_to(settings_users_url) expect(response).to redirect_to(settings_users_url)
expect(flash[:notice]).to eq("User was successfully created, email is #{valid_attributes[:email]}, password is \"password\".") expect(flash[:notice]).to eq('User was successfully created')
end end
end end
@ -61,6 +63,24 @@ RSpec.describe '/settings/users', type: :request do
end end
end end
end end
describe 'PATCH /update' do
let(:user) { create(:user) }
before { sign_in admin }
context 'with valid parameters' do
let(:new_attributes) { { email: FFaker::Internet.email, password: '4815162342' } }
it 'updates the requested user' do
patch settings_user_url(user), params: { user: new_attributes }
user.reload
expect(user.email).to eq(new_attributes[:email])
expect(user.valid_password?(new_attributes[:password])).to be_truthy
end
end
end
end end
end end
end end