From f25cee86c82bd9be8ee9dbd50cb7e24a97d83c93 Mon Sep 17 00:00:00 2001 From: Elijah Date: Fri, 24 Nov 2023 15:23:59 +0100 Subject: [PATCH] Added tests for Admin Dashboard model, view, template, and table --- idhub/tests/__init__.py | 0 idhub/tests/test_models.py | 17 +++++++++ idhub/tests/test_tables.py | 65 +++++++++++++++++++++++++++++++++++ idhub/tests/test_templates.py | 18 ++++++++++ idhub/tests/test_views.py | 50 +++++++++++++++++++++++++++ 5 files changed, 150 insertions(+) create mode 100644 idhub/tests/__init__.py create mode 100644 idhub/tests/test_models.py create mode 100644 idhub/tests/test_tables.py create mode 100644 idhub/tests/test_templates.py create mode 100644 idhub/tests/test_views.py diff --git a/idhub/tests/__init__.py b/idhub/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/idhub/tests/test_models.py b/idhub/tests/test_models.py new file mode 100644 index 0000000..1709861 --- /dev/null +++ b/idhub/tests/test_models.py @@ -0,0 +1,17 @@ +from django.test import TestCase +from idhub.models import Event +from idhub_auth.models import User + + +class EventModelTest(TestCase): + @classmethod + def setUpTestData(cls): + user = User.objects.create(email='testuser@email.com') + Event.objects.create(message='Test Event', type=1, user=user) + + def test_event_creation(self): + event = Event.objects.get(id=1) + self.assertEqual(event.message, 'Test Event') + self.assertEqual(event.get_type_name(), 'User registered') + + # Add more tests for other model methods and properties diff --git a/idhub/tests/test_tables.py b/idhub/tests/test_tables.py new file mode 100644 index 0000000..cde5acb --- /dev/null +++ b/idhub/tests/test_tables.py @@ -0,0 +1,65 @@ +from datetime import datetime + +from django.test import TestCase +from django.urls import reverse + +from idhub_auth.models import User +from idhub.admin.tables import DashboardTable +from idhub.models import Event + + +class AdminDashboardTableTest(TestCase): + def setUp(self): + self.admin_user = User.objects.create_superuser( + email='adminuser@mail.com', + password='adminpass12') + + @classmethod + def setUpTestData(cls): + # Creating test events with different dates + Event.objects.create(message='Event 1', type=1, + created=datetime(2023, 1, 3)) + Event.objects.create(message='Event 2', type=2, + created=datetime(2023, 1, 2)) + Event.objects.create(message='Event 3', type=3, + created=datetime(2023, 1, 25)) + + def test_sorting_by_date(self): + # Create the table + table = DashboardTable(Event.objects.all()) + + # Apply sorting + table.order_by = 'created' + + # Fetch the sorted records + sorted_records = list(table.rows) + + # Verify the order is as expected + self.assertTrue(sorted_records[0].record.created + < sorted_records[1].record.created) + self.assertTrue(sorted_records[1].record.created + < sorted_records[2].record.created) + + def test_table_in_template(self): + self.client.login(email='adminuser@mail.com', password='adminpass12') + response = self.client.get(reverse('idhub:admin_dashboard')) + + self.assertTemplateUsed(response, 'idhub/custom_table.html') + + def test_table_data(self): + Event.objects.create(message="test_event", type=2) + Event.objects.create(message="test_event", type=9) + + table = DashboardTable(Event.objects.all()) + self.assertTrue(isinstance(table, DashboardTable)) + self.assertEqual(len(table.rows), Event.objects.count()) + + def test_table_columns(self): + table = DashboardTable(Event.objects.all()) + expected_columns = ['type', 'message', 'created'] + for column in expected_columns: + self.assertIn(column, table.columns) + + def test_pagination(self): + # TODO + pass diff --git a/idhub/tests/test_templates.py b/idhub/tests/test_templates.py new file mode 100644 index 0000000..d04e0ca --- /dev/null +++ b/idhub/tests/test_templates.py @@ -0,0 +1,18 @@ +from django.urls import reverse +from django.test import Client, TestCase + +from idhub_auth.models import User + + +class TemplateTest(TestCase): + def setUp(self): + self.client = Client() + self.admin_user = User.objects.create_superuser( + email='adminuser@mail.com', + password='adminpass12') + + def test_dashboard_template(self): + self.client.login(email='adminuser@mail.com', password='adminpass12') + response = self.client.get(reverse('idhub:admin_dashboard')) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'idhub/base_admin.html') diff --git a/idhub/tests/test_views.py b/idhub/tests/test_views.py new file mode 100644 index 0000000..ee5f3f4 --- /dev/null +++ b/idhub/tests/test_views.py @@ -0,0 +1,50 @@ +from django.urls import reverse +from django.test import TestCase + +from idhub_auth.models import User + + +class AdminDashboardViewTest(TestCase): + + def setUp(self): + self.user = User.objects.create_user(email='normaluser@mail.com', + password='testpass12') + self.admin_user = User.objects.create_superuser( + email='adminuser@mail.com', + password='adminpass12') + + def test_view_url_exists_at_desired_location(self): + response = self.client.get('/admin/dashboard/', follow=True) + + self.assertEqual(response.status_code, 200) + + def test_view_redirects_to_login_when_not_authenticated(self): + response = self.client.get(reverse("idhub:admin_dashboard"), + follow=True) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'auth/login.html') + + def test_view_redirects_on_incorrect_login_attempt(self): + self.client.login(email='adminuser@mail.com', password='wrongpass') + response = self.client.get(reverse('idhub:admin_dashboard')) + + self.assertEqual(response.status_code, 302) + + def test_view_redirects_to_login_on_incorrect_login_attempt(self): + self.client.login(email='adminuser@mail.com', password='wrongpass') + response = self.client.get(reverse('idhub:admin_dashboard'), + follow=True) + + self.assertTemplateUsed(response, 'auth/login.html') + + def test_login_admin_user(self): + self.client.login(email='adminuser@mail.com', password='adminpass12') + response = self.client.get(reverse('idhub:admin_dashboard')) + + self.assertEqual(response.status_code, 200) + + def test_view_uses_correct_template(self): + self.client.login(email='adminuser@mail.com', password='adminpass12') + response = self.client.get(reverse('idhub:admin_dashboard')) + + self.assertTemplateUsed(response, 'idhub/admin/dashboard.html')