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