Skip to content

Commit

Permalink
added filter and improved tests
Browse files Browse the repository at this point in the history
  • Loading branch information
DraKen0009 committed Nov 6, 2024
1 parent 34c97d0 commit bf7a237
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 0 deletions.
15 changes: 15 additions & 0 deletions care/facility/api/viewsets/facility_flag.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,27 @@
from django_filters import rest_framework as filters
from rest_framework import viewsets

from care.facility.api.serializers.facility_flag import FacilityFlagSerializer
from care.facility.models import FacilityFlag
from care.utils.custom_permissions import IsSuperUser


class FacilityFlagFilter(filters.FilterSet):
flag = filters.CharFilter(field_name="flag", lookup_expr="icontains")
facility = filters.UUIDFilter(field_name="facility__external_id")


class FacilityFlagViewSet(viewsets.ModelViewSet):
"""
CRUD operations for FacilityFlag model.
This viewset is restricted to superusers only and provides endpoints to manage facility flags.
"""

queryset = FacilityFlag.objects.all()
serializer_class = FacilityFlagSerializer
permission_classes = [IsSuperUser]
lookup_field = "external_id"

filter_backends = [filters.DjangoFilterBackend]
filterset_class = FacilityFlagFilter
29 changes: 29 additions & 0 deletions care/facility/tests/test_facility_flags_api.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from rest_framework import status
from rest_framework.test import APITestCase

from care.facility.models import FacilityFlag
from care.utils.registries.feature_flag import FlagRegistry, FlagType
from care.utils.tests.test_utils import TestUtils

Expand Down Expand Up @@ -51,11 +52,20 @@ def test_list_facility_flags(self):
def test_create_facility_flag(self):
self.client.force_authenticate(user=self.super_user)

response = self.client.post(self.get_url(), {})
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn("This field is required.", response.json()["flag"])
self.assertIn("This field is required.", response.json()["facility"])

# Attempting to create a duplicate flag
response = self.client.post(
self.get_url(), {"flag": "TEST_FLAG", "facility": self.facility.external_id}
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn(
"The fields facility, flag must make a unique set.",
response.json()["non_field_errors"],
)

# Creating a new facility flag
response = self.client.post(
Expand Down Expand Up @@ -116,6 +126,25 @@ def test_patch_facility_flag(self):
self.facility_flag_1.facility.external_id, self.facility2.external_id
)

def test_delete_facility_flag(self):
self.client.force_authenticate(user=self.super_user)

# Confirm if the object exist
self.assertTrue(
FacilityFlag.objects.filter(
external_id=self.facility_flag_1.external_id
).exists()
)
response = self.client.delete(self.get_url(self.facility_flag_1.external_id))
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

self.facility_flag_1.refresh_from_db()
self.assertFalse(
FacilityFlag.objects.filter(
external_id=self.facility_flag_1.external_id
).exists()
)

def test_creating_facility_flag_with_non_existing_flag(self):
self.client.force_authenticate(user=self.super_user)

Expand Down
15 changes: 15 additions & 0 deletions care/users/api/viewsets/user_flag.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,27 @@
from django_filters import rest_framework as filters
from rest_framework import viewsets

from care.users.api.serializers.user_flag import UserFlagSerializer
from care.users.models import UserFlag
from care.utils.custom_permissions import IsSuperUser


class UserFlagFilter(filters.FilterSet):
flag = filters.CharFilter(field_name="flag", lookup_expr="icontains")
user = filters.UUIDFilter(field_name="user__external_id")


class UserFlagViewSet(viewsets.ModelViewSet):
"""
CRUD operations for UserFlag model.
This viewset is restricted to superusers only and provides endpoints to manage user flags.
"""

queryset = UserFlag.objects.all()
serializer_class = UserFlagSerializer
permission_classes = [IsSuperUser]
lookup_field = "external_id"

filter_backends = [filters.DjangoFilterBackend]
filterset_class = UserFlagFilter
26 changes: 26 additions & 0 deletions care/users/tests/test_user_flags_api.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from rest_framework import status
from rest_framework.test import APITestCase

from care.users.models import UserFlag
from care.utils.registries.feature_flag import FlagRegistry, FlagType
from care.utils.tests.test_utils import TestUtils

Expand Down Expand Up @@ -49,11 +50,20 @@ def test_list_user_flags(self):
def test_create_user_flag(self):
self.client.force_authenticate(user=self.super_user)

response = self.client.post(self.get_url(), {})
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn("This field is required.", response.json()["flag"])
self.assertIn("This field is required.", response.json()["user"])

# Attempting to create a duplicate flag
response = self.client.post(
self.get_url(), {"flag": "TEST_FLAG", "user": self.user.external_id}
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn(
"The fields user, flag must make a unique set.",
response.json()["non_field_errors"],
)

# Creating a new user flag
response = self.client.post(
Expand Down Expand Up @@ -109,6 +119,22 @@ def test_patch_user_flag(self):
self.assertEqual(self.user_flag_1.flag, "TEST_FLAG")
self.assertEqual(self.user_flag_1.user.external_id, self.user_2.external_id)

def test_delete_user_flag(self):
self.client.force_authenticate(user=self.super_user)

# Confirm if the object exist
self.assertTrue(
UserFlag.objects.filter(external_id=self.user_flag_1.external_id).exists()
)

response = self.client.delete(self.get_url(self.user_flag_1.external_id))
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

self.user_flag_1.refresh_from_db()
self.assertFalse(
UserFlag.objects.filter(external_id=self.user_flag_1.external_id).exists()
)

def test_creating_user_flag_with_non_existing_flag(self):
self.client.force_authenticate(user=self.super_user)

Expand Down

0 comments on commit bf7a237

Please sign in to comment.