]> git.openstreetmap.org Git - rails.git/blob - test/controllers/user_roles_controller_test.rb
Add frozen_string_literal comments to ruby files
[rails.git] / test / controllers / user_roles_controller_test.rb
1 # frozen_string_literal: true
2
3 require "test_helper"
4
5 class UserRolesControllerTest < ActionDispatch::IntegrationTest
6   ##
7   # test all routes which lead to this controller
8   def test_routes
9     assert_routing(
10       { :path => "/user/username/roles/rolename", :method => :post },
11       { :controller => "user_roles", :action => "create", :user_display_name => "username", :role => "rolename" }
12     )
13     assert_routing(
14       { :path => "/user/username/roles/rolename", :method => :delete },
15       { :controller => "user_roles", :action => "destroy", :user_display_name => "username", :role => "rolename" }
16     )
17   end
18
19   ##
20   # test the grant role action
21   def test_update
22     target_user = create(:user)
23     normal_user = create(:user)
24     administrator_user = create(:administrator_user)
25     super_user = create(:super_user)
26
27     # Granting should fail when not logged in
28     post user_role_path(target_user, "moderator")
29     assert_response :forbidden
30
31     # Login as an unprivileged user
32     session_for(normal_user)
33
34     # Granting should still fail
35     post user_role_path(target_user, "moderator")
36     assert_redirected_to :controller => :errors, :action => :forbidden
37
38     # Login as an administrator
39     session_for(administrator_user)
40
41     UserRole::ALL_ROLES.each do |role|
42       # Granting a role to a non-existent user should fail
43       assert_difference "UserRole.count", 0 do
44         post user_role_path("non_existent_user", role)
45       end
46       assert_response :not_found
47       assert_template "users/no_such_user"
48       assert_select "h1", "The user non_existent_user does not exist"
49
50       # Granting a role to a user that already has it should fail
51       assert_no_difference "UserRole.count" do
52         post user_role_path(super_user, role)
53       end
54       assert_redirected_to user_path(super_user)
55       assert_equal "The user already has role #{role}.", flash[:error]
56
57       # Granting a role to a user that doesn't have it should work...
58       assert_difference "UserRole.count", 1 do
59         post user_role_path(target_user, role)
60       end
61       assert_redirected_to user_path(target_user)
62
63       # ...but trying a second time should fail
64       assert_no_difference "UserRole.count" do
65         post user_role_path(target_user, role)
66       end
67       assert_redirected_to user_path(target_user)
68       assert_equal "The user already has role #{role}.", flash[:error]
69     end
70
71     # Granting a non-existent role should fail
72     assert_difference "UserRole.count", 0 do
73       post user_role_path(target_user, "no_such_role")
74     end
75     assert_redirected_to user_path(target_user)
76     assert_equal "The string 'no_such_role' is not a valid role.", flash[:error]
77   end
78
79   ##
80   # test the revoke role action
81   def test_destroy
82     target_user = create(:user)
83     normal_user = create(:user)
84     administrator_user = create(:administrator_user)
85     super_user = create(:super_user)
86
87     # Revoking should fail when not logged in
88     delete user_role_path(target_user, "moderator")
89     assert_response :forbidden
90
91     # Login as an unprivileged user
92     session_for(normal_user)
93
94     # Revoking should still fail
95     delete user_role_path(target_user, "moderator")
96     assert_redirected_to :controller => :errors, :action => :forbidden
97
98     # Login as an administrator
99     session_for(administrator_user)
100
101     UserRole::ALL_ROLES.each do |role|
102       # Removing a role from a non-existent user should fail
103       assert_difference "UserRole.count", 0 do
104         delete user_role_path("non_existent_user", role)
105       end
106       assert_response :not_found
107       assert_template "users/no_such_user"
108       assert_select "h1", "The user non_existent_user does not exist"
109
110       # Removing a role from a user that doesn't have it should fail
111       assert_no_difference "UserRole.count" do
112         delete user_role_path(target_user, role)
113       end
114       assert_redirected_to user_path(target_user)
115       assert_equal "The user does not have role #{role}.", flash[:error]
116
117       # Removing a role from a user that has it should work...
118       assert_difference "UserRole.count", -1 do
119         delete user_role_path(super_user, role)
120       end
121       assert_redirected_to user_path(super_user)
122
123       # ...but trying a second time should fail
124       assert_no_difference "UserRole.count" do
125         delete user_role_path(super_user, role)
126       end
127       assert_redirected_to user_path(super_user)
128       assert_equal "The user does not have role #{role}.", flash[:error]
129     end
130
131     # Revoking a non-existent role should fail
132     assert_difference "UserRole.count", 0 do
133       delete user_role_path(target_user, "no_such_role")
134     end
135     assert_redirected_to user_path(target_user)
136     assert_equal "The string 'no_such_role' is not a valid role.", flash[:error]
137
138     # Revoking administrator role from current user should fail
139     delete user_role_path(administrator_user, "administrator")
140     assert_redirected_to user_path(administrator_user)
141     assert_equal "Cannot revoke administrator role from current user.", flash[:error]
142   end
143 end