diff --git a/smash/web/tests/view/test_notifications.py b/smash/web/tests/view/test_notifications.py index 8bc8200467724641b13de55bc0c6d33f1a914dbd..677ce30bec0e8d5481fcba8972406ec861b06ee9 100644 --- a/smash/web/tests/view/test_notifications.py +++ b/smash/web/tests/view/test_notifications.py @@ -1,8 +1,9 @@ import datetime +import logging from django.contrib.auth.models import AnonymousUser -from web.models import Appointment, Location, AppointmentTypeLink, Study +from web.models import Appointment, Location, AppointmentTypeLink, Study, Visit from web.models.constants import GLOBAL_STUDY_ID from web.tests import LoggedInTestCase from web.tests.functions import create_appointment, create_location, create_worker, create_appointment_type, \ @@ -22,22 +23,43 @@ from web.views.notifications import \ get_today_midnight_date, \ get_unfinished_appointments, \ get_unfinished_appointments_count, \ - get_unfinished_visits + get_unfinished_visits, get_exceeded_visits + +logger = logging.getLogger(__name__) class NotificationViewTests(LoggedInTestCase): def test_get_exceeded_visit_notifications_count(self): - original_notification = get_visits_without_appointments_count(self.user) + original_notification = get_exceeded_visit_notifications_count(self.user) subject = create_study_subject() - visit = create_visit(subject) - visit.datetime_end = "2011-01-01" - visit.save() - create_appointment(visit) + Visit.objects.create(datetime_begin="2011-01-01", + datetime_end="2011-01-02", + subject=subject) + + # first visit doesn't go to notifications + notification = get_exceeded_visit_notifications_count(self.user) + self.assertEquals(original_notification.count, notification.count) + + Visit.objects.create(datetime_begin="2012-01-01", + datetime_end="2012-01-02", + subject=subject) notification = get_exceeded_visit_notifications_count(self.user) self.assertEquals(original_notification.count + 1, notification.count) + def test_get_exceeded_visit_notifications_count_for_first_visit(self): + subject = create_study_subject() + visit = Visit.objects.create(datetime_begin="2011-01-01", + datetime_end="2011-01-02", + subject=subject) + appointment = create_appointment(visit) + appointment.status = Appointment.APPOINTMENT_STATUS_FINISHED + appointment.save() + notification = get_exceeded_visit_notifications_count(self.user) + logger.debug(get_exceeded_visits(self.user).query) + self.assertEquals(1, notification.count) + def test_get_exceeded_visit_notifications_count_2(self): original_notification = get_visits_without_appointments_count(self.user) diff --git a/smash/web/views/notifications.py b/smash/web/views/notifications.py index 0fac2b49f48023ea219af4a000565edea2b2764e..4d251909544bc61cacaade3a0a309e9b4caa39b8 100644 --- a/smash/web/views/notifications.py +++ b/smash/web/views/notifications.py @@ -212,7 +212,11 @@ def get_exceeded_visits(user): return Visit.objects.filter(datetime_end__lt=get_today_midnight_date(), is_finished=False, subject__default_location__in=get_filter_locations(user) - ).order_by('datetime_begin') + ).filter( + # by default any visit where visit number is bigger than 1 + # or in case of first visit - visits that had some successful appointment + Q(visit_number__gt=1) | Q(appointment__status=Appointment.APPOINTMENT_STATUS_FINISHED)).order_by( + 'datetime_begin') def get_missing_redcap_subjects(user, include_ignored=True):