Merge remote-tracking branch 'openstreetmap/pull/1030' into next
[rails.git] / test / integration / user_roles_test.rb
1 require "test_helper"
2
3 class UserRolesTest < ActionDispatch::IntegrationTest
4   fixtures :users, :user_roles
5
6   def setup
7     stub_hostip_requests
8   end
9
10   test "grant" do
11     check_fail(:grant, :public_user, :moderator)
12     check_fail(:grant, :moderator_user, :moderator)
13     check_success(:grant, :administrator_user, :moderator)
14   end
15
16   test "revoke" do
17     check_fail(:revoke, :public_user, :moderator)
18     check_fail(:revoke, :moderator_user, :moderator)
19     # this other user doesn't have moderator role, so this fails
20     check_fail(:revoke, :administrator_user, :moderator)
21   end
22
23   private
24
25   def check_fail(action, user, role)
26     get "/login"
27     assert_response :redirect
28     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
29     follow_redirect!
30     assert_response :success
31     post "/login", "username" => users(user).email, "password" => "test", :referer => "/"
32     assert_response :redirect
33     follow_redirect!
34     assert_response :success
35
36     post "/user/#{users(:second_public_user).display_name}/role/#{role}/#{action}"
37     assert_redirected_to :controller => "user", :action => "view", :display_name => users(:second_public_user).display_name
38
39     reset!
40   end
41
42   def check_success(action, user, role)
43     get "/login"
44     assert_response :redirect
45     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
46     follow_redirect!
47     assert_response :success
48     post "/login", "username" => users(user).email, "password" => "test", :referer => "/"
49     assert_response :redirect
50     follow_redirect!
51     assert_response :success
52
53     post "/user/#{users(:second_public_user).display_name}/role/#{role}/#{action}"
54     assert_redirected_to :controller => "user", :action => "view", :display_name => users(:second_public_user).display_name
55
56     reset!
57   end
58 end