Add some tests

This commit is contained in:
Aaron Kable
2026-01-08 15:44:41 +08:00
parent 4d30a59c9c
commit 9ed2e97068
3 changed files with 155 additions and 7 deletions

View File

@@ -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))

View File

@@ -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)

10
tox.ini
View File

@@ -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