From f307fdec0e661d29630eb82bf51970a6d1558717 Mon Sep 17 00:00:00 2001 From: Will Keeling Date: Fri, 12 Nov 2021 12:12:53 +0000 Subject: [PATCH] Create endpoint for advice denial reasons --- api/data_workspace/advice_views.py | 10 +++++++- api/data_workspace/serializers.py | 6 +++++ api/data_workspace/tests/test_advice_views.py | 24 +++++++++++++++++++ api/data_workspace/urls.py | 3 +++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/api/data_workspace/advice_views.py b/api/data_workspace/advice_views.py index cc2afb2e9..e47db980c 100644 --- a/api/data_workspace/advice_views.py +++ b/api/data_workspace/advice_views.py @@ -1,9 +1,10 @@ from rest_framework import viewsets from rest_framework.pagination import LimitOffsetPagination +from api.applications.serializers.advice import Advice from api.cases.serializers import AdviceSerializer from api.core.authentication import DataWorkspaceOnlyAuthentication -from api.applications.serializers.advice import Advice +from api.data_workspace.serializers import AdviceDenialReasonSerializer class AdviceListView(viewsets.ReadOnlyModelViewSet): @@ -11,3 +12,10 @@ class AdviceListView(viewsets.ReadOnlyModelViewSet): serializer_class = AdviceSerializer pagination_class = LimitOffsetPagination queryset = Advice.objects.all() + + +class AdviceDenialReasonListView(viewsets.ReadOnlyModelViewSet): + authentication_classes = (DataWorkspaceOnlyAuthentication,) + serializer_class = AdviceDenialReasonSerializer + pagination_class = LimitOffsetPagination + queryset = Advice.denial_reasons.through.objects.all() diff --git a/api/data_workspace/serializers.py b/api/data_workspace/serializers.py index 2ba6aeadc..869a8ebd0 100644 --- a/api/data_workspace/serializers.py +++ b/api/data_workspace/serializers.py @@ -104,3 +104,9 @@ def get_licence(self, instance): def get_status(self, instance): return instance.payload["status"].lower() + + +class AdviceDenialReasonSerializer(serializers.Serializer): + id = serializers.IntegerField() + advice_id = serializers.UUIDField() + denialreason_id = serializers.CharField() diff --git a/api/data_workspace/tests/test_advice_views.py b/api/data_workspace/tests/test_advice_views.py index 6c4c3a2ee..937fd58ad 100644 --- a/api/data_workspace/tests/test_advice_views.py +++ b/api/data_workspace/tests/test_advice_views.py @@ -52,3 +52,27 @@ def test_advice(self): "countersign_comments", } assert set(last_result.keys()) == expected_fields + + +class AdviceDenialReasonsDataWorkspaceTests(DataTestClient): + def setUp(self): + super().setUp() + self.standard_application = self.create_standard_application_case(self.organisation) + self.create_advice( + self.gov_user, + self.standard_application, + "good", + AdviceType.REFUSE, + AdviceLevel.FINAL, + advice_text="advice_text", + ) + + def test_advice_denial_reason(self): + url = reverse("data_workspace:dw-advice-denial-reasons-list") + response = self.client.get(url) + payload = response.json() + last_result = payload["results"][-1] + + # Ensure we get some expected fields + expected_fields = {"id", "advice_id", "denialreason_id"} + assert set(last_result.keys()) == expected_fields diff --git a/api/data_workspace/urls.py b/api/data_workspace/urls.py index a712dc9a4..9e08697b1 100644 --- a/api/data_workspace/urls.py +++ b/api/data_workspace/urls.py @@ -70,6 +70,9 @@ router_v1.register("users-gov-users", users_views.GovUserListView, basename="dw-users-gov-users") router_v1.register("audit-move-case", audit_views.AuditMoveCaseListView, basename="dw-audit-move-case") router_v1.register("advice", advice_views.AdviceListView, basename="dw-advice") +router_v1.register( + "advice-denial-reasons", advice_views.AdviceDenialReasonListView, basename="dw-advice-denial-reasons" +) router_v1.register( "audit-updated-status", audit_views.AuditUpdatedCaseStatusListView, basename="dw-audit-updated-status" )