diff --git a/smash/web/tests/test_api.py b/smash/web/tests/test_api.py index 56aea99bf571e4dc3c88f32acb80c9811a8d2b38..762001b13da911d651779e672295d8af52313e7a 100644 --- a/smash/web/tests/test_api.py +++ b/smash/web/tests/test_api.py @@ -9,7 +9,8 @@ from django.urls import reverse 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 -from web.api_views import get_subjects_order +from web.api_views import get_subjects_order, get_subjects_filtered, serialize_subject + from web.models import Subject @@ -188,6 +189,24 @@ class TestApi(TestCase): self.assertEqual(response.status_code, 200) self.assertTrue(name in response.content) + def check_subject_filtered(self, filters, result): + subjects = get_subjects_filtered(Subject.objects.all(), filters) + self.assertEqual(len(result), subjects.count()) + for index in range(len(result)): + self.assertEqual(result[index], subjects[index]) + + def check_subject_ordered(self, order, result): + subjects = get_subjects_order(Subject.objects.all(), order, "asc") + self.assertEqual(len(result), subjects.count()) + for index in range(len(result)): + self.assertEqual(result[index], subjects[index]) + + subjects = get_subjects_order(Subject.objects.all(), order, "desc") + length = len(result) + self.assertEqual(length, subjects.count()) + for index in range(length): + self.assertEqual(result[length - index - 1], subjects[index]) + def test_subjects_sort_nd_number(self): subject = self.subject subject.nd_number = "PPP" @@ -197,10 +216,12 @@ class TestApi(TestCase): subject2.nd_number = "QQQ" subject2.save() - subjects = get_subjects_order(Subject.objects.all(), "nd_number", "desc") + self.check_subject_ordered("nd_number", [subject, subject2]) - self.assertEqual(subject2, subjects[0]) - self.assertEqual(subject, subjects[1]) + def test_subjects_sort_default_location(self): + subject = self.subject + + self.check_subject_ordered("default_location", [subject]) def test_subjects_sort_screening_number(self): subject = self.subject @@ -211,10 +232,7 @@ class TestApi(TestCase): subject2.screening_number = "QQQ" subject2.save() - subjects = get_subjects_order(Subject.objects.all(), "screening_number", "asc") - - self.assertEqual(subject, subjects[0]) - self.assertEqual(subject2, subjects[1]) + self.check_subject_ordered("screening_number", [subject, subject2]) def test_subjects_sort_last_name(self): subject = self.subject @@ -225,10 +243,7 @@ class TestApi(TestCase): subject2.last_name = "YYY" subject2.save() - subjects = get_subjects_order(Subject.objects.all(), "last_name", "desc") - - self.assertEqual(subject2, subjects[0]) - self.assertEqual(subject, subjects[1]) + self.check_subject_ordered("last_name", [subject, subject2]) def test_subjects_sort_dead(self): subject = self.subject @@ -239,13 +254,7 @@ class TestApi(TestCase): subject2.dead = False subject2.save() - subjects = get_subjects_order(Subject.objects.all(), "dead", "asc") - self.assertEqual(subject2, subjects[0]) - self.assertEqual(subject, subjects[1]) - - subjects = get_subjects_order(Subject.objects.all(), "dead", "desc") - self.assertEqual(subject, subjects[0]) - self.assertEqual(subject2, subjects[1]) + self.check_subject_ordered("dead", [subject2, subject]) def test_subjects_sort_resigned(self): subject = self.subject @@ -256,13 +265,7 @@ class TestApi(TestCase): subject2.resigned = False subject2.save() - subjects = get_subjects_order(Subject.objects.all(), "resigned", "asc") - self.assertEqual(subject2, subjects[0]) - self.assertEqual(subject, subjects[1]) - - subjects = get_subjects_order(Subject.objects.all(), "resigned", "desc") - self.assertEqual(subject, subjects[0]) - self.assertEqual(subject2, subjects[1]) + self.check_subject_ordered("resigned", [subject2, subject]) def test_subjects_sort_postponed(self): subject = self.subject @@ -273,12 +276,92 @@ class TestApi(TestCase): subject2.postponed = False subject2.save() - subjects = get_subjects_order(Subject.objects.all(), "postponed", "asc") - self.assertEqual(subject2, subjects[0]) - self.assertEqual(subject, subjects[1]) + self.check_subject_ordered("postponed", [subject2, subject]) + + def test_subjects_filter_dead(self): + subject = self.subject + subject.dead = True + subject.save() + + subject2 = create_subject(2) + subject2.dead = False + subject2.save() + + self.check_subject_filtered([["dead", "true"]], [subject]) + self.check_subject_filtered([["dead", "false"]], [subject2]) + + def test_subjects_filter_nd_number(self): + subject = self.subject + subject.nd_number = "PPP" + subject.save() + + subject2 = create_subject(2) + subject2.nd_number = "QQQ" + subject2.save() + + self.check_subject_filtered([["nd_number", "P"]], [subject]) + + def test_subjects_filter_screening_number(self): + subject = self.subject + subject.screening_number = "PPP" + subject.save() + + subject2 = create_subject(2) + subject2.screening_number = "QQQ" + subject2.save() - subjects = get_subjects_order(Subject.objects.all(), "postponed", "desc") - self.assertEqual(subject, subjects[0]) - self.assertEqual(subject2, subjects[1]) + self.check_subject_filtered([["screening_number", "Q"]], [subject2]) + def test_subjects_filter_last_name(self): + subject = self.subject + subject.last_name = "XXX" + subject.save() + + subject2 = create_subject(2) + subject2.last_name = "YYY" + subject2.save() + + self.check_subject_filtered([["last_name", "Q"]], []) + + def test_subjects_filter_resigned(self): + subject = self.subject + subject.resigned = True + subject.save() + + subject2 = create_subject(2) + subject2.resigned = False + subject2.save() + + self.check_subject_filtered([["resigned", "true"]], [subject]) + self.check_subject_filtered([["resigned", "false"]], [subject2]) + + def test_subjects_filter_postponed(self): + subject = self.subject + subject.postponed = True + subject.save() + + subject2 = create_subject(2) + subject2.postponed = False + subject2.save() + + self.check_subject_filtered([["postponed", "true"]], [subject]) + self.check_subject_filtered([["postponed", "false"]], [subject2]) + + def test_subjects_filter_default_location(self): + subject = self.subject + + self.check_subject_filtered([["default_location", str(subject.default_location.id)]], [subject]) + self.check_subject_filtered([["default_location", "-1"]], []) + + def test_subjects_filter_unknown(self): + subject = self.subject + + self.check_subject_filtered([["some_unknown", "zxczxc"]], [subject]) + self.check_subject_filtered([["", ""]], [subject]) + + def test_serialize_subject(self): + subject = self.subject + subject.dead = True + subject_json = serialize_subject(subject); + self.assertEqual("YES", subject_json["dead"]);