Fixes: #4230 - Fixes filtering by position on elevation endpoint

* Add tests for rack elevation filtering
* Add q variable to serializers for RackElevationDetailFilterSerializer
* Add code to allow filtering of position on the rack elevation
This commit is contained in:
Dan Sheppard 2020-02-22 08:16:29 -06:00
parent 1a997610c7
commit 2b75e05ea7
3 changed files with 31 additions and 0 deletions

View File

@ -172,6 +172,10 @@ class RackReservationSerializer(ValidatedModelSerializer):
class RackElevationDetailFilterSerializer(serializers.Serializer): class RackElevationDetailFilterSerializer(serializers.Serializer):
q = serializers.CharField(
required=False,
default=None
)
face = serializers.ChoiceField( face = serializers.ChoiceField(
choices=DeviceFaceChoices, choices=DeviceFaceChoices,
default=DeviceFaceChoices.FACE_FRONT default=DeviceFaceChoices.FACE_FRONT

View File

@ -237,6 +237,11 @@ class RackViewSet(CustomFieldModelViewSet):
expand_devices=data['expand_devices'] expand_devices=data['expand_devices']
) )
# Enable filtering rack units by ID
q = data['q']
if q:
elevation = [u for u in elevation if q in str(u['id']) or q in str(u['name'])]
page = self.paginate_queryset(elevation) page = self.paginate_queryset(elevation)
if page is not None: if page is not None:
rack_units = serializers.RackUnitSerializer(page, many=True, context={'request': request}) rack_units = serializers.RackUnitSerializer(page, many=True, context={'request': request})

View File

@ -596,6 +596,28 @@ class RackTest(APITestCase):
self.assertEqual(response.data['count'], 42) self.assertEqual(response.data['count'], 42)
def test_get_elevation_rack_units(self):
url = '{}?q=3'.format(reverse('dcim-api:rack-elevation', kwargs={'pk': self.rack1.pk}))
response = self.client.get(url, **self.header)
self.assertEqual(response.data['count'], 13)
url = '{}?q=U3'.format(reverse('dcim-api:rack-elevation', kwargs={'pk': self.rack1.pk}))
response = self.client.get(url, **self.header)
self.assertEqual(response.data['count'], 11)
url = '{}?q=10'.format(reverse('dcim-api:rack-elevation', kwargs={'pk': self.rack1.pk}))
response = self.client.get(url, **self.header)
self.assertEqual(response.data['count'], 1)
url = '{}?q=U20'.format(reverse('dcim-api:rack-elevation', kwargs={'pk': self.rack1.pk}))
response = self.client.get(url, **self.header)
self.assertEqual(response.data['count'], 1)
def test_get_rack_elevation(self): def test_get_rack_elevation(self):
url = reverse('dcim-api:rack-elevation', kwargs={'pk': self.rack1.pk}) url = reverse('dcim-api:rack-elevation', kwargs={'pk': self.rack1.pk})