diff --git a/smash/web/tests/api_views/test_visit.py b/smash/web/tests/api_views/test_visit.py index c77c67ae46b0967da123b2492b0d4815bc044538..e475967e12ae40297104c04685050fbefa739726 100644 --- a/smash/web/tests/api_views/test_visit.py +++ b/smash/web/tests/api_views/test_visit.py @@ -1,14 +1,18 @@ # coding=utf-8 +import datetime import json import logging from django.urls import reverse +from web.api_views.visit import get_visits_filtered, get_visits_order +from web.models import Visit from web.models.study_visit_list import VISIT_LIST_GENERIC, VISIT_LIST_EXCEEDED_TIME, VISIT_LIST_UNFINISHED, \ VISIT_LIST_MISSING_APPOINTMENTS, VISIT_LIST_APPROACHING_WITHOUT_APPOINTMENTS, \ VISIT_LIST_APPROACHING_FOR_MAIL_CONTACT from web.tests import LoggedInWithWorkerTestCase from web.tests.functions import create_study_subject, create_get_suffix, create_visit +from web.views.notifications import get_today_midnight_date logger = logging.getLogger(__name__) @@ -17,6 +21,7 @@ class TestVisitApi(LoggedInWithWorkerTestCase): def setUp(self): super(TestVisitApi, self).setUp() self.study_subject = create_study_subject() + self.visit = create_visit(self.study_subject) def test_get_columns(self): response = self.client.get(reverse('web.api.visits.columns', kwargs={'visit_list_type': VISIT_LIST_GENERIC})) @@ -26,7 +31,8 @@ class TestVisitApi(LoggedInWithWorkerTestCase): self.assertTrue(len(columns) > 0) def test_get_columns_for_time_exceeded(self): - response = self.client.get(reverse('web.api.visits.columns', kwargs={'visit_list_type': VISIT_LIST_EXCEEDED_TIME})) + response = self.client.get( + reverse('web.api.visits.columns', kwargs={'visit_list_type': VISIT_LIST_EXCEEDED_TIME})) self.assertEqual(response.status_code, 200) columns = json.loads(response.content)['columns'] @@ -81,3 +87,96 @@ class TestVisitApi(LoggedInWithWorkerTestCase): response = self.client.get(url) self.assertEqual(response.status_code, 200) self.assertTrue(name in response.content) + + def check_visit_filtered(self, filters, result): + subjects = get_visits_filtered(Visit.objects.all(), filters) + self.assertEqual(len(result), subjects.count()) + for index in range(len(result)): + self.assertEqual(result[index], subjects[index]) + + def check_visit_ordered(self, order, result): + visits = get_visits_order(Visit.objects.all(), order, "asc") + self.assertEqual(len(result), visits.count()) + for index in range(len(result)): + self.assertEqual(result[index], visits[index]) + + visits = get_visits_order(Visit.objects.all(), order, "desc") + length = len(result) + self.assertEqual(length, visits.count()) + for index in range(length): + self.assertEqual(result[length - index - 1], visits[index]) + + def test_visits_sort_first_name(self): + subject = self.study_subject + subject.subject.first_name = "PPP" + subject.subject.save() + + subject2 = create_study_subject(2) + subject2.subject.first_name = "QQQ" + subject2.subject.save() + + visit2 = create_visit(subject2) + + self.check_visit_ordered("first_name", [self.visit, visit2]) + + def test_visits_sort_last_name(self): + subject = self.study_subject + subject.subject.last_name = "PPP" + subject.subject.save() + + subject2 = create_study_subject(2) + subject2.subject.last_name = "QQQ" + subject2.subject.save() + + visit2 = create_visit(subject2) + + self.check_visit_ordered("last_name", [self.visit, visit2]) + + def test_visits_sort_default_location(self): + self.check_visit_ordered("default_location", [self.visit]) + + def test_visits_sort_flying_team(self): + self.check_visit_ordered("flying_team", [self.visit]) + + def test_visits_sort_is_finished(self): + self.check_visit_ordered("is_finished", [self.visit]) + + def test_visits_sort_post_mail_sent(self): + self.check_visit_ordered("post_mail_sent", [self.visit]) + + def test_visits_sort_datetime_begin(self): + visit1 = self.visit + visit2 = create_visit(self.study_subject) + visit1.datetime_begin = get_today_midnight_date() + datetime.timedelta(days=1) + visit2.datetime_begin = get_today_midnight_date() + datetime.timedelta(days=2) + visit1.save() + visit2.save() + + self.check_visit_ordered("datetime_begin", [visit1, visit2]) + + def test_visits_sort_datetime_end(self): + visit1 = self.visit + visit2 = create_visit(self.study_subject) + visit1.datetime_end = get_today_midnight_date() + datetime.timedelta(days=1) + visit2.datetime_end = get_today_midnight_date() + datetime.timedelta(days=2) + visit1.save() + visit2.save() + + self.check_visit_ordered("datetime_end", [visit1, visit2]) + + def test_visits_sort_visit_number(self): + visit1 = self.visit + visit2 = create_visit(self.study_subject) + + visit2.datetime_begin = get_today_midnight_date() + datetime.timedelta(days=2) + visit2.save() + visit1.datetime_begin = get_today_midnight_date() + datetime.timedelta(days=1) + visit1.save() + + # visit_number is adjusted automatically according to start date + self.check_visit_ordered("visit_number", [visit1, visit2]) + + def test_subjects_filter_unknown(self): + self.check_visit_ordered([["some_unknown", "unknown data"]], [self.visit]) + self.check_visit_ordered([["", ""]], [self.visit]) + self.check_visit_ordered([["", None]], [self.visit])