diff --git a/care/facility/tests/test_unlink_district_admins.py b/care/facility/tests/test_unlink_district_admins.py index edee3d67a9..8f7ee3674f 100644 --- a/care/facility/tests/test_unlink_district_admins.py +++ b/care/facility/tests/test_unlink_district_admins.py @@ -79,3 +79,10 @@ def test_unlink_faciltity_admin_different_district(self): ) self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertEqual(response.json()["detail"], "User not found") + + def test_unlink_home_facility_by_nurse(self): + self.client.force_login(self.staff1) + response = self.client.delete( + f"/api/v1/users/{self.staff1.username}/clear_home_facility/" + ) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) diff --git a/care/users/api/viewsets/users.py b/care/users/api/viewsets/users.py index 167a1047f2..bbf587dec7 100644 --- a/care/users/api/viewsets/users.py +++ b/care/users/api/viewsets/users.py @@ -287,6 +287,11 @@ def clear_home_facility(self, request, *args, **kwargs): if not user.home_facility: raise ValidationError({"home_facility": "No Home Facility Present"}) if ( + requesting_user.id == user.id + and requesting_user.user_type == User.TYPE_VALUE_MAP["Nurse"] + ): + pass + elif ( requesting_user.user_type < User.TYPE_VALUE_MAP["DistrictAdmin"] or requesting_user.user_type in User.READ_ONLY_TYPES ):