1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Fixed API tests

This commit is contained in:
Jeremy Stretch
2016-08-22 17:15:20 -04:00
parent b9dcf9ca12
commit 3b36a35b9a
5 changed files with 24 additions and 8 deletions

View File

@ -93,7 +93,7 @@ class RackDetailSerializer(RackSerializer):
class Meta(RackSerializer.Meta): class Meta(RackSerializer.Meta):
fields = ['id', 'name', 'facility_id', 'display_name', 'site', 'group', 'tenant', 'role', 'type', 'width', fields = ['id', 'name', 'facility_id', 'display_name', 'site', 'group', 'tenant', 'role', 'type', 'width',
'u_height', 'comments', 'front_units', 'rear_units'] 'u_height', 'comments', 'custom_fields', 'front_units', 'rear_units']
def get_front_units(self, obj): def get_front_units(self, obj):
units = obj.get_rack_units(face=RACK_FACE_FRONT) units = obj.get_rack_units(face=RACK_FACE_FRONT)

View File

@ -5,6 +5,7 @@ from rest_framework.settings import api_settings
from rest_framework.views import APIView from rest_framework.views import APIView
from django.conf import settings from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.http import Http404 from django.http import Http404
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
@ -430,6 +431,13 @@ class RelatedConnectionsView(APIView):
Retrieve all connections related to a given console/power/interface connection Retrieve all connections related to a given console/power/interface connection
""" """
def __init__(self):
super(RelatedConnectionsView, self).__init__()
# Custom fields
self.content_type = ContentType.objects.get_for_model(Device)
self.custom_fields = self.content_type.custom_fields.prefetch_related('choices')
def get(self, request): def get(self, request):
peer_device = request.GET.get('peer-device') peer_device = request.GET.get('peer-device')
@ -454,7 +462,7 @@ class RelatedConnectionsView(APIView):
# Initialize response skeleton # Initialize response skeleton
response = { response = {
'device': serializers.DeviceSerializer(device).data, 'device': serializers.DeviceSerializer(device, context={'view': self}).data,
'console-ports': [], 'console-ports': [],
'power-ports': [], 'power-ports': [],
'interfaces': [], 'interfaces': [],

View File

@ -21,6 +21,7 @@ class SiteTest(APITestCase):
'physical_address', 'physical_address',
'shipping_address', 'shipping_address',
'comments', 'comments',
'custom_fields',
'count_prefixes', 'count_prefixes',
'count_vlans', 'count_vlans',
'count_racks', 'count_racks',
@ -46,7 +47,8 @@ class SiteTest(APITestCase):
'type', 'type',
'width', 'width',
'u_height', 'u_height',
'comments' 'comments',
'custom_fields',
] ]
graph_fields = [ graph_fields = [
@ -125,7 +127,8 @@ class RackTest(APITestCase):
'type', 'type',
'width', 'width',
'u_height', 'u_height',
'comments' 'comments',
'custom_fields',
] ]
detail_fields = [ detail_fields = [
@ -141,6 +144,7 @@ class RackTest(APITestCase):
'width', 'width',
'u_height', 'u_height',
'comments', 'comments',
'custom_fields',
'front_units', 'front_units',
'rear_units' 'rear_units'
] ]
@ -337,6 +341,7 @@ class DeviceTest(APITestCase):
'primary_ip4', 'primary_ip4',
'primary_ip6', 'primary_ip6',
'comments', 'comments',
'custom_fields',
] ]
nested_fields = ['id', 'name', 'display_name'] nested_fields = ['id', 'name', 'display_name']

View File

@ -1,6 +1,6 @@
from rest_framework import serializers from rest_framework import serializers
from extras.models import CF_TYPE_SELECT, CustomFieldChoice, CustomFieldValue, Graph from extras.models import CF_TYPE_SELECT, CustomFieldChoice, Graph
class CustomFieldSerializer(serializers.Serializer): class CustomFieldSerializer(serializers.Serializer):
@ -17,14 +17,17 @@ class CustomFieldSerializer(serializers.Serializer):
# Attach any defined CustomFieldValues to their respective CustomFields # Attach any defined CustomFieldValues to their respective CustomFields
for cfv in obj.custom_field_values.all(): for cfv in obj.custom_field_values.all():
# Suppress database lookups for CustomFieldChoices. Instead, use the cached choice set from the view # Attempt to suppress database lookups for CustomFieldChoices by using the cached choice set from the view
# context. # context.
if cfv.field.type == CF_TYPE_SELECT: if cfv.field.type == CF_TYPE_SELECT and hasattr(self, 'custom_field_choices'):
cfc = { cfc = {
'id': int(cfv.serialized_value), 'id': int(cfv.serialized_value),
'value': self.context['view'].custom_field_choices[int(cfv.serialized_value)] 'value': self.context['view'].custom_field_choices[int(cfv.serialized_value)]
} }
fields[cfv.field.name] = CustomFieldChoiceSerializer(instance=cfc).data fields[cfv.field.name] = CustomFieldChoiceSerializer(instance=cfc).data
# Fall back to hitting the database in case we're in a view that doesn't inherit CustomFieldModelAPIView.
elif cfv.field.type == CF_TYPE_SELECT:
fields[cfv.field.name] = CustomFieldChoiceSerializer(instance=cfv.value).data
else: else:
fields[cfv.field.name] = cfv.value fields[cfv.field.name] = cfv.value

View File

@ -9,7 +9,7 @@ from django.shortcuts import get_object_or_404
from circuits.models import Provider from circuits.models import Provider
from dcim.models import Site, Device, Interface, InterfaceConnection from dcim.models import Site, Device, Interface, InterfaceConnection
from extras.models import CustomFieldChoice, Graph, TopologyMap, GRAPH_TYPE_INTERFACE, GRAPH_TYPE_PROVIDER, GRAPH_TYPE_SITE from extras.models import Graph, TopologyMap, GRAPH_TYPE_INTERFACE, GRAPH_TYPE_PROVIDER, GRAPH_TYPE_SITE
from .serializers import GraphSerializer from .serializers import GraphSerializer