API: Add support for searching tasks by name

This allows users to query the API like so:

    /api/v1/tasks?name=install

The search above would return tasks with "install" in the name of the
task.

Change-Id: Ia549d33cd6c9e4de7702b1a2994d4c4adfc75032
This commit is contained in:
David Moreau Simard
2020-04-13 14:47:40 -04:00
parent ff2463dbb7
commit 36aacd09cf
2 changed files with 12 additions and 0 deletions

View File

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

View File

@@ -136,6 +136,17 @@ class TaskTestCase(APITestCase):
self.assertEqual(task.name, request.data["results"][1]["name"])
self.assertEqual("task2", request.data["results"][0]["name"])
def test_get_tasks_by_name(self):
# Create a playbook and two tasks
playbook = factories.PlaybookFactory()
task = factories.TaskFactory(name="task1", playbook=playbook)
factories.TaskFactory(name="task2", playbook=playbook)
# Query for the first task name and expect one result
request = self.client.get("/api/v1/tasks?name=%s" % task.name)
self.assertEqual(1, len(request.data["results"]))
self.assertEqual(task.name, request.data["results"][0]["name"])
def test_get_task_duration(self):
started = timezone.now()
ended = started + datetime.timedelta(hours=1)