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

Merge branch 'develop' into develop-2.10

This commit is contained in:
Jeremy Stretch
2020-12-01 11:42:55 -05:00
18 changed files with 197 additions and 119 deletions

View File

@@ -174,6 +174,7 @@ class APIViewTestCases:
class CreateObjectViewTestCase(APITestCase):
create_data = []
validation_excluded_fields = []
def test_create_object_without_permission(self):
"""
@@ -205,6 +206,7 @@ class APIViewTestCases:
self.assertInstanceEqual(
self._get_queryset().get(pk=response.data['id']),
self.create_data[0],
exclude=self.validation_excluded_fields,
api=True
)
@@ -232,12 +234,14 @@ class APIViewTestCases:
self.assertInstanceEqual(
self._get_queryset().get(pk=obj['id']),
self.create_data[i],
exclude=self.validation_excluded_fields,
api=True
)
class UpdateObjectViewTestCase(APITestCase):
update_data = {}
bulk_update_data = None
validation_excluded_fields = []
def test_update_object_without_permission(self):
"""
@@ -270,7 +274,12 @@ class APIViewTestCases:
response = self.client.patch(url, update_data, format='json', **self.header)
self.assertHttpStatus(response, status.HTTP_200_OK)
instance.refresh_from_db()
self.assertInstanceEqual(instance, update_data, api=True)
self.assertInstanceEqual(
instance,
update_data,
exclude=self.validation_excluded_fields,
api=True
)
def test_bulk_update_objects(self):
"""

View File

@@ -126,20 +126,25 @@ class TestCase(_TestCase):
err_message = f"Expected HTTP status {expected_status}; received {response.status_code}: {err}"
self.assertEqual(response.status_code, expected_status, err_message)
def assertInstanceEqual(self, instance, data, api=False):
def assertInstanceEqual(self, instance, data, exclude=None, api=False):
"""
Compare a model instance to a dictionary, checking that its attribute values match those specified
in the dictionary.
:instance: Python object instance
:data: Dictionary of test data used to define the instance
:api: Set to True is the data is a JSON representation of the instance
:param instance: Python object instance
:param data: Dictionary of test data used to define the instance
:param exclude: List of fields to exclude from comparison (e.g. passwords, which get hashed)
:param api: Set to True is the data is a JSON representation of the instance
"""
model_dict = self.model_to_dict(instance, fields=data.keys(), api=api)
if exclude is None:
exclude = []
# Omit any dictionary keys which are not instance attributes
fields = [k for k in data.keys() if k not in exclude]
model_dict = self.model_to_dict(instance, fields=fields, api=api)
# Omit any dictionary keys which are not instance attributes or have been excluded
relevant_data = {
k: v for k, v in data.items() if hasattr(instance, k)
k: v for k, v in data.items() if hasattr(instance, k) and k not in exclude
}
self.assertDictEqual(model_dict, relevant_data)