Jeremy Stretch 6 лет назад
Родитель
Сommit
22b8a45a71
1 измененных файлов с 72 добавлено и 0 удалено
  1. 72 0
      netbox/extras/tests/test_changelog.py

+ 72 - 0
netbox/extras/tests/test_changelog.py

@@ -0,0 +1,72 @@
+from django.urls import reverse
+from rest_framework import status
+
+from dcim.models import Site
+from extras.constants import OBJECTCHANGE_ACTION_CREATE, OBJECTCHANGE_ACTION_UPDATE, OBJECTCHANGE_ACTION_DELETE
+from extras.models import ObjectChange
+from utilities.testing import APITestCase
+
+
+class ChangeLogTest(APITestCase):
+
+    def test_create_object(self):
+
+        data = {
+            'name': 'Test Site 1',
+            'slug': 'test-site-1',
+        }
+
+        self.assertEqual(ObjectChange.objects.count(), 0)
+
+        url = reverse('dcim-api:site-list')
+        response = self.client.post(url, data, format='json', **self.header)
+
+        self.assertHttpStatus(response, status.HTTP_201_CREATED)
+        self.assertEqual(ObjectChange.objects.count(), 1)
+
+        oc = ObjectChange.objects.first()
+        site = Site.objects.get(pk=response.data['id'])
+        self.assertEqual(oc.changed_object, site)
+        self.assertEqual(oc.action, OBJECTCHANGE_ACTION_CREATE)
+
+    def test_update_object(self):
+
+        site = Site(name='Test Site 1', slug='test-site-1')
+        site.save()
+
+        data = {
+            'name': 'Test Site X',
+            'slug': 'test-site-x',
+        }
+
+        self.assertEqual(ObjectChange.objects.count(), 0)
+
+        url = reverse('dcim-api:site-detail', kwargs={'pk': site.pk})
+        response = self.client.put(url, data, format='json', **self.header)
+
+        self.assertHttpStatus(response, status.HTTP_200_OK)
+        self.assertEqual(ObjectChange.objects.count(), 1)
+        site = Site.objects.get(pk=response.data['id'])
+        self.assertEqual(site.name, data['name'])
+
+        oc = ObjectChange.objects.first()
+        self.assertEqual(oc.changed_object, site)
+        self.assertEqual(oc.action, OBJECTCHANGE_ACTION_UPDATE)
+
+    def test_delete_object(self):
+
+        site = Site(name='Test Site 1', slug='test-site-1')
+        site.save()
+
+        self.assertEqual(ObjectChange.objects.count(), 0)
+
+        url = reverse('dcim-api:site-detail', kwargs={'pk': site.pk})
+        response = self.client.delete(url, **self.header)
+
+        self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
+        self.assertEqual(Site.objects.count(), 0)
+
+        oc = ObjectChange.objects.first()
+        self.assertEqual(oc.changed_object, None)
+        self.assertEqual(oc.object_repr, site.name)
+        self.assertEqual(oc.action, OBJECTCHANGE_ACTION_DELETE)