Skip to content

Commit cfdd7b5

Browse files
committed
fix breaking changes in drf
1 parent fc504e9 commit cfdd7b5

File tree

9 files changed

+193
-153
lines changed

9 files changed

+193
-153
lines changed

Pipfile

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,23 @@ boto3 = "==1.34.113"
1010
celery = "==5.3.6"
1111
django = "==4.2.10"
1212
django-environ = "==0.11.2"
13-
django-cors-headers = "==4.2.0"
13+
django-cors-headers = "==4.3.1"
1414
django-filter = "==24.2"
1515
django-hardcopy = "==0.1.4"
16-
django-maintenance-mode = "==0.21.0"
17-
django-model-utils = "==4.3.1"
16+
django-maintenance-mode = "==0.21.1"
17+
django-model-utils = "==4.5.0"
1818
django-multiselectfield = "==0.1.12"
1919
django-queryset-csv = "==1.1.0"
2020
django-ratelimit = "==4.1.0"
2121
django-redis = "==5.4.0"
22-
django-rest-passwordreset = "==1.3.0"
23-
django-simple-history = "==3.6.0"
24-
djangoql = "==0.17.1"
25-
djangorestframework = "==3.14.0"
22+
django-rest-passwordreset = "==1.4.1"
23+
django-simple-history = "==3.5.0"
24+
djangoql = "==0.18.1"
25+
djangorestframework = "==3.15.1"
2626
djangorestframework-simplejwt = "==5.3.1"
2727
dry-rest-permissions = "==0.1.10"
2828
drf-nested-routers = "==0.94.1"
29-
drf-spectacular = "==0.26.4"
29+
drf-spectacular = "==0.27.2"
3030
"fhir.resources" = "==6.5.0"
3131
gunicorn = "==22.0.0"
3232
healthy-django = "==0.1.0"

Pipfile.lock

Lines changed: 26 additions & 33 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

