Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions netbox/dcim/api/serializers_/rackunits.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,12 @@ class RackUnitSerializer(serializers.Serializer):
device = DeviceSerializer(nested=True, read_only=True)
occupied = serializers.BooleanField(read_only=True)
display = serializers.SerializerMethodField(read_only=True)
description = serializers.SerializerMethodField(read_only=True)

@extend_schema_field(OpenApiTypes.STR)
def get_display(self, obj):
return obj['name']

@extend_schema_field(OpenApiTypes.STR)
def get_description(self, obj):
return f'{obj["device"]}' if obj['device'] else None
28 changes: 28 additions & 0 deletions netbox/dcim/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,34 @@ def test_get_rack_elevation(self):
response = self.client.get(f'{url}?q=U10', **self.header)
self.assertEqual(response.data['count'], 2)

def test_get_rack_elevation_description_is_occupying_device_name(self):
"""
Verify occupied rack units include the occupying device in their description.
"""
rack = Rack.objects.first()
self.add_permissions('dcim.view_rack', 'dcim.view_device')
url = reverse('dcim-api:rack-elevation', kwargs={'pk': rack.pk})

device = create_test_device(
name='Device A',
site=rack.site,
rack=rack,
position=40,
face=DeviceFaceChoices.FACE_FRONT,
)

# Retrieve all units
response = self.client.get(url, **self.header)
self.assertHttpStatus(response, status.HTTP_200_OK)

occupied_unit = next(unit for unit in response.data['results'] if unit['name'] == 'U40')
self.assertEqual(occupied_unit['device']['id'], device.pk)
self.assertEqual(occupied_unit['description'], f'{device}')

unoccupied_unit = next(unit for unit in response.data['results'] if unit['name'] == 'U39')
self.assertEqual(unoccupied_unit['device'], None)
self.assertEqual(unoccupied_unit['description'], None)

def test_get_rack_elevation_svg(self):
"""
GET a single rack elevation in SVG format.
Expand Down