Skip to content

Commit 75b6419

Browse files
committed
Remove filter on latest change request api (#2348)
* Remove filter on latest change request api and add previous data on validate * Remove required field on changerequest serialzier * Change the logic of revert api * Remove previous data on updated field * Change full serializer naming to reverted data * Fix test cases on latest change request
1 parent b9c096e commit 75b6419

File tree

2 files changed

+18
-16
lines changed

2 files changed

+18
-16
lines changed

local_units/test_views.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,6 @@ def test_create_local_unit_administrative(self):
385385
# Checking the request changes for the local unit is created or not
386386
request_change = LocalUnitChangeRequest.objects.all()
387387
self.assertEqual(request_change.count(), 1)
388-
self.assertEqual(request_change.first().previous_data["id"], response.data["id"])
389388

390389
def test_create_update_local_unit_health(self):
391390
region = Region.objects.create(name=2)

local_units/views.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ def create(self, request, *args, **kwargs):
7373
# Creating a new change request for the local unit
7474
LocalUnitChangeRequest.objects.create(
7575
local_unit=serializer.instance,
76-
previous_data=serializer.data,
7776
status=LocalUnitChangeRequest.Status.PENDING,
7877
triggered_by=request.user,
7978
)
@@ -82,6 +81,8 @@ def create(self, request, *args, **kwargs):
8281
def update(self, request, *args, **kwargs):
8382
local_unit = self.get_object()
8483

84+
previous_data = PrivateLocalUnitDetailSerializer(local_unit, context={"request": request}).data
85+
8586
# NOTE: Checking if the local unit is locked.
8687
# TODO: This should be moved to a permission class and validators can update the local unit
8788
if local_unit.is_locked:
@@ -96,7 +97,7 @@ def update(self, request, *args, **kwargs):
9697
# Creating a new change request for the local unit
9798
LocalUnitChangeRequest.objects.create(
9899
local_unit=local_unit,
99-
previous_data=serializer.data,
100+
previous_data=previous_data,
100101
status=LocalUnitChangeRequest.Status.PENDING,
101102
triggered_by=request.user,
102103
)
@@ -123,7 +124,6 @@ def get_validate(self, request, pk=None, version=None):
123124
return bad_request("No change request found to validate")
124125

125126
# Checking the validator type
126-
127127
validator = LocalUnitChangeRequest.Validator.LOCAL
128128
if request.user.is_superuser or request.user.has_perm("local_units.local_unit_global_validator"):
129129
validator = LocalUnitChangeRequest.Validator.GLOBAL
@@ -165,7 +165,7 @@ def get_revert(self, request, pk=None, version=None):
165165
if local_unit.validated:
166166
return bad_request("Local unit is already validated and cannot be reverted")
167167

168-
full_serializer = PrivateLocalUnitDetailSerializer(local_unit, context={"request": request})
168+
rejected_data = PrivateLocalUnitDetailSerializer(local_unit, context={"request": request}).data
169169

170170
serializer = RejectedReasonSerialzier(data=request.data)
171171
serializer.is_valid(raise_exception=True)
@@ -184,17 +184,21 @@ def get_revert(self, request, pk=None, version=None):
184184
change_request_instance.rejected_reason = reason
185185
change_request_instance.updated_by = request.user
186186
change_request_instance.updated_at = timezone.now()
187-
change_request_instance.rejected_data = full_serializer.data
187+
change_request_instance.rejected_data = rejected_data
188188
change_request_instance.save(update_fields=["status", "rejected_reason", "updated_at", "updated_by", "rejected_data"])
189189

190-
# Reverting the last change request related to this local unit
191-
last_change_request = LocalUnitChangeRequest.objects.filter(
192-
local_unit=local_unit,
193-
status=LocalUnitChangeRequest.Status.APPROVED,
194-
).last()
195-
196-
if not last_change_request:
197-
return bad_request("No change request found to revert")
190+
# NOTE: Handling the first change request
191+
if change_request_instance.previous_data == {}:
192+
total_change_request_count = LocalUnitChangeRequest.objects.filter(local_unit=local_unit).count()
193+
assert (
194+
total_change_request_count == 1
195+
), f"There should be one change request and it is the first one {total_change_request_count}"
196+
local_unit.is_deprecated = True
197+
local_unit.deprecated_reason = reason
198+
local_unit.save(
199+
update_fields=["is_deprecated", "deprecated_reason"],
200+
)
201+
return response.Response(PrivateLocalUnitDetailSerializer(local_unit, context={"request": request}).data)
198202

199203
# NOTE: Unlocking the reverted local unit
200204
local_unit.is_locked = False
@@ -203,7 +207,7 @@ def get_revert(self, request, pk=None, version=None):
203207
# reverting the previous data of change request to local unit by passing through serializer
204208
serializer = PrivateLocalUnitDetailSerializer(
205209
local_unit,
206-
data=last_change_request.previous_data,
210+
data=change_request_instance.previous_data,
207211
context={"request": request},
208212
partial=True,
209213
)
@@ -224,7 +228,6 @@ def get_latest_changes(self, request, pk=None, version=None):
224228

225229
change_request = LocalUnitChangeRequest.objects.filter(
226230
local_unit=local_unit,
227-
status=LocalUnitChangeRequest.Status.APPROVED,
228231
).last()
229232

230233
if not change_request:

0 commit comments

Comments
 (0)