From c1b5ae0aa08be555588de8098b5ea8319f4c7925 Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Sat, 10 Feb 2024 20:33:33 +0300 Subject: [PATCH 1/5] Move changeset show action to changesets controller --- app/abilities/ability.rb | 5 +- app/controllers/browse_controller.rb | 19 ----- app/controllers/changesets_controller.rb | 23 ++++- .../changeset_comments/_comments.rss.builder | 4 +- .../_paging_nav.html.erb | 0 .../show.html.erb} | 2 +- app/views/dashboards/_contact.html.erb | 4 +- config/locales/en.yml | 17 ++-- config/routes.rb | 2 +- test/controllers/browse_controller_test.rb | 85 +++---------------- .../controllers/changesets_controller_test.rb | 35 ++++++++ test/controllers/site_controller_test.rb | 2 +- test/test_helper.rb | 36 ++++++++ 13 files changed, 120 insertions(+), 114 deletions(-) rename app/views/{browse => changesets}/_paging_nav.html.erb (100%) rename app/views/{browse/changeset.html.erb => changesets/show.html.erb} (98%) diff --git a/app/abilities/ability.rb b/app/abilities/ability.rb index 5e0e835d4..ef4c0a778 100644 --- a/app/abilities/ability.rb +++ b/app/abilities/ability.rb @@ -4,8 +4,7 @@ class Ability include CanCan::Ability def initialize(user) - can [:relation, :relation_history, :way, :way_history, :node, :node_history, - :changeset, :query], :browse + can [:relation, :relation_history, :way, :way_history, :node, :node_history, :query], :browse can [:show], OldNode can [:show], OldWay can [:show], OldRelation @@ -17,7 +16,7 @@ class Ability can [:token, :request_token, :access_token, :test_request], :oauth if Settings.status != "database_offline" - can [:index, :feed], Changeset + can [:index, :feed, :show], Changeset can :index, ChangesetComment can [:confirm, :confirm_resend, :confirm_email], :confirmation can [:index, :rss, :show, :comments], DiaryEntry diff --git a/app/controllers/browse_controller.rb b/app/controllers/browse_controller.rb index 88871a9e1..82cbe6f98 100644 --- a/app/controllers/browse_controller.rb +++ b/app/controllers/browse_controller.rb @@ -57,24 +57,5 @@ class BrowseController < ApplicationController render :action => "not_found", :status => :not_found end - def changeset - @type = "changeset" - @changeset = Changeset.find(params[:id]) - @comments = if current_user&.moderator? - @changeset.comments.unscope(:where => :visible).includes(:author) - else - @changeset.comments.includes(:author) - end - @node_pages, @nodes = paginate(:old_nodes, :conditions => { :changeset_id => @changeset.id }, :per_page => 20, :parameter => "node_page") - @way_pages, @ways = paginate(:old_ways, :conditions => { :changeset_id => @changeset.id }, :per_page => 20, :parameter => "way_page") - @relation_pages, @relations = paginate(:old_relations, :conditions => { :changeset_id => @changeset.id }, :per_page => 20, :parameter => "relation_page") - if @changeset.user.active? && @changeset.user.data_public? - @next_by_user = @changeset.user.changesets.where("id > ?", @changeset.id).reorder(:id => :asc).first - @prev_by_user = @changeset.user.changesets.where("id < ?", @changeset.id).reorder(:id => :desc).first - end - rescue ActiveRecord::RecordNotFound - render :action => "not_found", :status => :not_found - end - def query; end end diff --git a/app/controllers/changesets_controller.rb b/app/controllers/changesets_controller.rb index 5eb14629a..613a3ee2a 100644 --- a/app/controllers/changesets_controller.rb +++ b/app/controllers/changesets_controller.rb @@ -8,7 +8,8 @@ class ChangesetsController < ApplicationController before_action :authorize_web before_action :set_locale - before_action -> { check_database_readable(:need_api => true) }, :only => [:index, :feed] + before_action -> { check_database_readable(:need_api => true) }, :only => [:index, :feed, :show] + before_action :require_oauth, :only => :show before_action :check_database_writable, :only => [:subscribe, :unsubscribe] authorize_resource @@ -75,6 +76,26 @@ class ChangesetsController < ApplicationController index end + def show + @type = "changeset" + @changeset = Changeset.find(params[:id]) + @comments = if current_user&.moderator? + @changeset.comments.unscope(:where => :visible).includes(:author) + else + @changeset.comments.includes(:author) + end + @node_pages, @nodes = paginate(:old_nodes, :conditions => { :changeset_id => @changeset.id }, :per_page => 20, :parameter => "node_page") + @way_pages, @ways = paginate(:old_ways, :conditions => { :changeset_id => @changeset.id }, :per_page => 20, :parameter => "way_page") + @relation_pages, @relations = paginate(:old_relations, :conditions => { :changeset_id => @changeset.id }, :per_page => 20, :parameter => "relation_page") + if @changeset.user.active? && @changeset.user.data_public? + @next_by_user = @changeset.user.changesets.where("id > ?", @changeset.id).reorder(:id => :asc).first + @prev_by_user = @changeset.user.changesets.where("id < ?", @changeset.id).reorder(:id => :desc).first + end + render :layout => map_layout + rescue ActiveRecord::RecordNotFound + render :template => "browse/not_found", :status => :not_found, :layout => map_layout + end + ## # subscribe to a changeset def subscribe diff --git a/app/views/changeset_comments/_comments.rss.builder b/app/views/changeset_comments/_comments.rss.builder index 59973965f..b1344b488 100644 --- a/app/views/changeset_comments/_comments.rss.builder +++ b/app/views/changeset_comments/_comments.rss.builder @@ -2,8 +2,8 @@ comments.each do |comment| xml.item do xml.title t(".comment", :author => comment.author.display_name, :changeset_id => comment.changeset.id.to_s) - xml.link url_for(:controller => "browse", :action => "changeset", :id => comment.changeset.id, :anchor => "c#{comment.id}", :only_path => false) - xml.guid url_for(:controller => "browse", :action => "changeset", :id => comment.changeset.id, :anchor => "c#{comment.id}", :only_path => false) + xml.link changeset_url(comment.changeset, :anchor => "c#{comment.id}") + xml.guid changeset_url(comment.changeset, :anchor => "c#{comment.id}") xml.description do xml.cdata! render(:partial => "comment", :object => comment, :formats => [:html]) diff --git a/app/views/browse/_paging_nav.html.erb b/app/views/changesets/_paging_nav.html.erb similarity index 100% rename from app/views/browse/_paging_nav.html.erb rename to app/views/changesets/_paging_nav.html.erb diff --git a/app/views/browse/changeset.html.erb b/app/views/changesets/show.html.erb similarity index 98% rename from app/views/browse/changeset.html.erb rename to app/views/changesets/show.html.erb index db6b9c966..57a3fdb56 100644 --- a/app/views/browse/changeset.html.erb +++ b/app/views/changesets/show.html.erb @@ -8,7 +8,7 @@

