Allow get results with multiple statuses

Change-Id: Id649fa95e908ba69d3e95502a47e203496e5b79e
This commit is contained in:
Guillaume Vincent 2019-01-30 17:22:03 +01:00 committed by David Moreau Simard
parent de925912f5
commit d3de8af4c8
No known key found for this signature in database
GPG Key ID: CBEB466764A9E621
2 changed files with 26 additions and 11 deletions

View File

@ -113,12 +113,22 @@ class ResultTestCase(APITestCase):
self.assertEqual(result.status, request.data["results"][0]["status"])
self.assertEqual("skipped", request.data["results"][1]["status"])
def test_get_result_by_status(self):
playbook = factories.PlaybookFactory()
host_one = factories.HostFactory(name="one")
host_two = factories.HostFactory(name="two")
result = factories.ResultFactory(playbook=playbook, host=host_one, status="failed")
factories.ResultFactory(playbook=playbook, host=host_two, status="skipped")
request = self.client.get("/api/v1/results?status=failed")
self.assertEqual(1, len(request.data["results"]))
self.assertEqual(result.status, request.data["results"][0]["status"])
def test_get_result_by_statuses(self):
failed_result = factories.ResultFactory(status="failed")
skipped_result = factories.ResultFactory(status="skipped")
factories.ResultFactory(status="ok")
results = self.client.get("/api/v1/results").data["results"]
self.assertEqual(3, len(results))
results = self.client.get("/api/v1/results?status=failed").data["results"]
self.assertEqual(1, len(results))
self.assertEqual(failed_result.status, results[0]["status"])
results = self.client.get("/api/v1/results?status=skipped").data["results"]
self.assertEqual(1, len(results))
self.assertEqual(skipped_result.status, results[0]["status"])
results = self.client.get("/api/v1/results?status=failed&status=skipped").data["results"]
self.assertEqual(2, len(results))
self.assertEqual(failed_result.status, results[0]["status"])
self.assertEqual(skipped_result.status, results[1]["status"])

View File

@ -63,9 +63,14 @@ class HostViewSet(viewsets.ModelViewSet):
class ResultViewSet(viewsets.ModelViewSet):
queryset = models.Result.objects.all()
serializer_class = serializers.ResultSerializer
filter_fields = ("playbook", "status")
filter_fields = ("playbook",)
def get_queryset(self):
statuses = self.request.GET.getlist("status")
if statuses:
return models.Result.objects.filter(status__in=statuses)
return models.Result.objects.all()
class FileViewSet(viewsets.ModelViewSet):