implement user creation by admin
This commit is contained in:
parent
f057900fb1
commit
93404d543f
5 changed files with 93 additions and 21 deletions
|
|
@ -6,6 +6,17 @@ module Admin
|
||||||
@user = User.new
|
@user = User.new
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
@user = User.new(user_params)
|
||||||
|
@user.skip_confirmation!
|
||||||
|
if @user.save
|
||||||
|
redirect_to admin_users_path, notice: 'User successfully created.'
|
||||||
|
else
|
||||||
|
flash.now[:error] = "Creating User failed: #{@user.errors.full_messages.join('. ')}."
|
||||||
|
render :new
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@users = User.all
|
@users = User.all
|
||||||
end
|
end
|
||||||
|
|
@ -50,8 +61,9 @@ module Admin
|
||||||
private
|
private
|
||||||
|
|
||||||
def user_params
|
def user_params
|
||||||
params.require(:user).permit(:email, :name, :email_public, :biography, :nickname, :affiliation, :is_admin, :username, :login, :is_disabled,
|
params.require(:user).permit(:email, :name, :email_public, :biography, :nickname, :affiliation, :is_admin,
|
||||||
:tshirt, :mobile, :volunteer_experience, :languages, :to_confirm, role_ids: [])
|
:username, :login, :is_disabled, :tshirt, :mobile, :volunteer_experience,
|
||||||
|
:languages, :to_confirm, :password, role_ids: [])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,9 @@ class Ability
|
||||||
# for admins
|
# for admins
|
||||||
can :manage, :all if user.is_admin
|
can :manage, :all if user.is_admin
|
||||||
|
|
||||||
|
# even admin cannot create new users with ICHAIN enabled
|
||||||
|
cannot [:new, :create], User if ENV['OSEM_ICHAIN_ENABLED'] == 'true'
|
||||||
|
|
||||||
cannot :revert_object, PaperTrail::Version do |version|
|
cannot :revert_object, PaperTrail::Version do |version|
|
||||||
(version.event == 'create' && %w(Conference User Event).include?(version.item_type))
|
(version.event == 'create' && %w(Conference User Event).include?(version.item_type))
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
= semantic_form_for [:admin, @user] do |f|
|
= semantic_form_for [:admin, @user] do |f|
|
||||||
= f.inputs 'Basic Information' do
|
= f.inputs 'Basic Information' do
|
||||||
|
- unless @user.new_record?
|
||||||
.pull-right
|
.pull-right
|
||||||
%b
|
%b
|
||||||
Confirmed?
|
Confirmed?
|
||||||
|
|
@ -19,7 +20,9 @@
|
||||||
data: { size: 'small', on_color: 'success', off_color: 'warning', on_text: 'Yes', off_text: 'No' }
|
data: { size: 'small', on_color: 'success', off_color: 'warning', on_text: 'Yes', off_text: 'No' }
|
||||||
= f.input :is_admin, hint: 'An admin can create a new conference, manage users and make other users admins.'
|
= f.input :is_admin, hint: 'An admin can create a new conference, manage users and make other users admins.'
|
||||||
= f.input :name, as: :string
|
= f.input :name, as: :string
|
||||||
|
= f.input :username, :as => :string if @user.new_record?
|
||||||
= f.input :email
|
= f.input :email
|
||||||
|
= f.input :password if @user.new_record?
|
||||||
= f.input :affiliation, as: :string
|
= f.input :affiliation, as: :string
|
||||||
= f.input :biography, input_html: { rows: 10, data: { provide: 'markdown-editable' } },
|
= f.input :biography, input_html: { rows: 10, data: { provide: 'markdown-editable' } },
|
||||||
hint: markdown_hint
|
hint: markdown_hint
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
.row
|
.row
|
||||||
.col-md-12
|
.col-md-12
|
||||||
.page-header
|
.page-header
|
||||||
%h2
|
%h1
|
||||||
Users
|
Users
|
||||||
- if @users
|
- if @users
|
||||||
= "(#{@users.length})"
|
= "(#{@users.length})"
|
||||||
|
- if can? :create, User
|
||||||
|
.pull-right
|
||||||
|
=link_to 'Add User', new_admin_user_path, :class => 'button btn btn-default btn-info'
|
||||||
.row
|
.row
|
||||||
.col-md-12.table-responsive
|
.col-md-12.table-responsive
|
||||||
%table.table.table-striped.table-bordered.table-hover.datatable
|
%table.table.table-striped.table-bordered.table-hover.datatable
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ describe Admin::UsersController do
|
||||||
sign_in(admin)
|
sign_in(admin)
|
||||||
end
|
end
|
||||||
describe 'GET #index' do
|
describe 'GET #index' do
|
||||||
it 'populates an array of users' do
|
it 'sets up users array with existing users records' do
|
||||||
user1 = create(:user, email: 'user1@email.osem')
|
user1 = create(:user, email: 'user1@email.osem')
|
||||||
user2 = create(:user, email: 'user2@email.osem')
|
user2 = create(:user, email: 'user2@email.osem')
|
||||||
user_deleted = User.find_by(name: 'User deleted')
|
user_deleted = User.find_by(name: 'User deleted')
|
||||||
|
|
@ -50,4 +50,55 @@ describe Admin::UsersController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
describe 'GET #new' do
|
||||||
|
it 'sets up a user instance for the form' do
|
||||||
|
get :new
|
||||||
|
expect(assigns(:user)).to be_instance_of(User)
|
||||||
|
end
|
||||||
|
it 'renders new user template' do
|
||||||
|
get :new
|
||||||
|
expect(response).to render_template :new
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'POST #create' do
|
||||||
|
context 'saves successfuly' do
|
||||||
|
before do
|
||||||
|
post :create, user: attributes_for(:user)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to admin users index path' do
|
||||||
|
expect(response).to redirect_to admin_users_path
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows success message in flash notice' do
|
||||||
|
expect(flash[:notice]).to match('User successfully created.')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'creates new user' do
|
||||||
|
expect(User.find(user.id)).to be_instance_of(User)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'save fails' do
|
||||||
|
before do
|
||||||
|
allow_any_instance_of(User).to receive(:save).and_return(false)
|
||||||
|
post :create, user: attributes_for(:user)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'renders new template' do
|
||||||
|
expect(response).to render_template('new')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows error in flash message' do
|
||||||
|
expect(flash[:error]).to match("Creating User failed: #{user.errors.full_messages.join('. ')}.")
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not create new user' do
|
||||||
|
expect do
|
||||||
|
post :create, user: attributes_for(:user)
|
||||||
|
end.not_to change{ Event.count }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue