Fixes #4912: Fix image attachment API endpoint; add API view tests

This commit is contained in:
Jeremy Stretch 2020-07-27 14:24:15 -04:00
parent b17e47101c
commit a206b422fb
4 changed files with 57 additions and 1 deletions

View File

@ -5,6 +5,7 @@
### Bug Fixes ### Bug Fixes
* [#4905](https://github.com/netbox-community/netbox/issues/4905) - Fix front port count on device type view * [#4905](https://github.com/netbox-community/netbox/issues/4905) - Fix front port count on device type view
* [#4912](https://github.com/netbox-community/netbox/issues/4912) - Fix image attachment API endpoint
--- ---

View File

@ -8,6 +8,7 @@ __all__ = [
'NestedConfigContextSerializer', 'NestedConfigContextSerializer',
'NestedExportTemplateSerializer', 'NestedExportTemplateSerializer',
'NestedGraphSerializer', 'NestedGraphSerializer',
'NestedImageAttachmentSerializer',
'NestedJobResultSerializer', 'NestedJobResultSerializer',
'NestedTagSerializer', 'NestedTagSerializer',
] ]
@ -37,6 +38,14 @@ class NestedGraphSerializer(WritableNestedSerializer):
fields = ['id', 'url', 'name'] fields = ['id', 'url', 'name']
class NestedImageAttachmentSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:imageattachment-detail')
class Meta:
model = models.ImageAttachment
fields = ['id', 'url', 'name', 'image']
class NestedTagSerializer(WritableNestedSerializer): class NestedTagSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:tag-detail') url = serializers.HyperlinkedIdentityField(view_name='extras-api:tag-detail')

View File

@ -387,6 +387,8 @@ class ImageAttachment(models.Model):
auto_now_add=True auto_now_add=True
) )
objects = RestrictedQuerySet.as_manager()
class Meta: class Meta:
ordering = ('name', 'pk') # name may be non-unique ordering = ('name', 'pk') # name may be non-unique

View File

@ -10,7 +10,7 @@ from rq import Worker
from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Rack, RackGroup, RackRole, Site from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Rack, RackGroup, RackRole, Site
from extras.api.views import ReportViewSet, ScriptViewSet from extras.api.views import ReportViewSet, ScriptViewSet
from extras.models import ConfigContext, Graph, ExportTemplate, Tag from extras.models import ConfigContext, ExportTemplate, Graph, ImageAttachment, Tag
from extras.reports import Report from extras.reports import Report
from extras.scripts import BooleanVar, IntegerVar, Script, StringVar from extras.scripts import BooleanVar, IntegerVar, Script, StringVar
from utilities.testing import APITestCase, APIViewTestCases from utilities.testing import APITestCase, APIViewTestCases
@ -136,6 +136,50 @@ class TagTest(APIViewTestCases.APIViewTestCase):
Tag.objects.bulk_create(tags) Tag.objects.bulk_create(tags)
# TODO: Standardize to APIViewTestCase (needs create & update tests)
class ImageAttachmentTest(
APIViewTestCases.GetObjectViewTestCase,
APIViewTestCases.ListObjectsViewTestCase,
APIViewTestCases.DeleteObjectViewTestCase
):
model = ImageAttachment
brief_fields = ['id', 'image', 'name', 'url']
@classmethod
def setUpTestData(cls):
ct = ContentType.objects.get_for_model(Site)
site = Site.objects.create(name='Site 1', slug='site-1')
image_attachments = (
ImageAttachment(
content_type=ct,
object_id=site.pk,
name='Image Attachment 1',
image='http://example.com/image1.png',
image_height=100,
image_width=100
),
ImageAttachment(
content_type=ct,
object_id=site.pk,
name='Image Attachment 2',
image='http://example.com/image2.png',
image_height=100,
image_width=100
),
ImageAttachment(
content_type=ct,
object_id=site.pk,
name='Image Attachment 3',
image='http://example.com/image3.png',
image_height=100,
image_width=100
)
)
ImageAttachment.objects.bulk_create(image_attachments)
class ConfigContextTest(APIViewTestCases.APIViewTestCase): class ConfigContextTest(APIViewTestCases.APIViewTestCase):
model = ConfigContext model = ConfigContext
brief_fields = ['id', 'name', 'url'] brief_fields = ['id', 'name', 'url']