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