mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-26 09:16:10 -06:00
Add API & filterset tests
This commit is contained in:
parent
3773c1a8fa
commit
429eaeeb3d
0
netbox/core/tests/__init__.py
Normal file
0
netbox/core/tests/__init__.py
Normal file
93
netbox/core/tests/test_api.py
Normal file
93
netbox/core/tests/test_api.py
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
from django.urls import reverse
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
|
from ..choices import *
|
||||||
|
from ..models import *
|
||||||
|
from utilities.testing import APITestCase, APIViewTestCases
|
||||||
|
|
||||||
|
|
||||||
|
class AppTest(APITestCase):
|
||||||
|
|
||||||
|
def test_root(self):
|
||||||
|
url = reverse('core-api:api-root')
|
||||||
|
response = self.client.get('{}?format=api'.format(url), **self.header)
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
|
||||||
|
class DataSourceTest(APIViewTestCases.APIViewTestCase):
|
||||||
|
model = DataSource
|
||||||
|
brief_fields = ['display', 'id', 'name', 'url']
|
||||||
|
bulk_update_data = {
|
||||||
|
'enabled': False,
|
||||||
|
'description': 'foo bar baz',
|
||||||
|
}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
data_sources = (
|
||||||
|
DataSource(name='Data Source 1', type=DataSourceTypeChoices.LOCAL, source_url='file:///var/tmp/source1/'),
|
||||||
|
DataSource(name='Data Source 2', type=DataSourceTypeChoices.LOCAL, source_url='file:///var/tmp/source2/'),
|
||||||
|
DataSource(name='Data Source 3', type=DataSourceTypeChoices.LOCAL, source_url='file:///var/tmp/source3/'),
|
||||||
|
)
|
||||||
|
DataSource.objects.bulk_create(data_sources)
|
||||||
|
|
||||||
|
cls.create_data = [
|
||||||
|
{
|
||||||
|
'name': 'Data Source 4',
|
||||||
|
'type': DataSourceTypeChoices.GIT,
|
||||||
|
'source_url': 'https://example.com/git/source4'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Data Source 5',
|
||||||
|
'type': DataSourceTypeChoices.GIT,
|
||||||
|
'source_url': 'https://example.com/git/source5'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Data Source 6',
|
||||||
|
'type': DataSourceTypeChoices.GIT,
|
||||||
|
'source_url': 'https://example.com/git/source6'
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class DataFileTest(
|
||||||
|
APIViewTestCases.GetObjectViewTestCase,
|
||||||
|
APIViewTestCases.ListObjectsViewTestCase,
|
||||||
|
APIViewTestCases.GraphQLTestCase
|
||||||
|
):
|
||||||
|
model = DataFile
|
||||||
|
brief_fields = ['display', 'id', 'path', 'url']
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
datasource = DataSource.objects.create(
|
||||||
|
name='Data Source 1',
|
||||||
|
type=DataSourceTypeChoices.LOCAL,
|
||||||
|
source_url='file:///var/tmp/source1/'
|
||||||
|
)
|
||||||
|
|
||||||
|
data_files = (
|
||||||
|
DataFile(
|
||||||
|
source=datasource,
|
||||||
|
path='dir1/file1.txt',
|
||||||
|
last_updated=timezone.now(),
|
||||||
|
size=1000,
|
||||||
|
hash='442da078f0111cbdf42f21903724f6597c692535f55bdfbbea758a1ae99ad9e1'
|
||||||
|
),
|
||||||
|
DataFile(
|
||||||
|
source=datasource,
|
||||||
|
path='dir1/file2.txt',
|
||||||
|
last_updated=timezone.now(),
|
||||||
|
size=2000,
|
||||||
|
hash='a78168c7c97115bafd96450ed03ea43acec495094c5caa28f0d02e20e3a76cc2'
|
||||||
|
),
|
||||||
|
DataFile(
|
||||||
|
source=datasource,
|
||||||
|
path='dir1/file3.txt',
|
||||||
|
last_updated=timezone.now(),
|
||||||
|
size=3000,
|
||||||
|
hash='12b8827a14c4d5a2f30b6c6e2b7983063988612391c6cbe8ee7493b59054827a'
|
||||||
|
),
|
||||||
|
)
|
||||||
|
DataFile.objects.bulk_create(data_files)
|
120
netbox/core/tests/test_filtersets.py
Normal file
120
netbox/core/tests/test_filtersets.py
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from django.test import TestCase
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
|
from ..choices import *
|
||||||
|
from ..filtersets import *
|
||||||
|
from ..models import *
|
||||||
|
from utilities.testing import ChangeLoggedFilterSetTests
|
||||||
|
|
||||||
|
|
||||||
|
class DataSourceTestCase(TestCase, ChangeLoggedFilterSetTests):
|
||||||
|
queryset = DataSource.objects.all()
|
||||||
|
filterset = DataSourceFilterSet
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
data_sources = (
|
||||||
|
DataSource(
|
||||||
|
name='Data Source 1',
|
||||||
|
type=DataSourceTypeChoices.LOCAL,
|
||||||
|
source_url='file:///var/tmp/source1/',
|
||||||
|
status=DataSourceStatusChoices.NEW,
|
||||||
|
enabled=True
|
||||||
|
),
|
||||||
|
DataSource(
|
||||||
|
name='Data Source 2',
|
||||||
|
type=DataSourceTypeChoices.LOCAL,
|
||||||
|
source_url='file:///var/tmp/source2/',
|
||||||
|
status=DataSourceStatusChoices.SYNCING,
|
||||||
|
enabled=True
|
||||||
|
),
|
||||||
|
DataSource(
|
||||||
|
name='Data Source 3',
|
||||||
|
type=DataSourceTypeChoices.GIT,
|
||||||
|
source_url='https://example.com/git/source3',
|
||||||
|
status=DataSourceStatusChoices.COMPLETED,
|
||||||
|
enabled=False
|
||||||
|
),
|
||||||
|
)
|
||||||
|
DataSource.objects.bulk_create(data_sources)
|
||||||
|
|
||||||
|
def test_name(self):
|
||||||
|
params = {'name': ['Data Source 1', 'Data Source 2']}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
|
def test_type(self):
|
||||||
|
params = {'type': [DataSourceTypeChoices.LOCAL]}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
|
def test_enabled(self):
|
||||||
|
params = {'enabled': 'true'}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
params = {'enabled': 'false'}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
|
||||||
|
|
||||||
|
def test_status(self):
|
||||||
|
params = {'status': [DataSourceStatusChoices.NEW, DataSourceStatusChoices.SYNCING]}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
|
|
||||||
|
class DataFileTestCase(TestCase, ChangeLoggedFilterSetTests):
|
||||||
|
queryset = DataFile.objects.all()
|
||||||
|
filterset = DataFileFilterSet
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
data_sources = (
|
||||||
|
DataSource(name='Data Source 1', type=DataSourceTypeChoices.LOCAL, source_url='file:///var/tmp/source1/'),
|
||||||
|
DataSource(name='Data Source 2', type=DataSourceTypeChoices.LOCAL, source_url='file:///var/tmp/source2/'),
|
||||||
|
DataSource(name='Data Source 3', type=DataSourceTypeChoices.LOCAL, source_url='file:///var/tmp/source3/'),
|
||||||
|
)
|
||||||
|
DataSource.objects.bulk_create(data_sources)
|
||||||
|
|
||||||
|
data_files = (
|
||||||
|
DataFile(
|
||||||
|
source=data_sources[0],
|
||||||
|
path='dir1/file1.txt',
|
||||||
|
last_updated=datetime(2023, 1, 1, 0, 0, 0, tzinfo=timezone.utc),
|
||||||
|
size=1000,
|
||||||
|
hash='442da078f0111cbdf42f21903724f6597c692535f55bdfbbea758a1ae99ad9e1'
|
||||||
|
),
|
||||||
|
DataFile(
|
||||||
|
source=data_sources[1],
|
||||||
|
path='dir1/file2.txt',
|
||||||
|
last_updated=datetime(2023, 1, 2, 0, 0, 0, tzinfo=timezone.utc),
|
||||||
|
size=2000,
|
||||||
|
hash='a78168c7c97115bafd96450ed03ea43acec495094c5caa28f0d02e20e3a76cc2'
|
||||||
|
),
|
||||||
|
DataFile(
|
||||||
|
source=data_sources[2],
|
||||||
|
path='dir1/file3.txt',
|
||||||
|
last_updated=datetime(2023, 1, 3, 0, 0, 0, tzinfo=timezone.utc),
|
||||||
|
size=3000,
|
||||||
|
hash='12b8827a14c4d5a2f30b6c6e2b7983063988612391c6cbe8ee7493b59054827a'
|
||||||
|
),
|
||||||
|
)
|
||||||
|
DataFile.objects.bulk_create(data_files)
|
||||||
|
|
||||||
|
def test_source(self):
|
||||||
|
sources = DataSource.objects.all()
|
||||||
|
params = {'source_id': [sources[0].pk, sources[1].pk]}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
params = {'source': [sources[0].name, sources[1].name]}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
|
def test_path(self):
|
||||||
|
params = {'path': ['dir1/file1.txt', 'dir1/file2.txt']}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
|
def test_size(self):
|
||||||
|
params = {'size': [1000, 2000]}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
|
def test_hash(self):
|
||||||
|
params = {'hash': [
|
||||||
|
'442da078f0111cbdf42f21903724f6597c692535f55bdfbbea758a1ae99ad9e1',
|
||||||
|
'a78168c7c97115bafd96450ed03ea43acec495094c5caa28f0d02e20e3a76cc2',
|
||||||
|
]}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
Loading…
Reference in New Issue
Block a user