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:
@@ -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(
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user