]> git.openstreetmap.org Git - rails.git/commitdiff
Add order parameter to changeset query api entry point
authorAnton Khorev <tony29@yandex.ru>
Sat, 12 Aug 2023 00:57:48 +0000 (03:57 +0300)
committerAnton Khorev <tony29@yandex.ru>
Sat, 12 Aug 2023 00:57:48 +0000 (03:57 +0300)
app/controllers/api/changesets_controller.rb
test/controllers/api/changesets_controller_test.rb

index 0dffd4de224a37e21cffb1780038a259492a89b3..66014042718126ceca06b3bd3f864a7bb6985be6 100644 (file)
@@ -170,8 +170,15 @@ module Api
       changesets = conditions_closed(changesets, params["closed"])
       changesets = conditions_ids(changesets, params["changesets"])
 
-      # sort and limit the changesets
-      changesets = changesets.order("created_at DESC").limit(result_limit)
+      # sort the changesets
+      changesets = if params[:order] == "oldest"
+                     changesets.order("created_at ASC")
+                   else
+                     changesets.order("created_at DESC")
+                   end
+
+      # limit the result
+      changesets = changesets.limit(result_limit)
 
       # preload users, tags and comments, and render result
       @changesets = changesets.preload(:user, :changeset_tags, :comments)
index aa83336dd7b2dca0825d7540215a7683ed7b7a5e..9f266ab763145f37401aa83d16d240e8e73a7d02 100644 (file)
@@ -1967,6 +1967,41 @@ module Api
       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