]> git.openstreetmap.org Git - rails.git/blob - test/integration/user_terms_seen_test.rb
More test work
[rails.git] / test / integration / user_terms_seen_test.rb
1 require "test_helper"
2
3 class UserTermsSeenTest < ActionDispatch::IntegrationTest
4   fixtures :users
5
6   def test_api_blocked
7     with_terms_seen(true) do
8       user = users(:terms_not_seen_user)
9
10       get "/api/#{API_VERSION}/user/preferences", nil, auth_header(user.display_name, "test")
11       assert_response :forbidden
12
13       # touch it so that the user has seen the terms
14       user.terms_seen = true
15       user.save
16
17       get "/api/#{API_VERSION}/user/preferences", nil, auth_header(user.display_name, "test")
18       assert_response :success
19     end
20   end
21
22   def test_terms_presented_at_login
23     with_terms_seen(true) do
24       user = users(:terms_not_seen_user)
25
26       # try to log in
27       get_via_redirect "/login"
28       assert_response :success
29       assert_template "user/login"
30       post "/login", "username" => user.email, "password" => "test", :referer => "/"
31       assert_response :redirect
32       # but now we need to look at the terms
33       assert_redirected_to "controller" => "user", "action" => "terms", :referer => "/"
34       follow_redirect!
35       assert_response :success
36
37       # don't agree to the terms, but hit decline
38       post "/user/save", "decline" => "decline", "referer" => "/"
39       assert_redirected_to "/"
40       follow_redirect!
41
42       # should be carried through to a normal login with a message
43       assert_response :success
44       assert !flash[:notice].nil?
45     end
46   end
47
48   def test_terms_cant_be_circumvented
49     with_terms_seen(true) do
50       user = users(:terms_not_seen_user)
51
52       # try to log in
53       get_via_redirect "/login"
54       assert_response :success
55       assert_template "user/login"
56       post "/login", "username" => user.email, "password" => "test", :referer => "/"
57       assert_response :redirect
58       # but now we need to look at the terms
59       assert_redirected_to "controller" => "user", "action" => "terms", :referer => "/"
60       follow_redirect!
61       assert_response :success
62
63       # check that if we go somewhere else now, it redirects
64       # back to the terms page.
65       get "/traces/mine"
66       assert_redirected_to "controller" => "user", "action" => "terms", :referer => "/traces/mine"
67       get "/traces/mine", :referer => "/test"
68       assert_redirected_to "controller" => "user", "action" => "terms", :referer => "/test"
69     end
70   end
71
72   private
73
74   def auth_header(user, pass)
75     { "HTTP_AUTHORIZATION" => format("Basic %s", Base64.encode64("#{user}:#{pass}")) }
76   end
77
78   def with_terms_seen(value)
79     require_terms_seen = Object.send("remove_const", "REQUIRE_TERMS_SEEN")
80     Object.const_set("REQUIRE_TERMS_SEEN", value)
81
82     yield
83
84     Object.send("remove_const", "REQUIRE_TERMS_SEEN")
85     Object.const_set("REQUIRE_TERMS_SEEN", require_terms_seen)
86   end
87 end