1 # frozen_string_literal: true
6 class LegacyVisibilitiesControllerTest < ActionDispatch::IntegrationTest
8 # test all routes which lead to this controller
11 { :path => "/traces/mine/legacy_visibility/edit", :method => :get },
12 { :controller => "traces/legacy_visibilities", :action => "edit" }
15 { :path => "/traces/mine/legacy_visibility", :method => :patch },
16 { :controller => "traces/legacy_visibilities", :action => "update" }
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)
25 def test_edit_links_back_to_the_trace_lists
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
35 def test_edit_shows_only_own_legacy_traces
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")
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
54 def test_edit_filters_by_visibility_and_date
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))
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
67 def test_edit_date_range_includes_both_ends
69 trace = create(:trace, :without_validations, :visibility => "public", :user => user, :timestamp => Time.utc(2020, 1, 1, 23, 30))
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
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)
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
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
100 def test_edit_with_no_legacy_traces
102 create(:trace, :visibility => "trackable", :user => user)
105 get edit_traces_legacy_visibility_path
106 assert_response :success
107 assert_select "table#trace_list", :count => 0
110 def test_edit_disabled
111 with_settings(:traces_disabled => true) do
112 get edit_traces_legacy_visibility_path
113 assert_response :not_found
117 def test_update_requires_login
118 patch traces_legacy_visibility_path, :params => { :new_visibility => "identifiable" }
119 assert_response :forbidden
122 def test_update_changes_matching_traces_only
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))
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]
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
140 def test_update_counts_every_matching_trace
142 create_list(:trace, 3, :without_validations, :visibility => "public", :user => 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
150 def test_update_rejects_legacy_visibility
152 trace = create(:trace, :without_validations, :visibility => "public", :user => 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
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
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
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