Skip to content

Commit

Permalink
filter letter templates
Browse files Browse the repository at this point in the history
  • Loading branch information
depsiatwal committed Feb 28, 2025
1 parent 6b625ce commit e8dea9e
Show file tree
Hide file tree
Showing 8 changed files with 121 additions and 2 deletions.
1 change: 1 addition & 0 deletions api/conf/caseworker_urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@
path("organisations/", include("api.organisations.caseworker.urls")),
path("static/", include("api.staticdata.caseworker.urls")),
path("gov_users/", include("api.gov_users.caseworker.urls")),
path("letter_templates/", include("api.letter_templates.caseworker.urls")),
]
Empty file.
15 changes: 15 additions & 0 deletions api/letter_templates/caseworker/filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from django_filters import rest_framework as filters

from api.letter_templates.models import LetterTemplate


class LetterTemplateFilter(filters.FilterSet):
case_type = filters.CharFilter(field_name="case_types__sub_type", lookup_expr="exact")
decision = filters.CharFilter(field_name="decisions__name", lookup_expr="exact")

class Meta:
model = LetterTemplate
fields = (
"case_types",
"decisions",
)
12 changes: 12 additions & 0 deletions api/letter_templates/caseworker/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from rest_framework import serializers

from api.letter_templates.models import LetterTemplate
from api.staticdata.decisions.serializers import DecisionSerializer


class LetterTemplatesSerializer(serializers.ModelSerializer):
decisions = DecisionSerializer(many=True)

class Meta:
model = LetterTemplate
fields = ("id", "name", "decisions")
69 changes: 69 additions & 0 deletions api/letter_templates/caseworker/tests/test_view.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
from rest_framework.reverse import reverse
from rest_framework import status

from parameterized import parameterized

from api.cases.enums import AdviceType
from api.cases.enums import CaseTypeEnum
from test_helpers.clients import DataTestClient


class LetterTemplatesListTests(DataTestClient):

def setUp(self):
super().setUp()

# We need to shift these out to factories
self.create_letter_template(
name="F680 Approval", case_types=[CaseTypeEnum.F680.id], decisions=[AdviceType.ids[AdviceType.APPROVE]]
)
self.create_letter_template(
name="F680 Refusal", case_types=[CaseTypeEnum.F680.id], decisions=[AdviceType.ids[AdviceType.REFUSE]]
)
self.create_letter_template(
name="SIEL Approval", case_types=[CaseTypeEnum.SIEL.id], decisions=[AdviceType.ids[AdviceType.APPROVE]]
)

self.create_letter_template(
name="SIEL Refusal", case_types=[CaseTypeEnum.SIEL.id], decisions=[AdviceType.ids[AdviceType.REFUSE]]
)

@parameterized.expand(
[
[{"case_type": "f680_clearance"}, ["F680 Approval", "F680 Refusal"], ["Approve", "Refuse"], 2],
[
{"decision": "approve"},
["SIEL Approval", "F680 Approval"],
["Approve"],
2,
],
[
{"decision": "approve", "case_type": "f680_clearance"},
["F680 Approval"],
["Approve"],
1,
],
[
{"case_type": "bad_case_type"},
None,
None,
0,
],
]
)
def test_letter_templates_list_filter(self, filter, expected_names, expected_descisions, expect_count):

url = reverse("caseworker_letter_templates:list")
response = self.client.get(url, **self.gov_headers, data=filter)
response_data = response.json()

self.assertEqual(response_data["count"], expect_count)
for item in response_data["results"]:
self.assertTrue(item["name"] in expected_names)
self.assertTrue(item["decisions"][0]["name"]["value"] in expected_descisions)

def test_letter_templates_list_not_allowed(self):

url = reverse("caseworker_letter_templates:list")
response = self.client.get(url, **self.exporter_headers, data={})
assert response.status_code == status.HTTP_403_FORBIDDEN
9 changes: 9 additions & 0 deletions api/letter_templates/caseworker/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from django.urls import path

from .views import LetterTemplatesList

app_name = "caseworker_letter_templates"

urlpatterns = [
path("", LetterTemplatesList.as_view(), name="list"),
]
15 changes: 15 additions & 0 deletions api/letter_templates/caseworker/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from api.letter_templates.caseworker.filters import LetterTemplateFilter
from rest_framework.generics import ListAPIView

from api.core.authentication import GovAuthentication
from api.letter_templates.models import LetterTemplate
from .serializers import LetterTemplatesSerializer
from django_filters.rest_framework import DjangoFilterBackend


class LetterTemplatesList(ListAPIView):
authentication_classes = (GovAuthentication,)
filter_backends = [DjangoFilterBackend]
filterset_class = LetterTemplateFilter
serializer_class = LetterTemplatesSerializer
queryset = LetterTemplate.objects.order_by("name")
2 changes: 0 additions & 2 deletions api/letter_templates/tests/test_view.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
from api.letter_templates.models import LetterTemplate
from api.staticdata import decisions
from api.staticdata.letter_layouts.models import LetterLayout
from rest_framework import status
from rest_framework.reverse import reverse
from django.test import override_settings

from api.cases.enums import AdviceType, CaseTypeReferenceEnum
from api.cases.enums import CaseTypeSubTypeEnum, CaseTypeEnum
Expand Down

0 comments on commit e8dea9e

Please sign in to comment.