From 8f7d2b7f3cbbe8124dfec7f1f6e6fc8a7a8ea8c5 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Fri, 31 Mar 2017 18:37:32 +0200 Subject: [PATCH] test for subjects api --- smash/web/api_views.py | 65 +++++++++++++++++++----------------- smash/web/tests/functions.py | 11 ++++-- smash/web/tests/test_api.py | 40 +++++++++++++++++++++- 3 files changed, 82 insertions(+), 34 deletions(-) diff --git a/smash/web/api_views.py b/smash/web/api_views.py index a6fef53f..1d56a1fd 100644 --- a/smash/web/api_views.py +++ b/smash/web/api_views.py @@ -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: diff --git a/smash/web/tests/functions.py b/smash/web/tests/functions.py index cd6915a5..2088fa6a 100644 --- a/smash/web/tests/functions.py +++ b/smash/web/tests/functions.py @@ -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") diff --git a/smash/web/tests/test_api.py b/smash/web/tests/test_api.py index fd6128ce..38d92f4e 100644 --- a/smash/web/tests/test_api.py +++ b/smash/web/tests/test_api.py @@ -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) -- GitLab