API: Add support for searching task by action

This allows users to query the API like so:

    /api/v1/tasks?action=command

The search above would return tasks that used the "command" module.

Change-Id: I01226a9706a0004970cf7d6ef5d725998ae71827
This commit is contained in:
David Moreau Simard
2020-05-12 17:14:17 -04:00
parent 2e367aff9e
commit 9364960fd6
2 changed files with 15 additions and 0 deletions

View File

@@ -105,6 +105,7 @@ class TaskFilter(DateFilter):
field_name="status", choices=ara_models.Task.STATUS, lookup_expr="iexact"
)
name = django_filters.CharFilter(field_name="name", lookup_expr="icontains")
action = django_filters.CharFilter(field_name="action", lookup_expr="iexact")
# fmt: off
order = django_filters.OrderingFilter(

View File

@@ -220,3 +220,17 @@ class TaskTestCase(APITestCase):
# Test multiple status
request = self.client.get("/api/v1/tasks?status=running&status=completed")
self.assertEqual(2, len(request.data["results"]))
def test_get_task_by_action(self):
task = factories.TaskFactory(action="debug")
factories.TaskFactory(action="setup")
# Confirm we have two objects
request = self.client.get("/api/v1/tasks")
self.assertEqual(2, len(request.data["results"]))
# Expect the correct single result when searching
request = self.client.get("/api/v1/tasks?action=debug")
self.assertEqual(1, len(request.data["results"]))
self.assertEqual(task.id, request.data["results"][0]["id"])
self.assertEqual(task.action, request.data["results"][0]["action"])