Skip to content

Commit fcbaf51

Browse files
cbaudouinjrJeremyRudmanpeterkos
authored
feature: Allows directors to reset passwords through admin portal (#524)
Co-authored-by: JeremyRudman <[email protected]> Co-authored-by: Peter Kos <[email protected]>
1 parent 3b8cb37 commit fcbaf51

File tree

4 files changed

+101
-51
lines changed

4 files changed

+101
-51
lines changed

app/controllers/manage/users_controller.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class Manage::UsersController < Manage::ApplicationController
22
before_action :require_director
3-
before_action :find_user, only: [:show, :edit, :update, :destroy]
3+
before_action :find_user, only: [:show, :edit, :update, :reset_password, :destroy]
44

55
respond_to :html, :json
66

@@ -16,6 +16,14 @@ def staff_datatable
1616
render json: StaffDatatable.new(params, view_context: view_context)
1717
end
1818

19+
def reset_password
20+
new_password = Devise.friendly_token(50)
21+
@user.reset_password(new_password, new_password)
22+
@user.send_reset_password_instructions
23+
flash[:notice] = t(:reset_password_success, scope: 'pages.manage.users.edit', full_name: @user.full_name)
24+
respond_with(:manage, @user, location: manage_users_path)
25+
end
26+
1927
def show
2028
respond_with(:manage, @user)
2129
end

app/views/manage/users/edit.html.haml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
.btn-group
44
= link_to t(:cancel, scope: "pages.manage.users.edit"), manage_user_path(@user), class: 'btn btn-sm btn-outline-secondary'
5+
= link_to t(:reset_password, scope: "pages.manage.users.edit"), reset_password_manage_user_path(@user), method: :patch, data: { confirm: t(:confirm_reset_password, scope: "pages.manage.users.edit", full_name: @user.full_name, first_name: @user.first_name)}, class: 'btn btn-sm btn-outline-secondary'
56
= link_to t(:delete, scope: "pages.manage.users.edit"), manage_user_path(@user), method: :delete, data: { confirm: "Are you sure? #{@user.email} will be permanently deleted. This action is irreversible." }, class: 'btn btn-sm btn-outline-secondary'
67

78
= render 'form'

config/locales/en.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,9 @@ en:
206206
subtitle: Edit User
207207
cancel: Cancel
208208
delete: Delete
209+
reset_password: Reset Password
210+
confirm_reset_password: "Are you sure? %{full_name}'s password will be reset and %{first_name} will receive a recovery email."
211+
reset_password_success: "Successfully reset password and sent recovery instructions to %{full_name}."
209212
form:
210213
active: Active
211214
inactive: Inactive

test/controllers/manage/users_controller_test.rb

Lines changed: 88 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
require 'test_helper'
22

33
class Manage::UsersControllerTest < ActionController::TestCase
4+
include ActiveJob::TestHelper
5+
46
setup do
57
@user = create(:user)
68
end
@@ -12,6 +14,16 @@ class Manage::UsersControllerTest < ActionController::TestCase
1214
assert_redirected_to new_user_session_path
1315
end
1416

17+
should "not allow access to user_datatable" do
18+
get :user_datatable
19+
assert_redirected_to new_user_session_path
20+
end
21+
22+
should "not allow access to staff_datatable" do
23+
get :staff_datatable
24+
assert_redirected_to new_user_session_path
25+
end
26+
1527
should "not allow access to manage_users user datatables api" do
1628
post :user_datatable, format: :json, params: { "columns[0][data]" => "" }
1729
assert_response 401
@@ -59,6 +71,16 @@ class Manage::UsersControllerTest < ActionController::TestCase
5971
assert_redirected_to root_path
6072
end
6173

74+
should "not allow access to user_datatable" do
75+
get :user_datatable
76+
assert_redirected_to root_path
77+
end
78+
79+
should "not allow access to staff_datatable" do
80+
get :staff_datatable
81+
assert_redirected_to root_path
82+
end
83+
6284
should "not allow access to manage_users users datatables api" do
6385
post :user_datatable, format: :json, params: { "columns[0][data]" => "" }
6486
assert_response :redirect
@@ -108,6 +130,16 @@ class Manage::UsersControllerTest < ActionController::TestCase
108130
assert_redirected_to manage_checkins_path
109131
end
110132

133+
should "not allow access to user_datatable" do
134+
get :user_datatable
135+
assert_redirected_to manage_checkins_path
136+
end
137+
138+
should "not allow access to staff_datatable" do
139+
get :staff_datatable
140+
assert_redirected_to manage_checkins_path
141+
end
142+
111143
should "not allow access to manage_users users datatables api" do
112144
post :user_datatable, format: :json, params: { "columns[0][data]" => "" }
113145
assert_redirected_to manage_checkins_path
@@ -154,6 +186,16 @@ class Manage::UsersControllerTest < ActionController::TestCase
154186
assert_redirected_to manage_root_path
155187
end
156188

189+
should "not allow access to user_datatable" do
190+
get :user_datatable
191+
assert_redirected_to manage_root_path
192+
end
193+
194+
should "not allow access to staff_datatable" do
195+
get :staff_datatable
196+
assert_redirected_to manage_root_path
197+
end
198+
157199
should "not allow access to manage_users users datatables api" do
158200
post :user_datatable, format: :json, params: { "columns[0][data]" => "" }
159201
assert_redirected_to manage_root_path
@@ -200,55 +242,51 @@ class Manage::UsersControllerTest < ActionController::TestCase
200242
assert_response :success
201243
end
202244

203-
# TODO: Tests appear to be stalling Travis CI
204-
205-
# should "create a new admin" do
206-
# post :create, params: { user: { email: "[email protected]", role: 'admin' } }
207-
# assert_response :redirect
208-
# assert_redirected_to manage_users_path
209-
# assert assigns(:user).admin?, "new user should be an admin"
210-
# end
211-
212-
# should "create a new limited access admin" do
213-
# post :create, params: { user: { email: "[email protected]", role: 'admin_limited_access' } }
214-
# assert_response :redirect
215-
# assert_redirected_to manage_users_path
216-
# assert !assigns(:user).admin?, "new user should not be an admin"
217-
# assert assigns(:user).admin_limited_access?, "new user should be a limited access admin"
218-
# end
219-
220-
# should "not create an admin with duplicate emails" do
221-
# create(:user, email: "[email protected]")
222-
# assert_difference('User.count', 0) do
223-
# post :create, params: { user: { email: "[email protected]", role: 'admin' } }
224-
# end
225-
# end
226-
227-
# should "allow access to manage_admins#new" do
228-
# get :new, params: { id: @user }
229-
# assert_response :success
230-
# end
231-
232-
# should "allow access to manage_admins#show" do
233-
# get :show, params: { id: @user }
234-
# assert_response :success
235-
# end
236-
237-
# should "allow access to manage_admins#edit" do
238-
# get :edit, params: { id: @user }
239-
# assert_response :success
240-
# end
241-
242-
# should "update user" do
243-
# patch :update, params: { id: @user, user: { email: "[email protected]" } }
244-
# assert_redirected_to manage_users_path
245-
# end
246-
247-
# should "destroy user" do
248-
# assert_difference('User.count', -1) do
249-
# patch :destroy, params: { id: @user }
250-
# end
251-
# assert_redirected_to manage_users_path
252-
# end
245+
should "allow access to user_datatable" do
246+
get :user_datatable
247+
assert_response :success
248+
end
249+
250+
should "allow access to staff_datatable" do
251+
get :staff_datatable
252+
assert_response :success
253+
end
254+
255+
should "be able to reset a user's password" do
256+
assert_difference "enqueued_jobs.size", 1 do
257+
patch :reset_password, params: { id: @user }
258+
end
259+
assert_redirected_to manage_users_path
260+
end
261+
262+
should "allow access to manage_users#show" do
263+
get :show, params: { id: @user }
264+
assert_response :success
265+
end
266+
267+
should "allow access to manage_users#edit" do
268+
get :edit, params: { id: @user }
269+
assert_response :success
270+
end
271+
272+
should "update user" do
273+
patch :update, params: { id: @user, user: { email: "[email protected]" } }
274+
assert_redirected_to manage_users_path
275+
end
276+
277+
should "destroy user" do
278+
assert_difference('User.count', -1) do
279+
patch :destroy, params: { id: @user }
280+
end
281+
assert_redirected_to manage_users_path
282+
end
283+
284+
should "destroy user and user's questionnaire" do
285+
@questionnaire = create(:questionnaire, user_id: @user.id)
286+
assert_difference('Questionnaire.count', -1) do
287+
patch :destroy, params: { id: @user }
288+
end
289+
assert_redirected_to manage_users_path
290+
end
253291
end
254292
end

0 commit comments

Comments
 (0)