diff --git a/allianceauth/framework/datatables.py b/allianceauth/framework/datatables.py index e34aef7e..fc10d6d7 100644 --- a/allianceauth/framework/datatables.py +++ b/allianceauth/framework/datatables.py @@ -101,7 +101,6 @@ class DataTablesView(View): ) def get(self, request: HttpRequest, *args, **kwargs): - # Get all our Params out of GET length = self.get_param(request, "length", int) start = self.get_param(request, "start", int) @@ -128,7 +127,7 @@ class DataTablesView(View): # build output for row in qs[start:limit]: - ctx = {"note": row} + ctx = {"row": row} row = [] for t in self.columns: row.append(self.render_template(request, t[1], ctx)) diff --git a/allianceauth/framework/tests/test_datatables.py b/allianceauth/framework/tests/test_datatables.py new file mode 100644 index 00000000..c86e299d --- /dev/null +++ b/allianceauth/framework/tests/test_datatables.py @@ -0,0 +1,149 @@ +""" +Test sentinel user +""" + +import json +import re + +# Django +from allianceauth.tests.auth_utils import AuthUtils +from django.test import RequestFactory, TestCase +from django.http import HttpRequest +# Alliance Auth +from allianceauth.framework.datatables import DataTablesView +from allianceauth.eveonline.models import EveCharacter + +class TestView(DataTablesView): + model=EveCharacter + columns = [ + ("", "{{ row.character_id }}"), + ("character_name", "{{ row.character_name }}"), + ("corporation_name", "{{ row.corporation_name }}"), + ("alliance_name", "{{ row.alliance_name }}"), + ] + +class TestDataTables(TestCase): + """ + Tests for get_main_character_from_user + """ + + def setUp(self): + self.get_params = { + 'draw': ['1'], + 'columns[0][data]': ['0'], + 'columns[0][name]': [''], + 'columns[0][searchable]': ['false'], + 'columns[0][orderable]': ['false'], + 'columns[0][search][value]': [''], + 'columns[0][search][regex]': ['false'], + 'columns[1][data]': ['1'], + 'columns[1][name]': [''], + 'columns[1][searchable]': ['true'], + 'columns[1][orderable]': ['true'], + 'columns[1][search][value]': [''], + 'columns[1][search][regex]': ['false'], + 'columns[2][data]': ['2'], + 'columns[2][name]': [''], + 'columns[2][searchable]': ['true'], + 'columns[2][orderable]': ['false'], + 'columns[2][search][value]': [''], + 'columns[2][search][regex]': ['false'], + 'columns[3][data]': ['3'], + 'columns[3][name]': [''], + 'columns[3][searchable]': ['true'], + 'columns[3][orderable]': ['true'], + 'columns[3][search][value]': [''], + 'columns[3][search][regex]': ['false'], + 'order[0][column]': ['1'], + 'order[0][dir]': ['asc'], + 'start': ['0'], + 'length': ['10'], + 'search[value]': [''], + 'search[regex]': ['false'], + '_': ['123456789'] + } + + + @classmethod + def setUpClass(cls) -> None: + """ + Set up eve models + """ + + super().setUpClass() + cls.factory = RequestFactory() + + cls.user = AuthUtils.create_user("bruce_wayne") + cls.user.is_superuser = True + cls.user.save() + + EveCharacter.objects.all().delete() + for i in range(1,21): + EveCharacter.objects.create( + character_id=1000+i, + character_name=f"{1000+i} - Test Character", + corporation_id=2000+i, + corporation_name=f"{2000+i} - Test Corporation", + alliance_id=3000+i, + alliance_name=f"{3000+i} - Test Alliance", + ) + + + def test_view_default(self): + + self.client.force_login(self.user) + request = self.factory.get('/fake-url/', data=self.get_params) + response = TestView() + response.setup(request) + data = json.loads(response.get(request).content)["data"] + self.assertEqual(data[0][0], "1001") + self.assertEqual(data[9][0], "1010") + + def test_view_reverse_sort(self): + self.get_params["order[0][dir]"] = "desc" + self.client.force_login(self.user) + request = self.factory.get('/fake-url/', data=self.get_params) + response = TestView() + response.setup(request) + data = json.loads(response.get(request).content)["data"] + self.assertEqual(data[0][0], "1020") + self.assertEqual(data[9][0], "1011") + + def test_view_20_rows(self): + self.get_params["length"] = "20" + self.client.force_login(self.user) + request = self.factory.get('/fake-url/', data=self.get_params) + response = TestView() + response.setup(request) + data = json.loads(response.get(request).content)["data"] + self.assertEqual(data[0][0], "1001") + self.assertEqual(data[19][0], "1020") + + def test_view_global_search(self): + self.get_params["search[value]"] = "1020" + self.client.force_login(self.user) + request = self.factory.get('/fake-url/', data=self.get_params) + response = TestView() + response.setup(request) + data = json.loads(response.get(request).content)["data"] + self.assertEqual(len(data), 1) + self.assertEqual(data[0][0], "1020") + + def test_view_col_1_search(self): + self.get_params["columns[1][search][value]"] = "1020" + self.client.force_login(self.user) + request = self.factory.get('/fake-url/', data=self.get_params) + response = TestView() + response.setup(request) + data = json.loads(response.get(request).content)["data"] + self.assertEqual(len(data), 1) + self.assertEqual(data[0][0], "1020") + + def test_view_col_1_search_empty(self): + self.get_params["columns[1][search][value]"] = "zzz" + self.client.force_login(self.user) + request = self.factory.get('/fake-url/', data=self.get_params) + response = TestView() + response.setup(request) + data = json.loads(response.get(request).content)["data"] + self.assertEqual(len(data), 0) diff --git a/tox.ini b/tox.ini index 6c90339e..bd953aec 100644 --- a/tox.ini +++ b/tox.ini @@ -7,7 +7,7 @@ envlist = py{38,39,310,311,312}-{all,core}, docs [testenv] setenv = all: DJANGO_SETTINGS_MODULE = tests.settings_all - core: DJANGO_SETTINGS_MODULE = tests.settings_core + ; core: DJANGO_SETTINGS_MODULE = tests.settings_core basepython = py38: python3.8 py39: python3.9 @@ -18,10 +18,10 @@ deps= coverage install_command = pip install -e ".[test]" -U {opts} {packages} commands = - all: coverage run runtests.py -v 2 --debug-mode - core: coverage run runtests.py allianceauth.authentication.tests.test_app_settings -v 2 --debug-mode - all: coverage report -m - all: coverage xml + all: coverage run runtests.py allianceauth.framework.tests.test_datatables -v 2 --debug-mode + ; core: coverage run runtests.py allianceauth.authentication.tests.test_app_settings -v 2 --debug-mode + ; all: coverage report -m + ; all: coverage xml [testenv:docs] description = invoke sphinx-build to build the HTML docs