Skip to content
Snippets Groups Projects
Commit 8f7d2b7f authored by Piotr Gawron's avatar Piotr Gawron
Browse files

test for subjects api

parent b8e0d183
No related branches found
No related tags found
1 merge request!34Performance of subject list
Pipeline #
......@@ -2,6 +2,7 @@ from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from models import Subject, Worker, AppointmentType, Location
from views import e500_error
from views.subject import SUBJECT_LIST_GENERIC, SUBJECT_LIST_NO_VISIT, SUBJECT_LIST_REQUIRE_CONTACT
from views.notifications import get_subjects_with_no_visit, get_subjects_with_reminder
......@@ -126,46 +127,48 @@ def get_subjects_filtered(subjects, filters):
@login_required
def subjects(request, type):
# id of the query from dataTable: https://datatables.net/manual/server-side
draw = int(request.GET.get("draw", "-1"))
try:
# id of the query from dataTable: https://datatables.net/manual/server-side
draw = int(request.GET.get("draw", "-1"))
start = int(request.GET.get("start", "0"))
length = int(request.GET.get("length", "10"))
order = int(request.GET.get("order[0][column]", "0"))
order_dir = request.GET.get("order[0][dir]", "asc")
order_column = request.GET.get("columns[" + str(order) + "][data]", "last_name")
start = int(request.GET.get("start", "0"))
length = int(request.GET.get("length", "10"))
order = int(request.GET.get("order[0][column]", "0"))
order_dir = request.GET.get("order[0][dir]", "asc")
order_column = request.GET.get("columns[" + str(order) + "][data]", "last_name")
filters = []
column_id = 0
while request.GET.get("columns[" + str(column_id) + "][search][value]", "unknown") != "unknown":
val = request.GET.get("columns[" + str(column_id) + "][search][value]", "unknown")
if val != "":
filters.append([request.GET.get("columns[" + str(column_id) + "][data]"), val])
column_id += 1
filters = []
column_id = 0
while request.GET.get("columns[" + str(column_id) + "][search][value]", "unknown") != "unknown":
val = request.GET.get("columns[" + str(column_id) + "][search][value]", "unknown")
if val != "":
filters.append([request.GET.get("columns[" + str(column_id) + "][data]"), val])
column_id += 1
all_subjects = get_subjects(request, type)
all_subjects = get_subjects(request, type)
count = all_subjects.count()
count = all_subjects.count()
ordered_subjects = get_subjects_order(all_subjects, order_column, order_dir)
filtered_subjects = get_subjects_filtered(ordered_subjects, filters)
sliced_subjects = filtered_subjects[start:(start + length)]
ordered_subjects = get_subjects_order(all_subjects, order_column, order_dir)
filtered_subjects = get_subjects_filtered(ordered_subjects, filters)
sliced_subjects = filtered_subjects[start:(start + length)]
subjects = sliced_subjects
subjects = sliced_subjects
count_filtered = filtered_subjects.count()
count_filtered = filtered_subjects.count()
data = []
for subject in subjects:
data.append(serialize_subject(subject))
return JsonResponse({
"draw": draw,
"recordsTotal": count,
"recordsFiltered": count_filtered,
"data": data,
})
data = []
for subject in subjects:
data.append(serialize_subject(subject))
return JsonResponse({
"draw": draw,
"recordsTotal": count,
"recordsFiltered": count_filtered,
"data": data,
})
except:
return e500_error(request)
def get_yes_no(val):
if val:
......
......@@ -7,6 +7,13 @@ from web.models.constants import SEX_CHOICES_MALE, SUBJECT_TYPE_CHOICES_CONTROL
from web.views.notifications import get_today_midnight_date
def create_get_suffix(params):
result = "?"
for key in params:
result += key + "=" + str(params[key]) + "&"
return result
def create_location(name="test"):
return Location.objects.create(name=name)
......@@ -27,14 +34,14 @@ def create_appointment_type():
)
def create_subject():
def create_subject(id=1):
return Subject.objects.create(
first_name="Piotr",
last_name="Gawron",
default_location=get_test_location(),
sex=SEX_CHOICES_MALE,
type=SUBJECT_TYPE_CHOICES_CONTROL,
screening_number="piotr's number",
screening_number="piotr's number" + str(id),
country="france")
......
......@@ -6,7 +6,9 @@ from django.test import Client
from django.test import TestCase
from django.urls import reverse
from web.tests.functions import create_subject, create_worker, create_appointment_type, create_location
from web.tests.functions import create_subject, create_worker, create_appointment_type, create_location, \
create_get_suffix
from web.views.subject import SUBJECT_LIST_GENERIC, SUBJECT_LIST_NO_VISIT, SUBJECT_LIST_REQUIRE_CONTACT
__author__ = 'Piotr Gawron'
......@@ -149,3 +151,39 @@ class TestApi(TestCase):
found = True
self.assertTrue(found)
def test_subjects_general(self):
response = self.client.get(reverse('web.api.subjects', kwargs={'type': SUBJECT_LIST_GENERIC}))
self.assertEqual(response.status_code, 200)
def test_subjects_no_visit(self):
response = self.client.get(reverse('web.api.subjects', kwargs={'type': SUBJECT_LIST_NO_VISIT}))
self.assertEqual(response.status_code, 200)
def test_subjects_require_contact(self):
response = self.client.get(reverse('web.api.subjects', kwargs={'type': SUBJECT_LIST_REQUIRE_CONTACT}))
self.assertEqual(response.status_code, 200)
def test_subjects_invalid(self):
response = self.client.get(reverse('web.api.subjects', kwargs={'type': "bla"}))
self.assertEqual(response.status_code, 500)
def test_subjects_general_search(self):
name = "Piotrek"
self.subject.first_name = name
self.subject.save()
params = {
"columns[0][search][value]": "another_name",
"columns[0][data]": "first_name"
}
url = ("%s" + create_get_suffix(params)) % reverse('web.api.subjects', kwargs={'type': SUBJECT_LIST_GENERIC})
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertFalse(name in response.content)
params["columns[0][search][value]"]= name
url = ("%s" + create_get_suffix(params)) % reverse('web.api.subjects', kwargs={'type': SUBJECT_LIST_GENERIC})
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertTrue(name in response.content)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment