]> git.openstreetmap.org Git - rails.git/blob - test/integration/user_terms_seen_test.rb
Merge remote-tracking branch 'upstream/pull/4978'
[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     # but now we need to look at the terms
28     assert_redirected_to :controller => :users, :action => :terms, :referer => "/diary/new"
29     follow_redirect!
30     assert_response :success
31
32     # don't agree to the terms, but hit decline
33     post "/user/save", :params => { :decline => true, :referer => "/diary/new" }
34     assert_redirected_to "/diary/new"
35     follow_redirect!
36
37     # should be carried through to a normal login with a message
38     assert_response :success
39     assert_not flash[:notice].nil?
40   end
41
42   def test_terms_cant_be_circumvented
43     user = create(:user, :terms_seen => false, :terms_agreed => nil)
44
45     # try to log in
46     get "/login"
47     follow_redirect!
48     assert_response :success
49     assert_template "sessions/new"
50     post "/login", :params => { :username => user.email, :password => "test", :referer => "/diary/new" }
51     # but now we need to look at the terms
52     assert_redirected_to :controller => :users, :action => :terms, :referer => "/diary/new"
53
54     # check that if we go somewhere else now, it redirects
55     # back to the terms page.
56     get "/traces/mine"
57     assert_redirected_to :controller => :users, :action => :terms, :referer => "/traces/mine"
58     get "/traces/mine", :params => { :referer => "/diary/new" }
59     assert_redirected_to :controller => :users, :action => :terms, :referer => "/diary/new"
60   end
61
62   private
63
64   def auth_header(user, pass)
65     { "HTTP_AUTHORIZATION" => format("Basic %<auth>s", :auth => Base64.encode64("#{user}:#{pass}")) }
66   end
67 end