From: Anton Khorev Date: Fri, 1 Mar 2024 11:23:04 +0000 (+0300) Subject: Add links to reveal/hide redacted version data X-Git-Tag: live~747^2~1 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/81b431ac1117aa2d684834b8561d8df1e717dab4?ds=sidebyside;hp=-c Add links to reveal/hide redacted version data --- 81b431ac1117aa2d684834b8561d8df1e717dab4 diff --git a/app/views/old_nodes/show.html.erb b/app/views/old_nodes/show.html.erb index 90be6b7c9..3cf9828d8 100644 --- a/app/views/old_nodes/show.html.erb +++ b/app/views/old_nodes/show.html.erb @@ -5,11 +5,18 @@ <%= render :partial => "browse/node", :object => @feature %>
- <% unless @feature.redacted? %> + <%= link_to t("browse.view_details"), node_path(@feature.node_id) %> + <% if !@feature.redacted? %> + · <%= link_to t("browse.download_xml"), node_version_path(*@feature.id) %> + <% elsif current_user&.moderator? %> · + <% if !params[:show_redactions] %> + <%= link_to t("browse.view_redacted_data"), old_node_path(*@feature.id, :params => { :show_redactions => true }) %> + <% else %> + <%= link_to t("browse.view_redaction_message"), old_node_path(*@feature.id) %> + <% end %> <% end %> - <%= link_to t("browse.view_details"), node_path(@feature.node_id) %>
diff --git a/app/views/old_relations/show.html.erb b/app/views/old_relations/show.html.erb index 42e80e651..a0dfae250 100644 --- a/app/views/old_relations/show.html.erb +++ b/app/views/old_relations/show.html.erb @@ -5,11 +5,18 @@ <%= render :partial => "browse/relation", :object => @feature %>
- <% unless @feature.redacted? %> + <%= link_to t("browse.view_details"), relation_path(@feature.relation_id) %> + <% if !@feature.redacted? %> + · <%= link_to t("browse.download_xml"), relation_version_path(*@feature.id) %> + <% elsif current_user&.moderator? %> · + <% if !params[:show_redactions] %> + <%= link_to t("browse.view_redacted_data"), old_relation_path(*@feature.id, :params => { :show_redactions => true }) %> + <% else %> + <%= link_to t("browse.view_redaction_message"), old_relation_path(*@feature.id) %> + <% end %> <% end %> - <%= link_to t("browse.view_details"), relation_path(@feature.relation_id) %>
diff --git a/app/views/old_ways/show.html.erb b/app/views/old_ways/show.html.erb index b16c6b291..ecbc62469 100644 --- a/app/views/old_ways/show.html.erb +++ b/app/views/old_ways/show.html.erb @@ -5,11 +5,18 @@ <%= render :partial => "browse/way", :object => @feature %>
- <% unless @feature.redacted? %> + <%= link_to t("browse.view_details"), way_path(@feature.way_id) %> + <% if !@feature.redacted? %> + · <%= link_to t("browse.download_xml"), way_version_path(*@feature.id) %> + <% elsif current_user&.moderator? %> · + <% if !params[:show_redactions] %> + <%= link_to t("browse.view_redacted_data"), old_way_path(*@feature.id, :params => { :show_redactions => true }) %> + <% else %> + <%= link_to t("browse.view_redaction_message"), old_way_path(*@feature.id) %> + <% end %> <% end %> - <%= link_to t("browse.view_details"), way_path(@feature.way_id) %>
diff --git a/config/locales/en.yml b/config/locales/en.yml index 32f54387f..fcf9f90a8 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -332,6 +332,8 @@ en: view_history: "View History" view_unredacted_history: "View Unredacted History" view_details: "View Details" + view_redacted_data: "View Redacted Data" + view_redaction_message: "View Redaction Message" location: "Location:" common_details: coordinates_html: "%{latitude}, %{longitude}" diff --git a/test/controllers/old_nodes_controller_test.rb b/test/controllers/old_nodes_controller_test.rb index 880e5e1a7..a1232be76 100644 --- a/test/controllers/old_nodes_controller_test.rb +++ b/test/controllers/old_nodes_controller_test.rb @@ -19,6 +19,7 @@ class OldNodesControllerTest < ActionDispatch::IntegrationTest end assert_select ".secondary-actions a[href='#{node_version_path node, 1}']", :count => 1 assert_select ".secondary-actions a[href='#{node_path node}']", :count => 1 + assert_select ".secondary-actions a[href='#{old_node_path node, 1, :params => { :show_redactions => true }}']", :count => 0 assert_select ".secondary-actions a[href='#{node_history_path node}']", :count => 1 end @@ -49,35 +50,67 @@ class OldNodesControllerTest < ActionDispatch::IntegrationTest assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 1 end - def test_redacted + test "show unrevealed redacted versions to anonymous users" do node = create_redacted_node get old_node_path(node, 1) assert_response :success assert_template "old_nodes/show" assert_template :layout => "map" + assert_select "td", :text => "TOP SECRET", :count => 0 assert_select ".secondary-actions a[href='#{node_path node}']", :count => 1 + assert_select ".secondary-actions a[href='#{old_node_path node, 1, :params => { :show_redactions => true }}']", :count => 0 assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 0 assert_select ".secondary-actions a[href='#{node_version_path node, 1}']", :count => 0 end - test "don't show redacted versions to anonymous users" do + test "show unrevealed redacted versions to regular users" do + session_for(create(:user)) + node = create_redacted_node + get old_node_path(node, 1) + assert_response :success + assert_template "old_nodes/show" + assert_template :layout => "map" + assert_select "td", :text => "TOP SECRET", :count => 0 + assert_select ".secondary-actions a[href='#{node_path node}']", :count => 1 + assert_select ".secondary-actions a[href='#{old_node_path node, 1, :params => { :show_redactions => true }}']", :count => 0 + assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 0 + assert_select ".secondary-actions a[href='#{node_version_path node, 1}']", :count => 0 + end + + test "show unrevealed redacted versions to moderators" do + session_for(create(:moderator_user)) + node = create_redacted_node + get old_node_path(node, 1) + assert_response :success + assert_template "old_nodes/show" + assert_template :layout => "map" + assert_select "td", :text => "TOP SECRET", :count => 0 + assert_select ".secondary-actions a[href='#{node_path node}']", :count => 1 + assert_select ".secondary-actions a[href='#{old_node_path node, 1, :params => { :show_redactions => true }}']", :count => 1 + assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 0 + assert_select ".secondary-actions a[href='#{node_version_path node, 1}']", :count => 0 + end + + test "don't reveal redacted versions to anonymous users" do node = create_redacted_node get old_node_path(node, 1, :params => { :show_redactions => true }) assert_response :redirect end - test "don't show redacted versions to regular users" do + test "don't reveal redacted versions to regular users" do session_for(create(:user)) node = create_redacted_node get old_node_path(node, 1, :params => { :show_redactions => true }) assert_response :redirect end - test "show redacted versions to moderators" do + test "reveal redacted versions to moderators" do session_for(create(:moderator_user)) node = create_redacted_node get old_node_path(node, 1, :params => { :show_redactions => true }) assert_response :success + assert_select "td", :text => "TOP SECRET", :count => 1 + assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 1 end def test_not_found @@ -91,8 +124,9 @@ class OldNodesControllerTest < ActionDispatch::IntegrationTest private def create_redacted_node - create(:node, :with_history, :deleted, :version => 2) do |node| + create(:node, :with_history, :version => 2) do |node| node_v1 = node.old_nodes.find_by(:version => 1) + create(:old_node_tag, :old_node => node_v1, :k => "name", :v => "TOP SECRET") node_v1.redact!(create(:redaction)) end end diff --git a/test/controllers/old_relations_controller_test.rb b/test/controllers/old_relations_controller_test.rb index 534a1304c..6eb6db9dd 100644 --- a/test/controllers/old_relations_controller_test.rb +++ b/test/controllers/old_relations_controller_test.rb @@ -19,6 +19,7 @@ class OldRelationsControllerTest < ActionDispatch::IntegrationTest end assert_select ".secondary-actions a[href='#{relation_version_path relation, 1}']", :count => 1 assert_select ".secondary-actions a[href='#{relation_path relation}']", :count => 1 + assert_select ".secondary-actions a[href='#{old_relation_path relation, 1, :params => { :show_redactions => true }}']", :count => 0 assert_select ".secondary-actions a[href='#{relation_history_path relation}']", :count => 1 end @@ -58,35 +59,67 @@ class OldRelationsControllerTest < ActionDispatch::IntegrationTest assert_template :layout => "map" end - def test_redacted + test "show unrevealed redacted versions to anonymous users" do relation = create_redacted_relation get old_relation_path(relation, 1) assert_response :success assert_template "old_relations/show" assert_template :layout => "map" + assert_select "td", :text => "TOP SECRET", :count => 0 assert_select ".secondary-actions a[href='#{relation_path relation}']", :count => 1 + assert_select ".secondary-actions a[href='#{old_relation_path relation, 1, :params => { :show_redactions => true }}']", :count => 0 assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 0 assert_select ".secondary-actions a[href='#{relation_version_path relation, 1}']", :count => 0 end - test "don't show redacted versions to anonymous users" do + test "show unrevealed redacted versions to regular users" do + session_for(create(:user)) + relation = create_redacted_relation + get old_relation_path(relation, 1) + assert_response :success + assert_template "old_relations/show" + assert_template :layout => "map" + assert_select "td", :text => "TOP SECRET", :count => 0 + assert_select ".secondary-actions a[href='#{relation_path relation}']", :count => 1 + assert_select ".secondary-actions a[href='#{old_relation_path relation, 1, :params => { :show_redactions => true }}']", :count => 0 + assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 0 + assert_select ".secondary-actions a[href='#{relation_version_path relation, 1}']", :count => 0 + end + + test "show unrevealed redacted versions to moderators" do + session_for(create(:moderator_user)) + relation = create_redacted_relation + get old_relation_path(relation, 1) + assert_response :success + assert_template "old_relations/show" + assert_template :layout => "map" + assert_select "td", :text => "TOP SECRET", :count => 0 + assert_select ".secondary-actions a[href='#{relation_path relation}']", :count => 1 + assert_select ".secondary-actions a[href='#{old_relation_path relation, 1, :params => { :show_redactions => true }}']", :count => 1 + assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 0 + assert_select ".secondary-actions a[href='#{relation_version_path relation, 1}']", :count => 0 + end + + test "don't reveal redacted versions to anonymous users" do relation = create_redacted_relation get old_relation_path(relation, 1, :params => { :show_redactions => true }) assert_response :redirect end - test "don't show redacted versions to regular users" do + test "don't reveal redacted versions to regular users" do session_for(create(:user)) relation = create_redacted_relation get old_relation_path(relation, 1, :params => { :show_redactions => true }) assert_response :redirect end - test "show redacted versions to moderators" do + test "reveal redacted versions to moderators" do session_for(create(:moderator_user)) relation = create_redacted_relation get old_relation_path(relation, 1, :params => { :show_redactions => true }) assert_response :success + assert_select "td", :text => "TOP SECRET", :count => 1 + assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 1 end def test_not_found @@ -100,8 +133,9 @@ class OldRelationsControllerTest < ActionDispatch::IntegrationTest private def create_redacted_relation - create(:relation, :with_history, :deleted, :version => 2) do |relation| + create(:relation, :with_history, :version => 2) do |relation| relation_v1 = relation.old_relations.find_by(:version => 1) + create(:old_relation_tag, :old_relation => relation_v1, :k => "name", :v => "TOP SECRET") relation_v1.redact!(create(:redaction)) end end diff --git a/test/controllers/old_ways_controller_test.rb b/test/controllers/old_ways_controller_test.rb index b9632ed77..d28a23ef5 100644 --- a/test/controllers/old_ways_controller_test.rb +++ b/test/controllers/old_ways_controller_test.rb @@ -19,6 +19,7 @@ class OldWaysControllerTest < ActionDispatch::IntegrationTest end assert_select ".secondary-actions a[href='#{way_version_path way, 1}']", :count => 1 assert_select ".secondary-actions a[href='#{way_path way}']", :count => 1 + assert_select ".secondary-actions a[href='#{old_way_path way, 1, :params => { :show_redactions => true }}']", :count => 0 assert_select ".secondary-actions a[href='#{way_history_path way}']", :count => 1 end @@ -63,35 +64,67 @@ class OldWaysControllerTest < ActionDispatch::IntegrationTest assert_template :layout => "map" end - def test_redacted + test "show unrevealed redacted versions to anonymous users" do way = create_redacted_way get old_way_path(way, 1) assert_response :success assert_template "old_ways/show" assert_template :layout => "map" + assert_select "td", :text => "TOP SECRET", :count => 0 assert_select ".secondary-actions a[href='#{way_path way}']", :count => 1 + assert_select ".secondary-actions a[href='#{old_way_path way, 1, :params => { :show_redactions => true }}']", :count => 0 assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 0 assert_select ".secondary-actions a[href='#{way_version_path way, 1}']", :count => 0 end - test "don't show redacted versions to anonymous users" do + test "show unrevealed redacted versions to regular users" do + session_for(create(:user)) + way = create_redacted_way + get old_way_path(way, 1) + assert_response :success + assert_template "old_ways/show" + assert_template :layout => "map" + assert_select "td", :text => "TOP SECRET", :count => 0 + assert_select ".secondary-actions a[href='#{way_path way}']", :count => 1 + assert_select ".secondary-actions a[href='#{old_way_path way, 1, :params => { :show_redactions => true }}']", :count => 0 + assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 0 + assert_select ".secondary-actions a[href='#{way_version_path way, 1}']", :count => 0 + end + + test "show unrevealed redacted versions to moderators" do + session_for(create(:moderator_user)) + way = create_redacted_way + get old_way_path(way, 1) + assert_response :success + assert_template "old_ways/show" + assert_template :layout => "map" + assert_select "td", :text => "TOP SECRET", :count => 0 + assert_select ".secondary-actions a[href='#{way_path way}']", :count => 1 + assert_select ".secondary-actions a[href='#{old_way_path way, 1, :params => { :show_redactions => true }}']", :count => 1 + assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 0 + assert_select ".secondary-actions a[href='#{way_version_path way, 1}']", :count => 0 + end + + test "don't reveal redacted versions to anonymous users" do way = create_redacted_way get old_way_path(way, 1, :params => { :show_redactions => true }) assert_response :redirect end - test "don't show redacted versions to regular users" do + test "don't reveal redacted versions to regular users" do session_for(create(:user)) way = create_redacted_way get old_way_path(way, 1, :params => { :show_redactions => true }) assert_response :redirect end - test "show redacted versions to moderators" do + test "reveal redacted versions to moderators" do session_for(create(:moderator_user)) way = create_redacted_way get old_way_path(way, 1, :params => { :show_redactions => true }) assert_response :success + assert_select "td", :text => "TOP SECRET", :count => 1 + assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 1 end def test_not_found @@ -105,8 +138,9 @@ class OldWaysControllerTest < ActionDispatch::IntegrationTest private def create_redacted_way - create(:way, :with_history, :deleted, :version => 2) do |way| + create(:way, :with_history, :version => 2) do |way| way_v1 = way.old_ways.find_by(:version => 1) + create(:old_way_tag, :old_way => way_v1, :k => "name", :v => "TOP SECRET") way_v1.redact!(create(:redaction)) end end