diff --git a/netbox_awx_plugin/tests/test_views.py b/netbox_awx_plugin/tests/test_views.py new file mode 100644 index 0000000000000000000000000000000000000000..135d33755aa3d863e0a60ec0017f832ed9b2fe9e --- /dev/null +++ b/netbox_awx_plugin/tests/test_views.py @@ -0,0 +1,85 @@ +# tests/test_views.py + +from django.test import TestCase, Client +from django.urls import reverse +from netbox_awx_plugin.models import AWX, AWXInventory +from django.contrib.auth.models import User +from unittest.mock import patch + + +class ViewsTestCase(TestCase): + + def setUp(self): + # Create a test superuser and log in + self.user = User.objects.create_superuser('testuser', password='testpassword') + self.client = Client() + self.client.login(username='testuser', password='testpassword') + + # Create an AWX instance and inventory + self.awx = AWX.objects.create( + name='Test AWX', + url='https://awx.example.com', + token='token123' + ) + self.awx_inventory = AWXInventory.objects.create( + awx=self.awx, + inventory_id=1, + enabled=True, + ) + + def test_awx_list_view(self): + url = reverse('plugins:netbox_awx_plugin:awx_list') + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + self.assertContains(response, self.awx.name) + + def test_awx_detail_view(self): + url = reverse('plugins:netbox_awx_plugin:awx', args=[self.awx.pk]) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + self.assertContains(response, self.awx.name) + + def test_awx_add_view(self): + url = reverse('plugins:netbox_awx_plugin:awx_add') + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + data = { + 'name': 'New AWX', + 'url': 'https://new-awx.example.com', + 'token': 'newtoken123', + } + response = self.client.post(url, data) + self.assertEqual(response.status_code, 302) + self.assertTrue(AWX.objects.filter(name='New AWX').exists()) + + def test_awx_edit_view(self): + url = reverse('plugins:netbox_awx_plugin:awx_edit', args=[self.awx.pk]) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + data = { + 'name': 'Updated AWX', + 'url': self.awx.url, + 'token': self.awx.token, + } + response = self.client.post(url, data) + self.assertEqual(response.status_code, 302) + self.awx.refresh_from_db() + self.assertEqual(self.awx.name, 'Updated AWX') + + def test_awx_delete_view(self): + url = reverse('plugins:netbox_awx_plugin:awx_delete', args=[self.awx.pk]) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + response = self.client.post(url, data={'confirm': True}) + self.assertEqual(response.status_code, 302) + self.assertFalse(AWX.objects.filter(pk=self.awx.pk).exists()) + + + @patch('netbox_awx_plugin.views.Job.enqueue') + def test_awxinventory_sync_view(self, mock_enqueue): + url = reverse('plugins:netbox_awx_plugin:awxinventory_sync', args=[self.awx_inventory.pk]) + response = self.client.post(url) + self.assertEqual(response.status_code, 200) + messages = list(response.context['messages']) + self.assertTrue(any("Queued job" in str(message) for message in messages)) + mock_enqueue.assert_called_once() \ No newline at end of file