IdHub/idhub/tests/test_tables.py

163 lines
5.7 KiB
Python

import json
from datetime import datetime
from unittest.mock import MagicMock
from django.conf import settings
from django.test import TestCase
from django.urls import reverse
from django.core.exceptions import FieldError
from idhub_auth.models import User
from idhub.admin.tables import DashboardTable, UserTable, TemplateTable
from idhub.models import Event, Membership, Rol, UserRol, Service, Schemas
class AdminDashboardTableTest(TestCase):
def setUp(self):
self.admin_user = User.objects.create_superuser(
email='adminuser@example.org',
password='adminpass12')
self.admin_user.accept_gdpr=True
self.admin_user.save()
@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@example.org', 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
class UserTableTest(TestCase):
def setUp(self):
self.user1 = User.objects.create(email="user1@example.com")
self.user2 = User.objects.create(email="user2@example.com")
Membership.objects.create(user=self.user1,
type=Membership.Types.BENEFICIARY)
# Set up roles and services
service = Service.objects.create(domain="Test Service")
role = Rol.objects.create(name="Role 1")
service.rol.add(role)
UserRol.objects.create(user=self.user1, service=service)
self.table = UserTable(User.objects.all())
def test_membership_column_render(self):
# Get the user instance for the first row
user = self.table.rows[0].record
# Use the render_membership method of UserTable
rendered_column = self.table.columns['membership'].render(user)
self.assertIn("Beneficiary", str(rendered_column))
def test_role_column_render(self):
# Get the user instance for the first row
user = self.table.rows[0].record
# Use the render_role method of UserTable
rendered_column = self.table.columns['role'].render(user)
self.assertIn("Role 1", str(rendered_column))
class TemplateTableTest(TestCase):
def setUp(self):
self.table = TemplateTable(Schemas.objects.all())
self.create_schemas(amount=3)
def create_schemas(self, amount):
for i in range(amount):
self.create_schemas_object("testname" + str(i), "testdesc" + str(i))
def create_schemas_object(self, name, description):
data = self.format_data_for_json_reader(name, description)
Schemas.objects.create(
type="testy",
file_schema="filey",
data=data,
created_at=datetime.now()
)
def format_data_for_json_reader(self, name, description):
v = {
"name": [{
"lang": settings.LANGUAGE_CODE,
"value": name
}],
"description": [{
"lang": settings.LANGUAGE_CODE,
"value": description
}]
}
return json.dumps(v)
# return '{"name": "'+name+'", "description": "'+description+'"}'
def test_order_table_by_name_throws_no_exception(self):
try:
# Apply sorting
self.table.order_by = 'name'
except FieldError:
self.fail("Ordering template table by name raised FieldError")
def test_order_table_by_name_correctly_orders(self):
table = TemplateTable(Schemas.objects.all(), order_by="name")
# Fetch the sorted records
sorted_records = list(table.rows)
# Verify the order is as expected
self.assertLess(sorted_records[0].record.name,
sorted_records[1].record.name)
self.assertLess(sorted_records[1].record.name,
sorted_records[2].record.name)
def test_order_table_by_description_works(self):
try:
# Apply sorting
self.table.order_by = 'description'
except FieldError:
self.fail("Ordering template table by description raised FieldError")