]> git.openstreetmap.org Git - rails.git/blob - test/integration/user_terms_seen_test.rb
Merge remote-tracking branch 'upstream/pull/4404'
[rails.git] / test / integration / user_terms_seen_test.rb
1 require "test_helper"
2
3 class UserTermsSeenTest < ActionDispatch::IntegrationTest
4   def test_api_blocked
5     user = create(:user, :terms_seen => false, :terms_agreed => nil)
6
7     get "/api/#{Settings.api_version}/user/preferences", :headers => auth_header(user.display_name, "test")
8     assert_response :forbidden
9
10     # touch it so that the user has seen the terms
11     user.terms_seen = true
12     user.save
13
14     get "/api/#{Settings.api_version}/user/preferences", :headers => auth_header(user.display_name, "test")
15     assert_response :success
16   end
17
18   def test_terms_presented_at_login
19     user = create(:user, :terms_seen => false, :terms_agreed => nil)
20
21     # try to log in
22     get "/login"
23     follow_redirect!
24     assert_response :success
25     assert_template "sessions/new"
26     post "/login", :params => { :username => user.email, :password => "test", :referer => "/diary/new" }
27     assert_response :redirect
28     # but now we need to look at the terms
29     assert_redirected_to :controller => :users, :action => :terms, :referer => "/diary/new"
30     follow_redirect!
31     assert_response :success
32
33     # don't agree to the terms, but hit decline
34     post "/user/save", :params => { :decline => true, :referer => "/diary/new" }
35     assert_redirected_to "/diary/new"
36     follow_redirect!
37
38     # should be carried through to a normal login with a message
39     assert_response :success
40     assert_not flash[:notice].nil?
41   end
42
43   def test_terms_cant_be_circumvented
44     user = create(:user, :terms_seen => false, :terms_agreed => nil)
45
46     # try to log in
47     get "/login"
48     follow_redirect!
49     assert_response :success
50     assert_template "sessions/new"
51     post "/login", :params => { :username => user.email, :password => "test", :referer => "/diary/new" }
52     assert_response :redirect
53     # but now we need to look at the terms
54     assert_redirected_to :controller => :users, :action => :terms, :referer => "/diary/new"
55
56     # check that if we go somewhere else now, it redirects
57     # back to the terms page.
58     get "/traces/mine"
59     assert_redirected_to :controller => :users, :action => :terms, :referer => "/traces/mine"
60     get "/traces/mine", :params => { :referer => "/diary/new" }
61     assert_redirected_to :controller => :users, :action => :terms, :referer => "/diary/new"
62   end
63
64   private
65
66   def auth_header(user, pass)
67     { "HTTP_AUTHORIZATION" => format("Basic %<auth>s", :auth => Base64.encode64("#{user}:#{pass}")) }
68   end
69 end