]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/4158'
authorTom Hughes <tom@compton.nu>
Sun, 13 Aug 2023 09:00:29 +0000 (10:00 +0100)
committerTom Hughes <tom@compton.nu>
Sun, 13 Aug 2023 09:00:29 +0000 (10:00 +0100)
1  2 
test/controllers/api/changesets_controller_test.rb

index c9ec9c9feeacff0c83a3e214366c6c5a89799481,9f266ab763145f37401aa83d16d240e8e73a7d02..4f96e3ecb0d713b78f70988adb8f2f301d9c35e9
@@@ -151,7 -151,7 +151,7 @@@ module Ap
        get changeset_show_path(changeset)
        assert_response :success, "cannot get first changeset"
  
 -      assert_select "osm[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
 +      assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
        assert_select "osm>changeset[id='#{changeset.id}']", 1
        assert_select "osm>changeset>@open", "true"
        assert_select "osm>changeset>@created_at", changeset.created_at.xmlschema
        get changeset_show_path(changeset), :params => { :include_discussion => true }
        assert_response :success, "cannot get first changeset with comments"
  
 -      assert_select "osm[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
 +      assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
        assert_select "osm>changeset[id='#{changeset.id}']", 1
        assert_select "osm>changeset>@open", "true"
        assert_select "osm>changeset>@created_at", changeset.created_at.xmlschema
        get changeset_show_path(changeset), :params => { :include_discussion => true }
        assert_response :success, "cannot get closed changeset with comments"
  
 -      assert_select "osm[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
 +      assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
        assert_select "osm>changeset[id='#{changeset.id}']", 1
        assert_select "osm>changeset>@open", "false"
        assert_select "osm>changeset>@created_at", changeset.created_at.xmlschema
        assert_not_nil js
  
        assert_equal Settings.api_version, js["version"]
 -      assert_equal "OpenStreetMap server", js["generator"]
 +      assert_equal Settings.generator, js["generator"]
        assert_equal changeset.id, js["changeset"]["id"]
        assert js["changeset"]["open"]
        assert_equal changeset.created_at.xmlschema, js["changeset"]["created_at"]
        js = ActiveSupport::JSON.decode(@response.body)
        assert_not_nil js
        assert_equal Settings.api_version, js["version"]
 -      assert_equal "OpenStreetMap server", js["generator"]
 +      assert_equal Settings.generator, js["generator"]
        assert_equal changeset.id, js["changeset"]["id"]
        assert js["changeset"]["open"]
        assert_equal changeset.created_at.xmlschema, js["changeset"]["created_at"]
  
        assert_not_nil js
        assert_equal Settings.api_version, js["version"]
 -      assert_equal "OpenStreetMap server", js["generator"]
 +      assert_equal Settings.generator, js["generator"]
        assert_equal changeset.id, js["changeset"]["id"]
        assert_not js["changeset"]["open"]
        assert_equal changeset.created_at.xmlschema, js["changeset"]["created_at"]
                        "can't upload a simple valid creation to changeset: #{@response.body}"
  
        # check the returned payload
 -      assert_select "diffResult[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
 +      assert_select "diffResult[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
        assert_select "diffResult>node", 1
        assert_select "diffResult>way", 1
        assert_select "diffResult>relation", 1
                        "can't do a conditional delete of in use objects: #{@response.body}"
  
        # check the returned payload
 -      assert_select "diffResult[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
 +      assert_select "diffResult[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
        assert_select "diffResult>node", 1
        assert_select "diffResult>way", 1
        assert_select "diffResult>relation", 1
                        "failed to return error in XML format"
  
        # check the returned payload
 -      assert_select "osmError[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
 +      assert_select "osmError[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
        assert_select "osmError>status", 1
        assert_select "osmError>message", 1
      end
        assert_not_nil js
  
        assert_equal Settings.api_version, js["version"]
 -      assert_equal "OpenStreetMap server", js["generator"]
 +      assert_equal Settings.generator, js["generator"]
        assert_equal 2, js["changesets"].count
  
        # check that the correct error is given when we provide both UID and name
  
        get changesets_path
        assert_response :success
