]> git.openstreetmap.org Git - rails.git/blob - test/controllers/accounts/terms_controller_test.rb
Merge pull request #5932 from tomhughes/frozen-strings
[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_update_decline_by_not_checking_the_boxes
54       freeze_time do
55         user = create(:user, :terms_seen => false, :terms_agreed => nil, :tou_agreed => nil)
56         session_for(user)
57
58         put account_terms_path, :params => { :continue => "Continue" }
59
60         assert_redirected_to account_path
61         assert_equal({ :partial => "accounts/terms/terms_declined_flash" }, flash[:notice])
62
63         user.reload
64         assert user.terms_seen
65         assert_nil user.terms_agreed
66         assert_nil user.tou_agreed
67       end
68     end
69
70     def test_update_decline_by_cancel
71       freeze_time do
72         user = create(:user, :terms_seen => false, :terms_agreed => nil, :tou_agreed => nil)
73         session_for(user)
74
75         put account_terms_path, :params => { :read_ct => 1, :read_tou => 1, :decline => "Cancel" }
76
77         assert_redirected_to account_path
78         assert_equal({ :partial => "accounts/terms/terms_declined_flash" }, flash[:notice])
79
80         user.reload
81         assert user.terms_seen
82         assert_nil user.terms_agreed
83         assert_nil user.tou_agreed
84       end
85     end
86
87     def test_update_decline_previously_accepted_by_not_checking_the_boxes
88       freeze_time do
89         user = create(:user, :terms_seen => true, :terms_agreed => Date.yesterday, :tou_agreed => Date.yesterday)
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_equal Date.yesterday, user.terms_agreed
100         assert_equal Date.yesterday, user.tou_agreed
101       end
102     end
103
104     def test_update_decline_previously_accepted_by_cancel
105       freeze_time do
106         user = create(:user, :terms_seen => true, :terms_agreed => Date.yesterday, :tou_agreed => Date.yesterday)
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_equal Date.yesterday, user.terms_agreed
117         assert_equal Date.yesterday, user.tou_agreed
118       end
119     end
120
121     def test_update_accept_not_seen
122       freeze_time do
123         user = create(:user, :terms_seen => false, :terms_agreed => nil, :tou_agreed => nil)
124         session_for(user)
125
126         put account_terms_path, :params => { :read_ct => 1, :read_tou => 1 }
127
128         assert_redirected_to account_path
129         assert_equal "Thanks for accepting the new contributor terms!", flash[:notice]
130
131         user.reload
132         assert user.terms_seen
133         assert_equal Time.now.utc, user.terms_agreed
134         assert_equal Time.now.utc, user.tou_agreed
135       end
136     end
137
138     def test_update_accept_not_seen_with_referer
139       freeze_time do
140         user = create(:user, :terms_seen => false, :terms_agreed => nil, :tou_agreed => nil)
141         session_for(user)
142
143         put account_terms_path, :params => { :referer => "/test", :read_ct => 1, :read_tou => 1 }
144
145         assert_redirected_to "/test"
146         assert_equal "Thanks for accepting the new contributor terms!", flash[:notice]
147
148         user.reload
149         assert user.terms_seen
150         assert_equal Time.now.utc, user.terms_agreed
151         assert_equal Time.now.utc, user.tou_agreed
152       end
153     end
154
155     def test_update_accept_previously_accepted
156       freeze_time do
157         user = create(:user, :terms_seen => true, :terms_agreed => Date.yesterday, :tou_agreed => Date.yesterday)
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     # Check that if you haven't seen the terms, and make a request that requires authentication,
173     # that your request is redirected to view the terms
174     def test_terms_not_seen_redirection
175       user = create(:user, :terms_seen => false, :terms_agreed => nil)
176       session_for(user)
177
178       get account_path
179       assert_redirected_to account_terms_path(:referer => account_path)
180     end
181   end
182 end