mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Move model_to_dict() into assertInstanceEqual(); clean up test data
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
from django.contrib.auth.models import Permission, User
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.forms.models import model_to_dict as model_to_dict_
|
||||
from django.forms.models import model_to_dict
|
||||
from django.test import Client, TestCase as _TestCase, override_settings
|
||||
from django.urls import reverse, NoReverseMatch
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from users.models import Token
|
||||
from .utils import disable_warnings, model_to_dict, post_data
|
||||
from .utils import disable_warnings, post_data
|
||||
|
||||
|
||||
class TestCase(_TestCase):
|
||||
@@ -57,12 +57,12 @@ class TestCase(_TestCase):
|
||||
expected_status, response.status_code, getattr(response, 'data', 'No data')
|
||||
))
|
||||
|
||||
def assertInstanceEquals(self, instance, data):
|
||||
def assertInstanceEqual(self, instance, data):
|
||||
"""
|
||||
Compare a model instance to a dictionary, checking that its attribute values match those specified
|
||||
in the dictionary.
|
||||
"""
|
||||
model_dict = model_to_dict_(instance, fields=data.keys())
|
||||
model_dict = model_to_dict(instance, fields=data.keys())
|
||||
|
||||
for key in list(model_dict.keys()):
|
||||
|
||||
@@ -233,7 +233,7 @@ class StandardTestCases:
|
||||
|
||||
self.assertEqual(initial_count + 1, self.model.objects.count())
|
||||
instance = self.model.objects.order_by('-pk').first()
|
||||
self.assertDictEqual(model_to_dict(instance), self.form_data)
|
||||
self.assertInstanceEqual(instance, self.form_data)
|
||||
|
||||
@override_settings(EXEMPT_VIEW_PERMISSIONS=[])
|
||||
def test_edit_object(self):
|
||||
@@ -257,7 +257,7 @@ class StandardTestCases:
|
||||
self.assertHttpStatus(response, 302)
|
||||
|
||||
instance = self.model.objects.get(pk=instance.pk)
|
||||
self.assertDictEqual(model_to_dict(instance), self.form_data)
|
||||
self.assertInstanceEqual(instance, self.form_data)
|
||||
|
||||
@override_settings(EXEMPT_VIEW_PERMISSIONS=[])
|
||||
def test_delete_object(self):
|
||||
@@ -335,13 +335,8 @@ class StandardTestCases:
|
||||
response = self.client.post(**request)
|
||||
self.assertHttpStatus(response, 302)
|
||||
|
||||
bulk_edit_fields = self.bulk_edit_data.keys()
|
||||
for i, instance in enumerate(self.model.objects.filter(pk__in=pk_list)):
|
||||
self.assertDictEqual(
|
||||
model_to_dict(instance, fields=bulk_edit_fields),
|
||||
self.bulk_edit_data,
|
||||
msg="Instance {} failed to validate after bulk edit: {}".format(i, instance)
|
||||
)
|
||||
self.assertInstanceEqual(instance, self.bulk_edit_data)
|
||||
|
||||
@override_settings(EXEMPT_VIEW_PERMISSIONS=[])
|
||||
def test_bulk_delete_objects(self):
|
||||
@@ -398,4 +393,4 @@ class StandardTestCases:
|
||||
|
||||
self.assertEqual(initial_count + expected_count, self.model.objects.count())
|
||||
for instance in self.model.objects.order_by('-pk')[:expected_count]:
|
||||
self.assertInstanceEquals(instance, self.bulk_create_data)
|
||||
self.assertInstanceEqual(instance, self.bulk_create_data)
|
||||
|
||||
@@ -2,35 +2,6 @@ import logging
|
||||
from contextlib import contextmanager
|
||||
|
||||
from django.contrib.auth.models import Permission, User
|
||||
from django.forms.models import model_to_dict as _model_to_dict
|
||||
|
||||
|
||||
def model_to_dict(instance, fields=None, exclude=None):
|
||||
"""
|
||||
Customized wrapper for Django's built-in model_to_dict(). Does the following:
|
||||
- Excludes the instance ID field
|
||||
- Exclude any fields prepended with an underscore
|
||||
- Convert any assigned tags to a comma-separated string
|
||||
"""
|
||||
_exclude = ['id']
|
||||
if exclude is not None:
|
||||
_exclude += exclude
|
||||
|
||||
model_dict = _model_to_dict(instance, fields=fields, exclude=_exclude)
|
||||
|
||||
for key in list(model_dict.keys()):
|
||||
if key.startswith('_'):
|
||||
del model_dict[key]
|
||||
|
||||
# TODO: Differentiate between tags assigned to the instance and a M2M field for tags (ex: ConfigContext)
|
||||
elif key == 'tags':
|
||||
model_dict[key] = ','.join(sorted([tag.name for tag in model_dict['tags']]))
|
||||
|
||||
# Convert ManyToManyField to list of instance PKs
|
||||
elif model_dict[key] and type(model_dict[key]) in (list, tuple) and hasattr(model_dict[key][0], 'pk'):
|
||||
model_dict[key] = [obj.pk for obj in model_dict[key]]
|
||||
|
||||
return model_dict
|
||||
|
||||
|
||||
def post_data(data):
|
||||
|
||||
Reference in New Issue
Block a user