diff mbox series

[v4,4/4] /api/events: Allow filtering by 'actor' field

Message ID 20191201014955.1994-5-johan@herland.net
State Accepted
Headers show
Series Store the 'actor' responsible for events | expand

Commit Message

Johan Herland Dec. 1, 2019, 1:49 a.m. UTC
Cc: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Suggested-by: Stephen Finucane <stephen@that.guru>
Signed-off-by: Johan Herland <johan@herland.net>
---
 patchwork/api/filters.py          |  5 ++++-
 patchwork/tests/api/test_event.py | 22 ++++++++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)

Comments

Stephen Finucane Dec. 1, 2019, 12:14 p.m. UTC | #1
On Sun, 2019-12-01 at 02:49 +0100, Johan Herland wrote:
> Cc: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
> Suggested-by: Stephen Finucane <stephen@that.guru>
> Signed-off-by: Johan Herland <johan@herland.net>

Squashed with patch 3, but...

Reviewed-by: Stephen Finucane <stephen@that.guru>

> ---
>  patchwork/api/filters.py          |  5 ++++-
>  patchwork/tests/api/test_event.py | 22 ++++++++++++++++++++++
>  2 files changed, 26 insertions(+), 1 deletion(-)
> 
> diff --git a/patchwork/api/filters.py b/patchwork/api/filters.py
> index 6b4d84c..60f1a36 100644
> --- a/patchwork/api/filters.py
> +++ b/patchwork/api/filters.py
> @@ -236,7 +236,10 @@ class EventFilterSet(TimestampMixin, BaseFilterSet):
>  
>      class Meta:
>          model = Event
> -        fields = ('project', 'category', 'series', 'patch', 'cover')
> +        fields = ('project', 'category', 'series', 'patch', 'cover', 'actor')
> +        versioned_fields = {
> +            '1.2': ('actor', ),
> +        }
>  
>  
>  class BundleFilterSet(BaseFilterSet):
> diff --git a/patchwork/tests/api/test_event.py b/patchwork/tests/api/test_event.py
> index 456f2f5..e86e170 100644
> --- a/patchwork/tests/api/test_event.py
> +++ b/patchwork/tests/api/test_event.py
> @@ -156,6 +156,28 @@ class TestEventAPI(utils.APITestCase):
>          resp = self.client.get(self.api_url(), {'series': 999999})
>          self.assertEqual(0, len(resp.data))
>  
> +    def test_list_filter_actor(self):
> +        """Filter events by actor."""
> +        events = self._create_events()
> +
> +        # The final two events (patch-delegated, patch-state-changed)
> +        # have an actor set
> +        actor = events[0].actor
> +        resp = self.client.get(self.api_url(), {'actor': actor.pk})
> +        self.assertEqual(2, len(resp.data))
> +
> +        resp = self.client.get(self.api_url(), {'actor': 'foo-bar'})
> +        self.assertEqual(0, len(resp.data))
> +
> +    def test_list_filter_actor_version_1_1(self):
> +        """Filter events by actor using API v1.1."""
> +        events = self._create_events()
> +
> +        # we still see all the events since the actor field is ignored
> +        resp = self.client.get(self.api_url(version='1.1'),
> +                               {'actor': 'foo-bar'})
> +        self.assertEqual(len(events), len(resp.data))
> +
>      def test_order_by_date_default(self):
>          """Assert the default ordering is by date descending."""
>          self._create_events()
diff mbox series

Patch

diff --git a/patchwork/api/filters.py b/patchwork/api/filters.py
index 6b4d84c..60f1a36 100644
--- a/patchwork/api/filters.py
+++ b/patchwork/api/filters.py
@@ -236,7 +236,10 @@  class EventFilterSet(TimestampMixin, BaseFilterSet):
 
     class Meta:
         model = Event
-        fields = ('project', 'category', 'series', 'patch', 'cover')
+        fields = ('project', 'category', 'series', 'patch', 'cover', 'actor')
+        versioned_fields = {
+            '1.2': ('actor', ),
+        }
 
 
 class BundleFilterSet(BaseFilterSet):
diff --git a/patchwork/tests/api/test_event.py b/patchwork/tests/api/test_event.py
index 456f2f5..e86e170 100644
--- a/patchwork/tests/api/test_event.py
+++ b/patchwork/tests/api/test_event.py
@@ -156,6 +156,28 @@  class TestEventAPI(utils.APITestCase):
         resp = self.client.get(self.api_url(), {'series': 999999})
         self.assertEqual(0, len(resp.data))
 
+    def test_list_filter_actor(self):
+        """Filter events by actor."""
+        events = self._create_events()
+
+        # The final two events (patch-delegated, patch-state-changed)
+        # have an actor set
+        actor = events[0].actor
+        resp = self.client.get(self.api_url(), {'actor': actor.pk})
+        self.assertEqual(2, len(resp.data))
+
+        resp = self.client.get(self.api_url(), {'actor': 'foo-bar'})
+        self.assertEqual(0, len(resp.data))
+
+    def test_list_filter_actor_version_1_1(self):
+        """Filter events by actor using API v1.1."""
+        events = self._create_events()
+
+        # we still see all the events since the actor field is ignored
+        resp = self.client.get(self.api_url(version='1.1'),
+                               {'actor': 'foo-bar'})
+        self.assertEqual(len(events), len(resp.data))
+
     def test_order_by_date_default(self):
         """Assert the default ordering is by date descending."""
         self._create_events()