]> git.openstreetmap.org Git - rails.git/blob - test/controllers/accounts/terms_controller_test.rb
Merge remote-tracking branch 'upstream/pull/6178'
[rails.git] / test / controllers / accounts / terms_controller_test.rb
1 require "test_helper"
2
3 module Accounts
4   class TermsControllerTest < ActionDispatch::IntegrationTest
5     ##
6     # test all routes which lead to this controller
7     def test_routes
8       assert_routing(
9         { :path => "/account/terms", :method => :get },
10         { :controller => "accounts/terms", :action => "show" }
11       )
12       assert_routing(
13         { :path => "/account/terms", :method => :put },
14         { :controller => "accounts/terms", :action => "update" }
15       )
16
17       get "/user/terms"
18       assert_redirected_to "/account/terms"
19     end
20
21     def test_show_not_logged_in
22       get account_terms_path
23
24       assert_redirected_to login_path(:referer => account_terms_path)
25     end
26
27     def test_show_agreed
28       user = create(:user, :terms_seen => true, :terms_agreed => Date.yesterday)
29       session_for(user)
30
31       get account_terms_path
32       assert_response :success
33     end
34
35     def test_show_not_seen_without_referer
36       user = create(:user, :terms_seen => false, :terms_agreed => nil)
37       session_for(user)
38
39       get account_terms_path
40       assert_response :success
41     end
42
43     def test_show_not_seen_with_referer
44       user = create(:user, :terms_seen => false, :terms_agreed => nil)
45       session_for(user)
46
47       get account_terms_path(:referer => "/test")
48       assert_response :success
49     end
50
51     def test_update_decline_by_not_checking_the_boxes
52       freeze_time do
53         user = create(:user, :terms_seen => false, :terms_agreed => nil, :tou_agreed => nil)
54         session_for(user)
55
56         put account_terms_path, :params => { :continue => "Continue" }
57
58         assert_redirected_to account_path
59         assert_equal({ :partial => "accounts/terms/terms_declined_flash" }, flash[:notice])
60
61         user.reload
62         assert user.terms_seen
63         assert_nil user.terms_agreed
64         assert_nil user.tou_agreed
65       end
66     end
67
68     def test_update_decline_by_cancel
69       freeze_time do
70         user = create(:user, :terms_seen => false, :terms_agreed => nil, :tou_agreed => nil)
71         session_for(user)
72
73         put account_terms_path, :params => { :read_ct => 1, :read_tou => 1, :decline => "Cancel" }
74
75         assert_redirected_to account_path
76         assert_equal({ :partial => "accounts/terms/terms_declined_flash" }, flash[:notice])
77
78         user.reload
79         assert user.terms_seen
80         assert_nil user.terms_agreed
81         assert_nil user.tou_agreed
82       end
83     end
84
85     def test_update_decline_previously_accepted_by_not_checking_the_boxes
86       freeze_time do
87         user = create(:user, :terms_seen => true, :terms_agreed => Date.yesterday, :tou_agreed => Date.yesterday)
88         session_for(user)
89
90         put account_terms_path, :params => { :continue => "Continue" }
91
92         assert_redirected_to account_path
93         assert_equal({ :partial => "accounts/terms/terms_declined_flash" }, flash[:notice])
94
95         user.reload
96         assert user.terms_seen
97         assert_equal Date.yesterday, user.terms_agreed
98         assert_equal Date.yesterday, user.tou_agreed
99       end
100     end
101
102     def test_update_decline_previously_accepted_by_cancel
103       freeze_time do
104         user = create(:user, :terms_seen => true, :terms_agreed => Date.yesterday, :tou_agreed => Date.yesterday)
105         session_for(user)
106
107         put account_terms_path, :params => { :read_ct => 1, :read_tou => 1, :decline => "Cancel" }
108
109         assert_redirected_to account_path
110         assert_equal({ :partial => "accounts/terms/terms_declined_flash" }, flash[:notice])
111
112         user.reload
113         assert user.terms_seen
114         assert_equal Date.yesterday, user.terms_agreed
115         assert_equal Date.yesterday, user.tou_agreed
116       end
117     end
118
119     def test_update_accept_not_seen
120       freeze_time do
121         user = create(:user, :terms_seen => false, :terms_agreed => nil, :tou_agreed => nil)
122         session_for(user)
123
124         put account_terms_path, :params => { :read_ct => 1, :read_tou => 1 }
125
126         assert_redirected_to account_path
127         assert_equal "Thanks for accepting the new contributor terms!", flash[:notice]
128
129         user.reload
130         assert user.terms_seen
131         assert_equal Time.now.utc, user.terms_agreed
132         assert_equal Time.now.utc, user.tou_agreed
133       end
134     end
135
136     def test_update_accept_not_seen_with_referer
137       freeze_time do
138         user = create(:user, :terms_seen => false, :terms_agreed => nil, :tou_agreed => nil)
139         session_for(user)
140
141         put account_terms_path, :params => { :referer => "/test", :read_ct => 1, :read_tou => 1 }
142
143         assert_redirected_to "/test"
144         assert_equal "Thanks for accepting the new contributor terms!", flash[:notice]
145
146         user.reload
147         assert user.terms_seen
148         assert_equal Time.now.utc, user.terms_agreed
149         assert_equal Time.now.utc, user.tou_agreed
150       end
151     end
152
153     def test_update_accept_previously_accepted
154       freeze_time do
155         user = create(:user, :terms_seen => true, :terms_agreed => Date.yesterday, :tou_agreed => Date.yesterday)
156         session_for(user)
157
158         put account_terms_path, :params => { :read_ct => 1, :read_tou => 1 }
159
160         assert_redirected_to account_path
161         assert_equal "Thanks for accepting the new contributor terms!", flash[:notice]
162
163         user.reload
164         assert user.terms_seen
165         assert_equal Time.now.utc, user.terms_agreed
166         assert_equal Time.now.utc, user.tou_agreed
167       end
168     end
169
170     # Check that if you haven't seen the terms, and make a request that requires authentication,
171     # that your request is redirected to view the terms
172     def test_terms_not_seen_redirection
173       user = create(:user, :terms_seen => false, :terms_agreed => nil)
174       session_for(user)
175
176       get account_path
177       assert_redirected_to account_terms_path(:referer => account_path)
178     end
179   end
180 end