]> git.openstreetmap.org Git - rails.git/blob - test/integration/user_terms_seen_test.rb
Drop monkey patch now we're using option style redirects
[rails.git] / test / integration / user_terms_seen_test.rb
1 require File.dirname(__FILE__) + '/../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     end
68   end
69
70 private
71
72   def auth_header(user, pass)
73     {"HTTP_AUTHORIZATION" => "Basic %s" % Base64.encode64("#{user}:#{pass}")}
74   end
75
76   def with_terms_seen(value)
77     require_terms_seen = Object.send("remove_const", "REQUIRE_TERMS_SEEN")
78     Object.const_set("REQUIRE_TERMS_SEEN", value)
79
80     yield
81
82     Object.send("remove_const", "REQUIRE_TERMS_SEEN")
83     Object.const_set("REQUIRE_TERMS_SEEN", require_terms_seen)
84   end
85 end