-       assert_changesets [changeset5, changeset4, changeset3, changeset2, changeset1]
+       assert_changesets_in_order [changeset5, changeset4, changeset3, changeset2, changeset1]
  
        get changesets_path(:limit => "3")
        assert_response :success
-       assert_changesets [changeset5, changeset4, changeset3]
+       assert_changesets_in_order [changeset5, changeset4, changeset3]
  
        get changesets_path(:limit => "0")
        assert_response :bad_request
  
        get changesets_path(:limit => Settings.max_changeset_query_limit)
        assert_response :success
-       assert_changesets [changeset5, changeset4, changeset3, changeset2, changeset1]
+       assert_changesets_in_order [changeset5, changeset4, changeset3, changeset2, changeset1]
  
        get changesets_path(:limit => Settings.max_changeset_query_limit + 1)
        assert_response :bad_request
      end
  
+     ##
+     # test the query functionality of changesets with the order parameter
+     def test_query_order
+       user = create(:user)
+       changeset1 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 1, 1, 0, 0, 0), :closed_at => Time.utc(2008, 1, 2, 0, 0, 0))
+       changeset2 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 2, 1, 0, 0, 0), :closed_at => Time.utc(2008, 2, 2, 0, 0, 0))
+       changeset3 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 3, 1, 0, 0, 0), :closed_at => Time.utc(2008, 3, 2, 0, 0, 0))
+       changeset4 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 4, 1, 0, 0, 0), :closed_at => Time.utc(2008, 4, 2, 0, 0, 0))
+       changeset5 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 5, 1, 0, 0, 0), :closed_at => Time.utc(2008, 5, 2, 0, 0, 0))
+       get changesets_path(:order => "oldest")
+       assert_response :success
+       assert_changesets_in_order [changeset1, changeset2, changeset3, changeset4, changeset5]
+       get changesets_path(:order => "oldest", :time => "2008-01-01T00:00Z,2018-01-01T00:00Z")
+       assert_response :success
+       assert_changesets_in_order [changeset1, changeset2, changeset3, changeset4, changeset5]
+       get changesets_path(:order => "oldest", :time => "2008-01-02T00:00Z,2018-01-01T00:00Z")
+       assert_response :success
+       assert_changesets_in_order [changeset1, changeset2, changeset3, changeset4, changeset5]
+       get changesets_path(:order => "oldest", :time => "2008-01-02T00:01Z,2018-01-01T00:00Z")
+       assert_response :success
+       assert_changesets_in_order [changeset2, changeset3, changeset4, changeset5]
+       get changesets_path(:order => "oldest", :time => "2008-04-01T00:00Z,2018-01-01T00:00Z")
+       assert_response :success
+       assert_changesets_in_order [changeset4, changeset5]
+       get changesets_path(:order => "oldest", :time => "2008-06-01T00:00Z,2018-01-01T00:00Z")
+       assert_response :success
+       assert_changesets_in_order []
+     end
      ##
      # check that errors are returned if garbage is inserted
      # into query strings
      private
  
      ##
-     # boilerplate for checking that certain changesets exist in the
-     # output.
+     # check that certain changesets exist in the output
      def assert_changesets(changesets)
        assert_select "osm>changeset", changesets.size
        changesets.each do |changeset|
        end
      end
  
+     ##
+     # check that certain changesets exist in the output in the specified order
+     def assert_changesets_in_order(changesets)
+       assert_select "osm>changeset", changesets.size
+       changesets.each_with_index do |changeset, index|
+         assert_select "osm>changeset:nth-child(#{index + 1})[id='#{changeset.id}']", 1
+       end
+     end
      ##
      # update the changeset_id of a way element
      def update_changeset(xml, changeset_id)