@@ -8,6 +8,7 @@ class Users::RegistrationsControllerTest < ActionController::TestCase
88
99 test 'should register user' do
1010 try_register_user ( 'test' , 'test@example.com' , 'testtest' )
11+
1112 assert_response ( :found )
1213 assert_not_nil assigns ( :user ) . id
1314 assert_redirected_to root_path
@@ -16,6 +17,7 @@ class Users::RegistrationsControllerTest < ActionController::TestCase
1617 test 'should prevent rapid registrations from same IP' do
1718 User . create ( username : 'test' , email : 'test2@example.com' , password : 'testtest' , current_sign_in_ip : '0.0.0.0' )
1819 try_register_user ( 'test' , 'test@example.com' , 'testtest' )
20+
1921 assert_response ( :found )
2022 assert_redirected_to users_path
2123 assert_not_nil flash [ :danger ]
@@ -24,6 +26,7 @@ class Users::RegistrationsControllerTest < ActionController::TestCase
2426 test 'ensure Devise errors are handled properly' do
2527 existing_user = users ( :standard_user )
2628 try_register_user ( existing_user . username , existing_user . email , 'testtest' )
29+
2730 assert_response ( :success )
2831 assert_not_empty assigns ( :user ) . errors
2932 end
@@ -51,7 +54,8 @@ class Users::RegistrationsControllerTest < ActionController::TestCase
5154 test 'should delete user account' do
5255 sign_in users ( :standard_user )
5356 session [ :sudo ] = DateTime . now . iso8601
54- post :do_delete , params : { username : users ( :standard_user ) . username }
57+ try_do_delete_user ( users ( :standard_user ) )
58+
5559 assert_response ( :found )
5660 assert_redirected_to root_path
5761 assert_equal 'Sorry to see you go!' , flash [ :info ]
@@ -60,13 +64,15 @@ class Users::RegistrationsControllerTest < ActionController::TestCase
6064
6165 test 'should require authentication to delete user account' do
6266 post :do_delete , params : { username : 'anything' }
67+
6368 assert_response ( :found )
6469 assert_redirected_to new_user_session_path
6570 end
6671
6772 test 'should require sudo to delete user account' do
6873 sign_in users ( :standard_user )
6974 post :do_delete , params : { username : 'anything' }
75+
7076 assert_response ( :found )
7177 assert_redirected_to user_sudo_path
7278 end
@@ -75,31 +81,38 @@ class Users::RegistrationsControllerTest < ActionController::TestCase
7581 sign_in users ( :standard_user )
7682 session [ :sudo ] = DateTime . now . iso8601
7783 post :do_delete , params : { username : 'wrong' }
78- assert_response ( :success )
79- assert_equal [ 'The username you entered was incorrect.' ] , assigns ( :user ) . errors . full_messages
80- assert_not assigns ( :user ) . deleted
81- end
8284
83- test 'should prevent deletion of moderators' do
84- sign_in users ( :moderator )
85- session [ :sudo ] = DateTime . now . iso8601
86- post :do_delete , params : { username : users ( :moderator ) . username }
8785 assert_response ( :success )
88- assert_equal [ 'Moderator accounts cannot be self-deleted. Contact support.' ] , assigns ( :user ) . errors . full_messages
86+ assert_equal [ I18n . t ( 'users.errors.self_delete_wrong_username' ) ] , assigns ( :user ) . errors . full_messages
8987 assert_not assigns ( :user ) . deleted
9088 end
9189
92- test 'should prevent deletion of admins' do
93- sign_in users ( :admin )
94- session [ :sudo ] = DateTime . now . iso8601
95- post :do_delete , params : { username : users ( :admin ) . username }
96- assert_response ( :success )
97- assert_equal [ 'Admin accounts cannot be self-deleted. Contact support.' ] , assigns ( :user ) . errors . full_messages
98- assert_not assigns ( :user ) . deleted
90+ test 'should prevent self-deletion if the user is at least a moderator' do
91+ locale_string_map = {
92+ moderator : 'users.errors.no_mod_self_delete' ,
93+ admin : 'users.errors.no_admin_self_delete'
94+ }
95+
96+ [ :moderator , :admin ] . each do |name |
97+ sign_in users ( name )
98+ session [ :sudo ] = DateTime . now . iso8601
99+
100+ try_do_delete_user ( users ( name ) )
101+
102+ assert_response ( :success )
103+ assert_equal [ I18n . t ( locale_string_map [ name ] ) ] , assigns ( :user ) . errors . full_messages
104+ assert_not assigns ( :user ) . deleted
105+ end
99106 end
100107
101108 private
102109
110+ # Attempts to sudo delete a given user
111+ # @param user [User] user to delete
112+ def try_do_delete_user ( user )
113+ post :do_delete , params : { username : user . username }
114+ end
115+
103116 def try_register_user ( username , email , password )
104117 post :create , params : { user : { username : username , email : email , password : password ,
105118 password_confirmation : password } }
0 commit comments