this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Adds route to fetch facility hubs (#2520)

* Sending hub and spoke data in facility serializer

* remove unwanted changes

* Added /hubs route to list hubs

* Update care/facility/api/viewsets/facility.py

Co-authored-by: Aakash Singh <mail@singhaakash.dev>

---------

Co-authored-by: Aakash Singh <mail@singhaakash.dev>

authored by

Shivank Kacker
Aakash Singh
and committed by
GitHub
e440d463 02c90560

+37
+16
care/facility/api/viewsets/facility.py
··· 204 204 context = super().get_serializer_context() 205 205 context["facility"] = facility 206 206 return context 207 + 208 + 209 + class FacilityHubsViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): 210 + queryset = FacilityHubSpoke.objects.all().select_related("spoke", "hub") 211 + serializer_class = FacilitySpokeSerializer 212 + permission_classes = (IsAuthenticated,) 213 + lookup_field = "external_id" 214 + 215 + def get_queryset(self): 216 + return self.queryset.filter(spoke=self.get_facility()) 217 + 218 + def get_facility(self): 219 + facilities = get_facility_queryset(self.request.user) 220 + return get_object_or_404( 221 + facilities.filter(external_id=self.kwargs["facility_external_id"]) 222 + )
+19
care/facility/tests/test_facility_api.py
··· 229 229 ) 230 230 self.assertIs(response.status_code, status.HTTP_400_BAD_REQUEST) 231 231 232 + def test_hubs_list(self): 233 + facility_a = self.create_facility( 234 + self.super_user, self.district, self.local_body 235 + ) 236 + facility_b = self.create_facility( 237 + self.super_user, self.district, self.local_body 238 + ) 239 + 240 + FacilityHubSpoke.objects.create(hub=facility_a, spoke=facility_b) 241 + 242 + self.client.force_authenticate(user=self.super_user) 243 + response = self.client.get(f"/api/v1/facility/{facility_b.external_id}/hubs/") 244 + self.assertIs(response.status_code, status.HTTP_200_OK) 245 + data = response.json() 246 + self.assertEqual(data["count"], 1) 247 + self.assertEqual( 248 + data["results"][0]["hub_object"]["id"], str(facility_a.external_id) 249 + ) 250 + 232 251 233 252 class FacilityCoverImageTests(TestUtils, APITestCase): 234 253 @classmethod
+2
config/api_router.py
··· 37 37 ) 38 38 from care.facility.api.viewsets.facility import ( 39 39 AllFacilityViewSet, 40 + FacilityHubsViewSet, 40 41 FacilitySpokesViewSet, 41 42 FacilityViewSet, 42 43 ) ··· 218 219 facility_nested_router.register( 219 220 r"spokes", FacilitySpokesViewSet, basename="facility-spokes" 220 221 ) 222 + facility_nested_router.register(r"hubs", FacilityHubsViewSet, basename="facility-hubs") 221 223 222 224 router.register("asset", AssetViewSet, basename="asset") 223 225 asset_nested_router = NestedSimpleRouter(router, r"asset", lookup="asset")