From 24712a0bd24308f301dda0eb7b3d4814137a25a1 Mon Sep 17 00:00:00 2001 From: Stella Rouzi Date: Wed, 29 Oct 2014 18:22:45 +0200 Subject: [PATCH 1/4] Add create method for users and corresponding controller tests. --- app/controllers/admin/users_controller.rb | 20 ++++++++ .../admin/users_controller_spec.rb | 47 +++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index d5a52787..b699e889 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -6,6 +6,18 @@ module Admin @user = User.new end + def create + @user = User.new(user_params) + @user.password = Devise.friendly_token[0, 20] + @user.skip_confirmation! + if @user.save + redirect_to admin_users_path, notice: "User created. Name: #{@user.name}, email: #{@user.email}" + else + flash[:error] = "An error prohibited this user from being saved: #{@user.errors.full_messages.join('. ')}." + render :new + end + end + def index @users = User.all end @@ -33,5 +45,13 @@ module Admin @user.destroy redirect_to admin_users_path, notice: 'User got deleted' end + + private + + # Only allow a trusted parameter "white list" through. + def user_params + # params.require(:user).permit(:email, :name, :affiliation, :biography) + params[:user] + end end end diff --git a/spec/controllers/admin/users_controller_spec.rb b/spec/controllers/admin/users_controller_spec.rb index 97d11d81..0f4a25f4 100644 --- a/spec/controllers/admin/users_controller_spec.rb +++ b/spec/controllers/admin/users_controller_spec.rb @@ -50,4 +50,51 @@ describe Admin::UsersController do end end + describe 'GET #new' do + it 'assigns a new user to @user variable' do + get :new + expect(assigns(:user)).to be_a_new(User) + end + + it 'renders the :new template' do + get :new + expect(response).to render_template :new + end + end + + describe 'POST #create' do + context 'with valid attributes' do + it 'saves the user to the database' do + expected = expect do + post :create, user: { name: 'New User', email: 'newuser@osem.localhost' } + end + expected.to change { User.count }.by 1 + end + + it 'redirects to users#index' do + post :create, user: { name: 'New User', email: 'newuser@osem.localhost' } + expect(response).to redirect_to admin_users_path + end + + it 'shows success message' do + post :create, user: { name: 'New User', email: 'newuser@osem.localhost' } + expect(flash[:notice]).to match("User created. Name: New User, email: newuser@osem.localhost") + end + end + + context 'with invalid attributes' do + it 'does not save the user to the database' do + expected = expect do + post :create + end + expected.to_not change { User.count } + end + + it 're-renders the new template' do + post :create + + expect(response).to be_success + end + end + end end From f08d07dc5d283bf6557866adf7cbf61196c42c70 Mon Sep 17 00:00:00 2001 From: Stella Rouzi Date: Wed, 29 Oct 2014 22:08:25 +0200 Subject: [PATCH 2/4] Style fix: single quote --- spec/controllers/admin/users_controller_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/controllers/admin/users_controller_spec.rb b/spec/controllers/admin/users_controller_spec.rb index 0f4a25f4..155335bd 100644 --- a/spec/controllers/admin/users_controller_spec.rb +++ b/spec/controllers/admin/users_controller_spec.rb @@ -78,7 +78,7 @@ describe Admin::UsersController do it 'shows success message' do post :create, user: { name: 'New User', email: 'newuser@osem.localhost' } - expect(flash[:notice]).to match("User created. Name: New User, email: newuser@osem.localhost") + expect(flash[:notice]).to match('User created. Name: New User, email: newuser@osem.localhost') end end From 9f9193fe3298985d9f3bb75b7dcc83d972eb4bb4 Mon Sep 17 00:00:00 2001 From: Stella Date: Sun, 9 Nov 2014 21:00:58 +0200 Subject: [PATCH 3/4] No link for user creation when ichain is enabled --- app/views/admin/users/index.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/users/index.html.haml b/app/views/admin/users/index.html.haml index dd004b4a..b2b2eac8 100644 --- a/app/views/admin/users/index.html.haml +++ b/app/views/admin/users/index.html.haml @@ -5,7 +5,7 @@ - if @users = "(#{@users.length})" - = link_to 'New User', new_admin_user_path, class: 'btn btn-success pull-right' + = link_to 'New User', new_admin_user_path, class: 'btn btn-success pull-right' unless CONFIG['authentication']['ichain']['enabled'] %table.table.table-striped.table-bordered.table-hover#users-datatable %thead %th ID From 027fff4b57197b3af7d8aaa324fd62b2dbcc25d0 Mon Sep 17 00:00:00 2001 From: Stella Date: Sun, 9 Nov 2014 22:24:57 +0200 Subject: [PATCH 4/4] add username to users created by admin --- app/controllers/admin/users_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index b699e889..4f300ead 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -9,6 +9,7 @@ module Admin def create @user = User.new(user_params) @user.password = Devise.friendly_token[0, 20] + @user.username = @user.email.split('@')[0] @user.skip_confirmation! if @user.save redirect_to admin_users_path, notice: "User created. Name: #{@user.name}, email: #{@user.email}"