]> git.ipfire.org Git - thirdparty/patchwork.git/commitdiff
Allow ordering events by date
authorJeremy Cline <jcline@redhat.com>
Tue, 15 Oct 2019 21:30:11 +0000 (17:30 -0400)
committerStephen Finucane <stephen@that.guru>
Sat, 30 Nov 2019 17:00:39 +0000 (17:00 +0000)
By default, the events API orders events by date in descending order
(newest first). However, it's useful to be able to order the events by
oldest events first. For example, when a client is polling the events
API for new events since a given date and wishes to process them in
chronological order.

Signed-off-by: Jeremy Cline <jcline@redhat.com>
Reviewed-by: Stephen Finucane <stephen@that.guru>
patchwork/api/event.py
patchwork/tests/api/test_event.py
releasenotes/notes/api-order-events-by-date-7484164761c5231b.yaml [new file with mode: 0644]

index c0d973d8db405cba6df5a2558b54915ab77eca8a..e6d467d11c3d8b583ced724717197686369110fb 100644 (file)
@@ -77,7 +77,7 @@ class EventList(ListAPIView):
     serializer_class = EventSerializer
     filter_class = filterset_class = EventFilterSet
     page_size_query_param = None  # fixed page size
-    ordering_fields = ()
+    ordering_fields = ('date',)
     ordering = '-date'
 
     def get_queryset(self):
index 8816538fa071df0915b68611861751e3cdee3795..bff8f404078b4219dbe92568a90e96cf55b6b8d5 100644 (file)
@@ -149,6 +149,24 @@ class TestEventAPI(utils.APITestCase):
         resp = self.client.get(self.api_url(), {'series': 999999})
         self.assertEqual(0, len(resp.data))
 
+    def test_order_by_date_default(self):
+        """Assert the default ordering is by date descending."""
+        self._create_events()
+
+        resp = self.client.get(self.api_url())
+        events = Event.objects.order_by("-date").all()
+        for api_event, event in zip(resp.data, events):
+            self.assertEqual(api_event["id"], event.id)
+
+    def test_order_by_date_ascending(self):
+        """Assert the default ordering is by date descending."""
+        self._create_events()
+
+        resp = self.client.get(self.api_url(), {'order': 'date'})
+        events = Event.objects.order_by("date").all()
+        for api_event, event in zip(resp.data, events):
+            self.assertEqual(api_event["id"], event.id)
+
     def test_create(self):
         """Ensure creates aren't allowed"""
         user = create_maintainer()
diff --git a/releasenotes/notes/api-order-events-by-date-7484164761c5231b.yaml b/releasenotes/notes/api-order-events-by-date-7484164761c5231b.yaml
new file mode 100644 (file)
index 0000000..5d5328d
--- /dev/null
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    Allow ordering events from the events API by date. This can be done by
+    adding ``order=date`` or ``order=-date`` (the default) parameters.