<%= changeset_details(@changeset) %>

- <%= render :partial => "tag_details", :object => @changeset.tags.except("comment") %> + <%= render :partial => "browse/tag_details", :object => @changeset.tags.except("comment") %>
diff --git a/app/views/dashboards/_contact.html.erb b/app/views/dashboards/_contact.html.erb index 7e78a6895..b789f721b 100644 --- a/app/views/dashboards/_contact.html.erb +++ b/app/views/dashboards/_contact.html.erb @@ -25,9 +25,7 @@ <% if changeset %> <%= t(".latest_edit_html", :ago => friendly_date_ago(changeset.created_at)) %> <% comment = changeset.tags["comment"].to_s == "" ? t("browse.no_comment") : changeset.tags["comment"] %> - <%= link_to(comment, - { :controller => "browse", :action => "changeset", :id => changeset.id }, - { :title => t("changesets.changeset.view_changeset_details") }) %> + <%= link_to comment, changeset_path(changeset), :title => t("changesets.changeset.view_changeset_details") %> <% else %> <%= t "changesets.changeset.no_edits" %> <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 2f1e4d016..616e350d3 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -334,7 +334,6 @@ en: common_details: coordinates_html: "%{latitude}, %{longitude}" changeset: - title: "Changeset: %{id}" belongs_to: "Author" node: "Nodes (%{count})" node_paginated: "Nodes (%{x}-%{y} of %{count})" @@ -342,13 +341,6 @@ en: way_paginated: "Ways (%{x}-%{y} of %{count})" relation: "Relations (%{count})" relation_paginated: "Relations (%{x}-%{y} of %{count})" - hidden_comment_by_html: "Hidden comment from %{user} %{time_ago}" - comment_by_html: "Comment from %{user} %{time_ago}" - changesetxml: "Changeset XML" - osmchangexml: "osmChange XML" - join_discussion: "Log in to join the discussion" - discussion: Discussion - still_open: "Changeset still open - discussion will open once the changeset is closed." node: title_html: "Node: %{name}" history_title_html: "Node History: %{name}" @@ -477,6 +469,15 @@ en: title: "No such changeset" heading: "No entry with the id: %{id}" body: "Sorry, there is no changeset with the id %{id}. Please check your spelling, or maybe the link you clicked is wrong." + show: + title: "Changeset: %{id}" + discussion: Discussion + join_discussion: "Log in to join the discussion" + still_open: "Changeset still open - discussion will open once the changeset is closed." + comment_by_html: "Comment from %{user} %{time_ago}" + hidden_comment_by_html: "Hidden comment from %{user} %{time_ago}" + changesetxml: "Changeset XML" + osmchangexml: "osmChange XML" timeout: sorry: "Sorry, the list of changesets you requested took too long to retrieve." changeset_comments: diff --git a/config/routes.rb b/config/routes.rb index af5730d21..98184e0e1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -118,7 +118,7 @@ OpenStreetMap::Application.routes.draw do get "/relation/:id" => "browse#relation", :id => /\d+/, :as => :relation get "/relation/:id/history" => "browse#relation_history", :id => /\d+/, :as => :relation_history resources :old_relations, :path => "/relation/:id/history", :id => /\d+/, :version => /\d+/, :param => :version, :only => :show - get "/changeset/:id" => "browse#changeset", :as => :changeset, :id => /\d+/ + resources :changesets, :path => "changeset", :id => /\d+/, :only => :show get "/changeset/:id/comments/feed" => "changeset_comments#index", :as => :changeset_comments_feed, :id => /\d*/, :defaults => { :format => "rss" } resources :notes, :path => "note", :only => [:show, :new] diff --git a/test/controllers/browse_controller_test.rb b/test/controllers/browse_controller_test.rb index 2bb743636..e74345f6a 100644 --- a/test/controllers/browse_controller_test.rb +++ b/test/controllers/browse_controller_test.rb @@ -28,10 +28,6 @@ class BrowseControllerTest < ActionDispatch::IntegrationTest { :path => "/relation/1/history", :method => :get }, { :controller => "browse", :action => "relation_history", :id => "1" } ) - assert_routing( - { :path => "/changeset/1", :method => :get }, - { :controller => "browse", :action => "changeset", :id => "1" } - ) assert_routing( { :path => "/query", :method => :get }, { :controller => "browse", :action => "query" } @@ -40,7 +36,7 @@ class BrowseControllerTest < ActionDispatch::IntegrationTest def test_read_relation relation = create(:relation) - browse_check :relation_path, relation.id, "browse/feature" + sidebar_browse_check :relation_path, relation.id, "browse/feature" assert_select "h4", /^Version/ do assert_select "a[href='#{old_relation_path relation, 1}']", :text => "1", :count => 1 end @@ -51,7 +47,7 @@ class BrowseControllerTest < ActionDispatch::IntegrationTest def test_multiple_version_relation_links relation = create(:relation, :with_history, :version => 2) - browse_check :relation_path, relation.id, "browse/feature" + sidebar_browse_check :relation_path, relation.id, "browse/feature" assert_select ".secondary-actions a[href='#{relation_history_path relation}']", :count => 1 assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 1 assert_select ".secondary-actions a[href='#{old_relation_path relation, 2}']", :count => 1 @@ -59,7 +55,7 @@ class BrowseControllerTest < ActionDispatch::IntegrationTest def test_read_relation_history relation = create(:relation, :with_history) - browse_check :relation_history_path, relation.id, "browse/history" + sidebar_browse_check :relation_history_path, relation.id, "browse/history" assert_select "h4", /^Version/ do assert_select "a[href='#{old_relation_path relation, 1}']", :text => "1", :count => 1 end @@ -67,7 +63,7 @@ class BrowseControllerTest < ActionDispatch::IntegrationTest def test_read_way way = create(:way) - browse_check :way_path, way.id, "browse/feature" + sidebar_browse_check :way_path, way.id, "browse/feature" assert_select "h4", /^Version/ do assert_select "a[href='#{old_way_path way, 1}']", :text => "1", :count => 1 end @@ -78,7 +74,7 @@ class BrowseControllerTest < ActionDispatch::IntegrationTest def test_multiple_version_way_links way = create(:way, :with_history, :version => 2) - browse_check :way_path, way.id, "browse/feature" + sidebar_browse_check :way_path, way.id, "browse/feature" assert_select ".secondary-actions a[href='#{way_history_path way}']", :count => 1 assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 1 assert_select ".secondary-actions a[href='#{old_way_path way, 2}']", :count => 1 @@ -86,7 +82,7 @@ class BrowseControllerTest < ActionDispatch::IntegrationTest def test_read_way_history way = create(:way, :with_history) - browse_check :way_history_path, way.id, "browse/history" + sidebar_browse_check :way_history_path, way.id, "browse/history" assert_select "h4", /^Version/ do assert_select "a[href='#{old_way_path way, 1}']", :text => "1", :count => 1 end @@ -94,7 +90,7 @@ class BrowseControllerTest < ActionDispatch::IntegrationTest def test_read_node node = create(:node) - browse_check :node_path, node.id, "browse/feature" + sidebar_browse_check :node_path, node.id, "browse/feature" assert_select "h4", /^Version/ do assert_select "a[href='#{old_node_path node, 1}']", :text => "1", :count => 1 end @@ -105,7 +101,7 @@ class BrowseControllerTest < ActionDispatch::IntegrationTest def test_multiple_version_node_links node = create(:node, :with_history, :version => 2) - browse_check :node_path, node.id, "browse/feature" + sidebar_browse_check :node_path, node.id, "browse/feature" assert_select ".secondary-actions a[href='#{node_history_path node}']", :count => 1 assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 1 assert_select ".secondary-actions a[href='#{old_node_path node, 2}']", :count => 1 @@ -113,7 +109,7 @@ class BrowseControllerTest < ActionDispatch::IntegrationTest def test_read_deleted_node node = create(:node, :visible => false) - browse_check :node_path, node.id, "browse/feature" + sidebar_browse_check :node_path, node.id, "browse/feature" assert_select "h4", /^Version/ do assert_select "a[href='#{old_node_path node, 1}']", :text => "1", :count => 1 end @@ -122,35 +118,12 @@ class BrowseControllerTest < ActionDispatch::IntegrationTest def test_read_node_history node = create(:node, :with_history) - browse_check :node_history_path, node.id, "browse/history" + sidebar_browse_check :node_history_path, node.id, "browse/history" assert_select "h4", /^Version/ do assert_select "a[href='#{old_node_path node, 1}']", :text => "1", :count => 1 end end - def test_read_changeset - user = create(:user) - changeset = create(:changeset, :user => user) - create(:changeset, :user => user) - browse_check :changeset_path, changeset.id, "browse/changeset" - end - - def test_read_private_changeset - user = create(:user) - changeset = create(:changeset, :user => create(:user, :data_public => false)) - create(:changeset, :user => user) - browse_check :changeset_path, changeset.id, "browse/changeset" - end - - def test_read_changeset_element_links - changeset = create(:changeset) - node = create(:node, :with_history, :changeset => changeset) - - browse_check :changeset_path, changeset.id, "browse/changeset" - assert_dom "a[href='#{node_path node}']", :count => 1 - assert_dom "a[href='#{old_node_path node, 1}']", :count => 1 - end - ## # Methods to check redaction. # @@ -234,42 +207,4 @@ class BrowseControllerTest < ActionDispatch::IntegrationTest assert_response :success assert_template "browse/query" end - - private - - # This is a convenience method for most of the above checks - # First we check that when we don't have an id, it will correctly return a 404 - # then we check that we get the correct 404 when a non-existant id is passed - # then we check that it will get a successful response, when we do pass an id - def browse_check(path, id, template) - path_method = method(path) - - assert_raise ActionController::UrlGenerationError do - get path_method.call - end - - assert_raise ActionController::UrlGenerationError do - get path_method.call(:id => -10) # we won't have an id that's negative - end - - get path_method.call(:id => 0) - assert_response :not_found - assert_template "browse/not_found" - assert_template :layout => "map" - - get path_method.call(:id => 0), :xhr => true - assert_response :not_found - assert_template "browse/not_found" - assert_template :layout => "xhr" - - get path_method.call(:id => id) - assert_response :success - assert_template template - assert_template :layout => "map" - - get path_method.call(:id => id), :xhr => true - assert_response :success - assert_template template - assert_template :layout => "xhr" - end end diff --git a/test/controllers/changesets_controller_test.rb b/test/controllers/changesets_controller_test.rb index a0747a0cd..14aa743b6 100644 --- a/test/controllers/changesets_controller_test.rb +++ b/test/controllers/changesets_controller_test.rb @@ -4,6 +4,10 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest ## # test all routes which lead to this controller def test_routes + assert_routing( + { :path => "/changeset/1", :method => :get }, + { :controller => "changesets", :action => "show", :id => "1" } + ) assert_routing( { :path => "/user/name/history", :method => :get }, { :controller => "changesets", :action => "index", :display_name => "name" } @@ -252,6 +256,37 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest assert_response :success end + def test_show + changeset = create(:changeset) + create(:changeset_tag, :changeset => changeset, :k => "comment", :v => "tested-changeset-comment") + commenting_user = create(:user) + changeset_comment = create(:changeset_comment, :changeset => changeset, :author => commenting_user, :body => "Unwanted comment") + + sidebar_browse_check :changeset_path, changeset.id, "changesets/show" + assert_dom "h2", :text => "Changeset: #{changeset.id}" + assert_dom "p", :text => "tested-changeset-comment" + assert_dom "li#c#{changeset_comment.id}" do + assert_dom "> small", :text => /^Comment from #{commenting_user.display_name}/ + end + end + + def test_show_private_changeset + user = create(:user) + changeset = create(:changeset, :user => create(:user, :data_public => false)) + create(:changeset, :user => user) + + sidebar_browse_check :changeset_path, changeset.id, "changesets/show" + end + + def test_show_element_links + changeset = create(:changeset) + node = create(:node, :with_history, :changeset => changeset) + + sidebar_browse_check :changeset_path, changeset.id, "changesets/show" + assert_dom "a[href='#{node_path node}']", :count => 1 + assert_dom "a[href='#{old_node_path node, 1}']", :count => 1 + end + ## # This should display the last 20 non-empty changesets def test_feed diff --git a/test/controllers/site_controller_test.rb b/test/controllers/site_controller_test.rb index cc155155f..eff9ce093 100644 --- a/test/controllers/site_controller_test.rb +++ b/test/controllers/site_controller_test.rb @@ -147,7 +147,7 @@ class SiteControllerTest < ActionDispatch::IntegrationTest get permalink_path(:code => "wBz3--", :changeset => 4) assert_response :redirect - assert_redirected_to :controller => :browse, :action => :changeset, :id => 4, :anchor => "map=3/4.8779296875/3.955078125" + assert_redirected_to changeset_path(:id => 4, :anchor => "map=3/4.8779296875/3.955078125") end # Test the key page diff --git a/test/test_helper.rb b/test/test_helper.rb index 60edf6e0c..1d04f57da 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -383,5 +383,41 @@ module ActiveSupport ensure unfreeze_time end + + # This is a convenience method for checks of resources rendered in a map view sidebar + # First we check that when we don't have an id, it will correctly return a 404 + # then we check that we get the correct 404 when a non-existant id is passed + # then we check that it will get a successful response, when we do pass an id + def sidebar_browse_check(path, id, template) + path_method = method(path) + + assert_raise ActionController::UrlGenerationError do + get path_method.call + end + + assert_raise ActionController::UrlGenerationError do + get path_method.call(:id => -10) # we won't have an id that's negative + end + + get path_method.call(:id => 0) + assert_response :not_found + assert_template "browse/not_found" + assert_template :layout => "map" + + get path_method.call(:id => 0), :xhr => true + assert_response :not_found + assert_template "browse/not_found" + assert_template :layout => "xhr" + + get path_method.call(:id => id) + assert_response :success + assert_template template + assert_template :layout => "map" + + get path_method.call(:id => id), :xhr => true + assert_response :success + assert_template template + assert_template :layout => "xhr" + end end end From 7d4b48f0f8cc86abb03d747d71f578265951ba07 Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Thu, 29 Feb 2024 11:02:30 +0300 Subject: [PATCH 2/5] Move changeset element headings to changesets locale --- app/helpers/browse_helper.rb | 4 ++-- config/locales/en.yml | 13 +++++----- .../controllers/changesets_controller_test.rb | 24 +++++++++++++++++++ 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/app/helpers/browse_helper.rb b/app/helpers/browse_helper.rb index 67b3c7cf7..53e980fdc 100644 --- a/app/helpers/browse_helper.rb +++ b/app/helpers/browse_helper.rb @@ -72,10 +72,10 @@ module BrowseHelper def type_and_paginated_count(type, pages) if pages.page_count == 1 - t "browse.changeset.#{type}", + t ".#{type.pluralize}", :count => pages.item_count else - t "browse.changeset.#{type}_paginated", + t ".#{type.pluralize}_paginated", :x => pages.current_page.first_item, :y => pages.current_page.last_item, :count => pages.item_count diff --git a/config/locales/en.yml b/config/locales/en.yml index 616e350d3..18a10f7af 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -335,12 +335,6 @@ en: coordinates_html: "%{latitude}, %{longitude}" changeset: belongs_to: "Author" - node: "Nodes (%{count})" - node_paginated: "Nodes (%{x}-%{y} of %{count})" - way: "Ways (%{count})" - way_paginated: "Ways (%{x}-%{y} of %{count})" - relation: "Relations (%{count})" - relation_paginated: "Relations (%{x}-%{y} of %{count})" node: title_html: "Node: %{name}" history_title_html: "Node History: %{name}" @@ -478,6 +472,13 @@ en: hidden_comment_by_html: "Hidden comment from %{user} %{time_ago}" changesetxml: "Changeset XML" osmchangexml: "osmChange XML" + paging_nav: + nodes: "Nodes (%{count})" + nodes_paginated: "Nodes (%{x}-%{y} of %{count})" + ways: "Ways (%{count})" + ways_paginated: "Ways (%{x}-%{y} of %{count})" + relations: "Relations (%{count})" + relations_paginated: "Relations (%{x}-%{y} of %{count})" timeout: sorry: "Sorry, the list of changesets you requested took too long to retrieve." changeset_comments: diff --git a/test/controllers/changesets_controller_test.rb b/test/controllers/changesets_controller_test.rb index 14aa743b6..09406e5ff 100644 --- a/test/controllers/changesets_controller_test.rb +++ b/test/controllers/changesets_controller_test.rb @@ -281,10 +281,34 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest def test_show_element_links changeset = create(:changeset) node = create(:node, :with_history, :changeset => changeset) + way = create(:way, :with_history, :changeset => changeset) + relation = create(:relation, :with_history, :changeset => changeset) sidebar_browse_check :changeset_path, changeset.id, "changesets/show" assert_dom "a[href='#{node_path node}']", :count => 1 assert_dom "a[href='#{old_node_path node, 1}']", :count => 1 + assert_dom "a[href='#{way_path way}']", :count => 1 + assert_dom "a[href='#{old_way_path way, 1}']", :count => 1 + assert_dom "a[href='#{relation_path relation}']", :count => 1 + assert_dom "a[href='#{old_relation_path relation, 1}']", :count => 1 + end + + def test_show_paginated_element_links + page_size = 20 + changeset = create(:changeset) + nodes = create_list(:node, page_size + 1, :with_history, :changeset => changeset) + ways = create_list(:way, page_size + 1, :with_history, :changeset => changeset) + relations = create_list(:relation, page_size + 1, :with_history, :changeset => changeset) + + sidebar_browse_check :changeset_path, changeset.id, "changesets/show" + page_size.times do |i| + assert_dom "a[href='#{node_path nodes[i]}']", :count => 1 + assert_dom "a[href='#{old_node_path nodes[i], 1}']", :count => 1 + assert_dom "a[href='#{way_path ways[i]}']", :count => 1 + assert_dom "a[href='#{old_way_path ways[i], 1}']", :count => 1 + assert_dom "a[href='#{relation_path relations[i]}']", :count => 1 + assert_dom "a[href='#{old_relation_path relations[i], 1}']", :count => 1 + end end ## From befa654edf908d19b5b571ecef92c6e04058272e Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Thu, 29 Feb 2024 11:23:01 +0300 Subject: [PATCH 3/5] Move all browse.changeset strings to changesets locale --- app/views/changesets/index.atom.builder | 2 +- config/locales/en.yml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/views/changesets/index.atom.builder b/app/views/changesets/index.atom.builder index 521dffe5f..13c6bd5a4 100644 --- a/app/views/changesets/index.atom.builder +++ b/app/views/changesets/index.atom.builder @@ -50,7 +50,7 @@ atom_feed(:language => I18n.locale, :schema_date => 2009, end if changeset.user.data_public? table.tr do |tr| - tr.th t("browse.changeset.belongs_to") + tr.th t(".feed.belongs_to") tr.td do |td| td.a changeset.user.display_name, :href => user_url(changeset.user, :only_path => false) end diff --git a/config/locales/en.yml b/config/locales/en.yml index 18a10f7af..aa0725ca6 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -333,8 +333,6 @@ en: location: "Location:" common_details: coordinates_html: "%{latitude}, %{longitude}" - changeset: - belongs_to: "Author" node: title_html: "Node: %{name}" history_title_html: "Node History: %{name}" @@ -450,6 +448,7 @@ en: feed: title: "Changeset %{id}" title_comment: "Changeset %{id} - %{comment}" + belongs_to: "Author" subscribe: heading: Subscribe to the following changeset discussion? button: Subscribe to discussion From 88669ef8097f68ea3a299ce3adf07ac836959adc Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Thu, 29 Feb 2024 12:16:11 +0300 Subject: [PATCH 4/5] Move changeset created/closed popup/feed strings to changesets locale --- app/helpers/changesets_helper.rb | 2 +- app/views/changesets/index.atom.builder | 4 ++-- config/locales/en.yml | 6 ++++-- test/controllers/changesets_controller_test.rb | 11 +++++++++-- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/app/helpers/changesets_helper.rb b/app/helpers/changesets_helper.rb index 3a26c2001..f580ba549 100644 --- a/app/helpers/changesets_helper.rb +++ b/app/helpers/changesets_helper.rb @@ -18,7 +18,7 @@ module ChangesetsHelper else action = :closed time = time_ago_in_words(changeset.closed_at, :scope => :"datetime.distance_in_words_ago") - title = safe_join([t("browse.created"), ": ", l(changeset.created_at), " ".html_safe, t("browse.closed"), ": ", l(changeset.closed_at)]) + title = safe_join([t("changesets.show.created", :when => l(changeset.created_at)), " ".html_safe, t("changesets.show.closed", :when => l(changeset.closed_at))]) datetime = changeset.closed_at.xmlschema end diff --git a/app/views/changesets/index.atom.builder b/app/views/changesets/index.atom.builder index 13c6bd5a4..c8ffe1a81 100644 --- a/app/views/changesets/index.atom.builder +++ b/app/views/changesets/index.atom.builder @@ -41,11 +41,11 @@ atom_feed(:language => I18n.locale, :schema_date => 2009, xhtml.style "th { text-align: left } tr { vertical-align: top }" xhtml.table do |table| table.tr do |tr| - tr.th t("browse.created") + tr.th t(".feed.created") tr.td l(changeset.created_at) end table.tr do |tr| - tr.th t("browse.closed") + tr.th t(".feed.closed") tr.td l(changeset.closed_at) end if changeset.user.data_public? diff --git a/config/locales/en.yml b/config/locales/en.yml index aa0725ca6..eb0f034a6 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -308,8 +308,6 @@ en: destroy: success: "Account Deleted." browse: - created: "Created" - closed: "Closed" created_ago_html: "Created %{time_ago}" closed_ago_html: "Closed %{time_ago}" created_ago_by_html: "Created %{time_ago} by %{user}" @@ -448,6 +446,8 @@ en: feed: title: "Changeset %{id}" title_comment: "Changeset %{id} - %{comment}" + created: "Created" + closed: "Closed" belongs_to: "Author" subscribe: heading: Subscribe to the following changeset discussion? @@ -464,6 +464,8 @@ en: body: "Sorry, there is no changeset with the id %{id}. Please check your spelling, or maybe the link you clicked is wrong." show: title: "Changeset: %{id}" + created: "Created: %{when}" + closed: "Closed: %{when}" discussion: Discussion join_discussion: "Log in to join the discussion" still_open: "Changeset still open - discussion will open once the changeset is closed." diff --git a/test/controllers/changesets_controller_test.rb b/test/controllers/changesets_controller_test.rb index 09406e5ff..ce16b1406 100644 --- a/test/controllers/changesets_controller_test.rb +++ b/test/controllers/changesets_controller_test.rb @@ -125,8 +125,9 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest # Checks the display of the user changesets listing def test_index_user user = create(:user) - create(:changeset, :user => user) - create(:changeset, :closed, :user => user) + create(:changeset, :user => user, :num_changes => 1) + create(:changeset, :closed, :user => user, :num_changes => 1) + user.reload get history_path(:format => "html", :display_name => user.display_name) assert_response :success @@ -270,6 +271,12 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest end end + def test_show_closed_changeset + changeset = create(:changeset, :closed) + + sidebar_browse_check :changeset_path, changeset.id, "changesets/show" + end + def test_show_private_changeset user = create(:user) changeset = create(:changeset, :user => create(:user, :data_public => false)) From 60dd5ce6e6e4e3222920fa9d6804c25deae3529c Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Thu, 29 Feb 2024 12:51:34 +0300 Subject: [PATCH 5/5] Move changeset created/closed time ago strings to changesets locale --- app/helpers/changesets_helper.rb | 6 +++--- config/locales/en.yml | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/helpers/changesets_helper.rb b/app/helpers/changesets_helper.rb index f580ba549..dbee08c50 100644 --- a/app/helpers/changesets_helper.rb +++ b/app/helpers/changesets_helper.rb @@ -23,10 +23,10 @@ module ChangesetsHelper end if params.key?(:display_name) - t "browse.#{action}_ago_html", :time_ago => tag.time(time, :title => title, :datetime => datetime) + t "changesets.show.#{action}_ago_html", :time_ago => tag.time(time, :title => title, :datetime => datetime) else - t "browse.#{action}_ago_by_html", :time_ago => tag.time(time, :title => title, :datetime => datetime), - :user => changeset_user_link(changeset) + t "changesets.show.#{action}_ago_by_html", :time_ago => tag.time(time, :title => title, :datetime => datetime), + :user => changeset_user_link(changeset) end end diff --git a/config/locales/en.yml b/config/locales/en.yml index eb0f034a6..6db6e77b4 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -308,10 +308,6 @@ en: destroy: success: "Account Deleted." browse: - created_ago_html: "Created %{time_ago}" - closed_ago_html: "Closed %{time_ago}" - created_ago_by_html: "Created %{time_ago} by %{user}" - closed_ago_by_html: "Closed %{time_ago} by %{user}" deleted_ago_by_html: "Deleted %{time_ago} by %{user}" edited_ago_by_html: "Edited %{time_ago} by %{user}" version: "Version" @@ -466,6 +462,10 @@ en: title: "Changeset: %{id}" created: "Created: %{when}" closed: "Closed: %{when}" + created_ago_html: "Created %{time_ago}" + closed_ago_html: "Closed %{time_ago}" + created_ago_by_html: "Created %{time_ago} by %{user}" + closed_ago_by_html: "Closed %{time_ago} by %{user}" discussion: Discussion join_discussion: "Log in to join the discussion" still_open: "Changeset still open - discussion will open once the changeset is closed."