]> git.openstreetmap.org Git - rails.git/blob - test/controllers/traces/legacy_visibilities_controller_test.rb
Merge pull request #7373 from kmpoppe/note-moderation-zone-message
[rails.git] / test / controllers / traces / legacy_visibilities_controller_test.rb
1 # frozen_string_literal: true
2
3 require "test_helper"
4
5 module Traces
6   class LegacyVisibilitiesControllerTest < ActionDispatch::IntegrationTest
7     ##
8     # test all routes which lead to this controller
9     def test_routes
10       assert_routing(
11         { :path => "/traces/mine/legacy_visibility/edit", :method => :get },
12         { :controller => "traces/legacy_visibilities", :action => "edit" }
13       )
14       assert_routing(
15         { :path => "/traces/mine/legacy_visibility", :method => :patch },
16         { :controller => "traces/legacy_visibilities", :action => "update" }
17       )
18     end
19
20     def test_edit_requires_login
21       get edit_traces_legacy_visibility_path
22       assert_redirected_to login_path(:referer => edit_traces_legacy_visibility_path)
23     end
24
25     def test_edit_links_back_to_the_trace_lists
26       user = create(:user)
27
28       session_for(user)
29       get edit_traces_legacy_visibility_path
30       assert_response :success
31       assert_select "a[href=?]", traces_path
32       assert_select "a[href=?]", traces_mine_path
33     end
34
35     def test_edit_shows_only_own_legacy_traces
36       user = create(:user)
37       public_trace = create(:trace, :without_validations, :visibility => "public", :user => user)
38       private_trace = create(:trace, :without_validations, :visibility => "private", :user => user)
39       trackable_trace = create(:trace, :visibility => "trackable", :user => user)
40       identifiable_trace = create(:trace, :visibility => "identifiable", :user => user)
41       other_users_trace = create(:trace, :without_validations, :visibility => "public")
42
43       session_for(user)
44       get edit_traces_legacy_visibility_path
45       assert_response :success
46       assert_select "table#trace_list tbody tr", :count => 2
47       assert_select "table#trace_list tbody tr a", public_trace.name
48       assert_select "table#trace_list tbody tr a", private_trace.name
49       assert_select "table#trace_list tbody tr a", :text => trackable_trace.name, :count => 0
50       assert_select "table#trace_list tbody tr a", :text => identifiable_trace.name, :count => 0
51       assert_select "table#trace_list tbody tr a", :text => other_users_trace.name, :count => 0
52     end
53
54     def test_edit_filters_by_visibility_and_date
55       user = create(:user)
56       old_public = create(:trace, :without_validations, :visibility => "public", :user => user, :timestamp => Date.new(2015, 6, 1))
57       create(:trace, :without_validations, :visibility => "private", :user => user, :timestamp => Date.new(2015, 6, 1))
58       create(:trace, :without_validations, :visibility => "public", :user => user, :timestamp => Date.new(2022, 6, 1))
59
60       session_for(user)
61       get edit_traces_legacy_visibility_path(:visibility => "public", :to => "2020-01-01")
62       assert_response :success
63       assert_select "table#trace_list tbody tr", :count => 1
64       assert_select "table#trace_list tbody tr a", old_public.name
65     end
66
67     def test_edit_date_range_includes_both_ends
68       user = create(:user)
69       trace = create(:trace, :without_validations, :visibility => "public", :user => user, :timestamp => Time.utc(2020, 1, 1, 23, 30))
70
71       session_for(user)
72       get edit_traces_legacy_visibility_path(:from => "2020-01-01", :to => "2020-01-01")
73       assert_response :success
74       assert_select "table#trace_list tbody tr", :count => 1
75       assert_select "table#trace_list tbody tr a", trace.name
76     end
77
78     def test_edit_paged
79       user = create(:user)
80       # one trace more than fits on a single page
81       create_list(:trace, 20, :without_validations, :visibility => "public", :user => user)
82       newest = create(:trace, :without_validations, :visibility => "public", :user => user)
83       ids = user.traces.order(:id => :desc).pluck(:id)
84
85       session_for(user)
86       get edit_traces_legacy_visibility_path
87       assert_response :success
88       assert_select "table#trace_list tbody tr", :count => 20
89       assert_select "table#trace_list tbody tr a", newest.name
90       assert_select "a", :text => "Older Traces", :count => 2
91       assert_select "a", :text => "Newer Traces", :count => 0
92
93       get edit_traces_legacy_visibility_path(:before => ids[19])
94       assert_response :success
95       assert_select "table#trace_list tbody tr", :count => 1
96       assert_select "a", :text => "Newer Traces", :count => 2
97       assert_select "a", :text => "Older Traces", :count => 0
98     end
99
100     def test_edit_with_no_legacy_traces
101       user = create(:user)
102       create(:trace, :visibility => "trackable", :user => user)
103
104       session_for(user)
105       get edit_traces_legacy_visibility_path
106       assert_response :success
107       assert_select "table#trace_list", :count => 0
108     end
109
110     def test_edit_disabled
111       with_settings(:traces_disabled => true) do
112         get edit_traces_legacy_visibility_path
113         assert_response :not_found
114       end
115     end
116
117     def test_update_requires_login
118       patch traces_legacy_visibility_path, :params => { :new_visibility => "identifiable" }
119       assert_response :forbidden
120     end
121
122     def test_update_changes_matching_traces_only
123       user = create(:user)
124       old_public = create(:trace, :without_validations, :visibility => "public", :user => user, :timestamp => Date.new(2015, 6, 1))
125       old_private = create(:trace, :without_validations, :visibility => "private", :user => user, :timestamp => Date.new(2019, 6, 1))
126       recent_public = create(:trace, :without_validations, :visibility => "public", :user => user, :timestamp => Date.new(2022, 6, 1))
127       other_users_trace = create(:trace, :without_validations, :visibility => "public", :timestamp => Date.new(2015, 6, 1))
128
129       session_for(user)
130       patch traces_legacy_visibility_path, :params => { :visibility => "public", :to => "2020-01-01", :new_visibility => "identifiable" }
131       assert_redirected_to edit_traces_legacy_visibility_path(:visibility => "public", :from => nil, :to => "2020-01-01")
132       assert_equal "Changed the visibility of 1 trace.", flash[:notice]
133
134       assert_equal "identifiable", old_public.reload.visibility
135       assert_equal "private", old_private.reload.visibility
136       assert_equal "public", recent_public.reload.visibility
137       assert_equal "public", other_users_trace.reload.visibility
138     end
139
140     def test_update_counts_every_matching_trace
141       user = create(:user)
142       create_list(:trace, 3, :without_validations, :visibility => "public", :user => user)
143
144       session_for(user)
145       patch traces_legacy_visibility_path, :params => { :new_visibility => "trackable" }
146       assert_equal "Changed the visibility of 3 traces.", flash[:notice]
147       assert_equal 3, user.traces.where(:visibility => "trackable").count
148     end
149
150     def test_update_rejects_legacy_visibility
151       user = create(:user)
152       trace = create(:trace, :without_validations, :visibility => "public", :user => user)
153
154       session_for(user)
155       patch traces_legacy_visibility_path, :params => { :new_visibility => "private" }
156       assert_redirected_to edit_traces_legacy_visibility_path(:visibility => nil, :from => nil, :to => nil)
157       assert_equal "public", trace.reload.visibility
158
159       patch traces_legacy_visibility_path, :params => { :new_visibility => "" }
160       assert_redirected_to edit_traces_legacy_visibility_path(:visibility => nil, :from => nil, :to => nil)
161       assert_equal "public", trace.reload.visibility
162
163       patch traces_legacy_visibility_path
164       assert_redirected_to edit_traces_legacy_visibility_path(:visibility => nil, :from => nil, :to => nil)
165       assert_equal "public", trace.reload.visibility
166     end
167
168     def test_update_disabled
169       with_settings(:traces_disabled => true) do
170         patch traces_legacy_visibility_path, :params => { :new_visibility => "identifiable" }
171         assert_response :not_found
172       end
173     end
174   end
175 end