care/facility/api/viewsets/ambulance.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from django_filters import rest_framework as filters
2-
from drf_spectacular.utils import extend_schema, extend_schema_view
2+
from drf_spectacular.utils import extend_schema
33
from rest_framework import serializers, status
44
from rest_framework.decorators import action
55
from rest_framework.mixins import (
@@ -44,6 +44,7 @@ class AmbulanceViewSet(
4444
UserAccessMixin,
4545
RetrieveModelMixin,
4646
ListModelMixin,
47+
CreateModelMixin,
4748
UpdateModelMixin,
4849
DestroyModelMixin,
4950
GenericViewSet,
@@ -91,12 +92,3 @@ def remove_driver(self, request, *args, **kwargs):
9192

9293
driver.delete()
9394
return Response(status=status.HTTP_204_NO_CONTENT)
94-
95-
96-
@extend_schema_view(create=extend_schema(tags=["ambulance"]))
97-
class AmbulanceCreateViewSet(CreateModelMixin, GenericViewSet):
98-
permission_classes = (IsAuthenticated,)
99-
serializer_class = AmbulanceSerializer
100-
queryset = Ambulance.objects.filter(deleted=False)
101-
filter_backends = (filters.DjangoFilterBackend,)
102-
filterset_class = AmbulanceFilterSet

care/facility/tests/test_ambulance_api.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,7 @@ def test_create_ambulance(self):
9898
"""
9999

100100
# Test with invalid data
101-
res = self.client.post(
102-
self.get_url(action="create"), data=self.get_create_representation()
103-
)
101+
res = self.client.post(self.get_url(), data=self.get_create_representation())
104102
self.assertEqual(res.status_code, 400)
105103
self.assertEqual(res.json()["drivers"][0], "This field is required.")
106104

@@ -114,7 +112,7 @@ def test_create_ambulance(self):
114112
],
115113
}
116114
data.update(self.get_create_representation())
117-
res = self.client.post(self.get_url(action="create"), data=data, format="json")
115+
res = self.client.post(self.get_url(), data=data, format="json")
118116
self.assertEqual(res.status_code, 400)
119117
self.assertEqual(
120118
res.json()["non_field_errors"][0],
@@ -123,7 +121,7 @@ def test_create_ambulance(self):
123121

124122
# Test with valid data
125123
data.update({"price_per_km": 100})
126-
res = self.client.post(self.get_url(action="create"), data=data, format="json")
124+
res = self.client.post(self.get_url(), data=data, format="json")
127125
self.assertEqual(res.status_code, 201)
128126
self.assertTrue(
129127
Ambulance.objects.filter(vehicle_number=data["vehicle_number"]).exists()
@@ -136,19 +134,19 @@ def test_list_ambulance(self):
136134
res = self.client.get(self.get_url())
137135
self.assertEqual(res.status_code, 200)
138136
self.assertEqual(res.json()["count"], 1)
139-
self.assertDictContainsSubset(
140-
self.get_list_representation(self.ambulance), res.json()["results"][0]
141-
)
137+
expected = self.get_list_representation(self.ambulance)
138+
actual = res.json()["results"][0]
139+
self.assertEqual(actual, actual | expected)
142140

143141
def test_retrieve_ambulance(self):
144142
"""
145143
Test to retrieve ambulance
146144
"""
147145
res = self.client.get(f"/api/v1/ambulance/{self.ambulance.id}/")
148146
self.assertEqual(res.status_code, 200)
149-
self.assertDictContainsSubset(
150-
self.get_detail_representation(self.ambulance), res.json()
151-
)
147+
expected = self.get_detail_representation(self.ambulance)
148+
actual = res.json()
149+
self.assertEqual(actual, actual | expected)
152150

153151
def test_update_ambulance(self):
154152
"""

care/users/api/viewsets/users.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.core.cache import cache
22
from django.db.models import F, Q, Subquery
3+
from django.http import Http404
34
from django_filters import rest_framework as filters
45
from drf_spectacular.utils import extend_schema
56
from dry_rest_permissions.generics import DRYPermissions
@@ -150,6 +151,12 @@ def get_queryset(self):
150151
)
151152
return self.queryset.filter(query)
152153

154+
def get_object(self):
155+
try:
156+
return super().get_object()
157+
except Http404:
158+
raise Http404("User not found")
159+
153160
def get_serializer_class(self):
154161
if self.action == "list":
155162
return UserListSerializer

care/users/tests/test_api.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ def test_user_cannot_read_others(self):
175175
username = self.data_2["username"]
176176
response = self.client.get(f"/api/v1/users/{username}/")
177177
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
178-
self.assertEqual(response.json()["detail"], "Not found.")
178+
self.assertEqual(response.json()["detail"], "User not found")
179179

180180
def test_user_cannot_modify_others(self):
181181
"""Test a user can't modify others"""
@@ -189,7 +189,7 @@ def test_user_cannot_modify_others(self):
189189
},
190190
)
191191
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
192-
self.assertEqual(response.json()["detail"], "Not found.")
192+
self.assertEqual(response.json()["detail"], "User not found")
193193

194194
def test_user_cannot_delete_others(self):
195195
"""Test a user can't delete others"""

care/users/tests/test_auth.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,10 @@ def test_reset_password_with_invalid_token(self):
205205
{"token": "invalid_token", "password": "test@123"},
206206
)
207207
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
208-
self.assertEqual(response.data["detail"], "Not found.")
208+
self.assertEqual(
209+
response.json()["detail"],
210+
"The OTP password entered is not valid. Please check and try again.",
211+
)
209212

210213
def test_reset_password_with_expired_token(self):
211214
token = self.create_reset_password_token(user=self.user, expired=True)
@@ -214,4 +217,4 @@ def test_reset_password_with_expired_token(self):
214217
{"token": token.key, "password": "test@123"},
215218
)
216219
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
217-
self.assertEqual(response.data["detail"], "Not found.")
220+
self.assertEqual(response.json()["detail"], "The token has expired")

care/utils/tests/test_utils.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
from django.test import override_settings
88
from django.utils.timezone import make_aware, now
9-
from pytz import unicode
109
from rest_framework import status
1110

1211
from care.facility.models import (
@@ -565,13 +564,7 @@ def to_matching_type(name: str, value):
565564
value, (type(None), EverythingEquals)
566565
):
567566
return_value = value
568-
if isinstance(
569-
value,
570-
(
571-
str,
572-
unicode,
573-
),
574-
):
567+
if isinstance(value, str):
575568
return_value = datetime.strptime(value, "%Y-%m-%dT%H:%M:%S.%fZ")
576569
return (
577570
return_value.astimezone(tz=UTC)

0 commit comments

Comments
 (0)