mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Closes #2658: Avalable VLANs API endpoint for VLAN groups
This commit is contained in:
@@ -695,6 +695,82 @@ class VLANGroupTest(APIViewTestCases.APIViewTestCase):
|
||||
)
|
||||
VLANGroup.objects.bulk_create(vlan_groups)
|
||||
|
||||
def test_list_available_vlans(self):
|
||||
"""
|
||||
Test retrieval of all available VLANs within a group.
|
||||
"""
|
||||
self.add_permissions('ipam.view_vlan')
|
||||
vlangroup = VLANGroup.objects.first()
|
||||
|
||||
vlans = (
|
||||
VLAN(vid=10, name='VLAN 10', group=vlangroup),
|
||||
VLAN(vid=20, name='VLAN 20', group=vlangroup),
|
||||
VLAN(vid=30, name='VLAN 30', group=vlangroup),
|
||||
)
|
||||
VLAN.objects.bulk_create(vlans)
|
||||
|
||||
# Retrieve all available VLANs
|
||||
url = reverse('ipam-api:vlangroup-available-vlans', kwargs={'pk': vlangroup.pk})
|
||||
response = self.client.get(url, **self.header)
|
||||
|
||||
self.assertEqual(len(response.data), 4094 - len(vlans))
|
||||
available_vlans = {vlan['vid'] for vlan in response.data}
|
||||
for vlan in vlans:
|
||||
self.assertNotIn(vlan.vid, available_vlans)
|
||||
|
||||
def test_create_single_available_vlan(self):
|
||||
"""
|
||||
Test the creation of a single available VLAN.
|
||||
"""
|
||||
self.add_permissions('ipam.view_vlan', 'ipam.add_vlan')
|
||||
vlangroup = VLANGroup.objects.first()
|
||||
VLAN.objects.create(vid=1, name='VLAN 1', group=vlangroup)
|
||||
|
||||
data = {
|
||||
"name": "First VLAN",
|
||||
}
|
||||
url = reverse('ipam-api:vlangroup-available-vlans', kwargs={'pk': vlangroup.pk})
|
||||
response = self.client.post(url, data, format='json', **self.header)
|
||||
|
||||
self.assertHttpStatus(response, status.HTTP_201_CREATED)
|
||||
self.assertEqual(response.data['name'], data['name'])
|
||||
self.assertEqual(response.data['group']['id'], vlangroup.pk)
|
||||
self.assertEqual(response.data['vid'], 2)
|
||||
|
||||
def test_create_multiple_available_vlans(self):
|
||||
"""
|
||||
Test the creation of multiple available VLANs.
|
||||
"""
|
||||
self.add_permissions('ipam.view_vlan', 'ipam.add_vlan')
|
||||
vlangroup = VLANGroup.objects.first()
|
||||
|
||||
vlans = (
|
||||
VLAN(vid=1, name='VLAN 1', group=vlangroup),
|
||||
VLAN(vid=3, name='VLAN 3', group=vlangroup),
|
||||
VLAN(vid=5, name='VLAN 5', group=vlangroup),
|
||||
)
|
||||
VLAN.objects.bulk_create(vlans)
|
||||
|
||||
data = (
|
||||
{"name": "First VLAN"},
|
||||
{"name": "Second VLAN"},
|
||||
{"name": "Third VLAN"},
|
||||
)
|
||||
url = reverse('ipam-api:vlangroup-available-vlans', kwargs={'pk': vlangroup.pk})
|
||||
response = self.client.post(url, data, format='json', **self.header)
|
||||
|
||||
self.assertHttpStatus(response, status.HTTP_201_CREATED)
|
||||
self.assertEqual(len(response.data), 3)
|
||||
self.assertEqual(response.data[0]['name'], data[0]['name'])
|
||||
self.assertEqual(response.data[0]['group']['id'], vlangroup.pk)
|
||||
self.assertEqual(response.data[0]['vid'], 2)
|
||||
self.assertEqual(response.data[1]['name'], data[1]['name'])
|
||||
self.assertEqual(response.data[1]['group']['id'], vlangroup.pk)
|
||||
self.assertEqual(response.data[1]['vid'], 4)
|
||||
self.assertEqual(response.data[2]['name'], data[2]['name'])
|
||||
self.assertEqual(response.data[2]['group']['id'], vlangroup.pk)
|
||||
self.assertEqual(response.data[2]['vid'], 6)
|
||||
|
||||
|
||||
class VLANTest(APIViewTestCases.APIViewTestCase):
|
||||
model = VLAN
|
||||
|
||||
Reference in New Issue
Block a user