From 707bf512fb2cbe60be1a7b8dc97c45e682ca52d8 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Wed, 25 Aug 2021 10:24:55 +0200
Subject: [PATCH] id changed to subject_id

---
 smash/web/tests/view/test_appointments.py | 54 +++++++++++++++++++----
 smash/web/tests/view/test_subjects.py     |  4 +-
 smash/web/tests/view/test_visit.py        | 17 +++++++
 smash/web/urls.py                         |  2 +-
 smash/web/views/appointment.py            |  6 +--
 smash/web/views/subject.py                |  6 +--
 smash/web/views/visit.py                  |  4 +-
 7 files changed, 74 insertions(+), 19 deletions(-)

diff --git a/smash/web/tests/view/test_appointments.py b/smash/web/tests/view/test_appointments.py
index 1e83a434..cacc8bf3 100644
--- a/smash/web/tests/view/test_appointments.py
+++ b/smash/web/tests/view/test_appointments.py
@@ -35,31 +35,56 @@ class AppointmentsViewTests(LoggedInTestCase):
         self.assertEqual(response.status_code, 200)
 
     def test_post_add_general_appointment(self):
+        form_data = self.create_add_appointment_form_data()
+        response = self.client.post(reverse('web.views.appointment_add_general'), data=form_data)
+        self.assertEqual(response.status_code, 302)
+
+    def create_add_appointment_form_data(self):
         location = get_test_location()
         form_data = {}
         form_data['datetime_when'] = datetime.datetime.today()
         form_data['location'] = location.id
         form_data['length'] = 10
         form_data['comment'] = 'A comment with weird letters such as á è ü ñ ô'
-        response = self.client.post(reverse('web.views.appointment_add_general'), data=form_data)
-        self.assertEqual(response.status_code, 302)
+        return form_data
 
     def test_add_appointment(self):
         count = Appointment.objects.count()
         subject = create_study_subject()
         visit = create_visit(subject)
-        location = get_test_location()
-        form_data = {}
-        form_data['datetime_when'] = datetime.datetime.today()
-        form_data['location'] = location.id
-        form_data['comment'] = 'A comment with weird letters such as á è ü ñ ô'
-        form_data['length'] = 10
+        form_data = self.create_add_appointment_form_data()
         response = self.client.post(reverse('web.views.appointment_add', kwargs={'visit_id': visit.id}),
                                     data=form_data,
                                     follow=True)
         self.assertEqual(response.status_code, 200)
         self.assertEqual(count + 1, Appointment.objects.count())
 
+    def test_add_appointment_to_finished_visit(self):
+        count = Appointment.objects.count()
+        subject = create_study_subject()
+        visit = create_visit(subject)
+        visit.is_finished = True
+        visit.save()
+        form_data = self.create_add_appointment_form_data()
+        response = self.client.post(reverse('web.views.appointment_add', kwargs={'visit_id': visit.id}),
+                                    data=form_data,
+                                    follow=True)
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(count, Appointment.objects.count())
+
+    def test_add_appointment_to_deceased_subject(self):
+        count = Appointment.objects.count()
+        subject = create_study_subject()
+        subject.subject.dead = True
+        subject.subject.save()
+        visit = create_visit(subject)
+        form_data = self.create_add_appointment_form_data()
+        response = self.client.post(reverse('web.views.appointment_add', kwargs={'visit_id': visit.id}),
+                                    data=form_data,
+                                    follow=True)
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(count, Appointment.objects.count())
+
     def test_appointments_list_request(self):
         response = self.client.get(reverse('web.views.appointments'))
         self.assertEqual(response.status_code, 200)
@@ -84,6 +109,19 @@ class AppointmentsViewTests(LoggedInTestCase):
         self.assertEqual(new_status, updated_appointment.status)
         self.assertEqual(new_last_name, updated_subject.subject.last_name)
 
+    def test_edit_appointments_for_deceased_subject(self):
+        subject = create_study_subject()
+        subject.subject.dead = True
+        subject.subject.save()
+        visit = create_visit(subject)
+        appointment = create_appointment(visit, when=timezone.now())
+        form_data = self.prepare_form(appointment, subject)
+        response = self.client.get(
+            reverse('web.views.appointment_edit', kwargs={'appointment_id': appointment.id}), data=form_data,
+            follow=True)
+        self.assertEqual(response.status_code, 200)
+        self.assertContains(response, "Appointment cannot be edited")
+
     def test_appointments_edit_from_visit(self):
         visit = create_visit()
         appointment = create_appointment(visit, when=timezone.now())
diff --git a/smash/web/tests/view/test_subjects.py b/smash/web/tests/view/test_subjects.py
index 71712186..5683ed6a 100644
--- a/smash/web/tests/view/test_subjects.py
+++ b/smash/web/tests/view/test_subjects.py
@@ -55,12 +55,12 @@ class SubjectsViewTests(LoggedInWithWorkerTestCase):
         visit = create_visit(self.study_subject)
         create_appointment(visit)
 
-        response = self.client.get(reverse('web.views.subject_visit_details', kwargs={'id': self.study_subject.id}))
+        response = self.client.get(reverse('web.views.subject_visit_details', kwargs={'subject_id': self.study_subject.id}))
         self.assertEqual(response.status_code, 200)
         self.assertFalse("Add visit".encode('utf8') in response.content)
 
     def test_render_subject_visit_details_without_visit(self):
-        response = self.client.get(reverse('web.views.subject_visit_details', kwargs={'id': self.study_subject.id}))
+        response = self.client.get(reverse('web.views.subject_visit_details', kwargs={'subject_id': self.study_subject.id}))
         self.assertEqual(response.status_code, 200)
         self.assertTrue("Add visit".encode('utf8') in response.content)
 
diff --git a/smash/web/tests/view/test_visit.py b/smash/web/tests/view/test_visit.py
index 0ca9690f..133681b9 100644
--- a/smash/web/tests/view/test_visit.py
+++ b/smash/web/tests/view/test_visit.py
@@ -75,6 +75,23 @@ class VisitViewTests(LoggedInTestCase):
         response = self.client.get(reverse('web.views.visit_add', kwargs={'subject_id': study_subject.id}))
         self.assertEqual(response.status_code, 200)
 
+    def test_render_add_visit_for_deceased(self):
+        study_subject = create_study_subject()
+        study_subject.subject.dead=True
+        study_subject.subject.save()
+
+        response = self.client.get(reverse('web.views.visit_add', kwargs={'subject_id': study_subject.id}), follow=True)
+        self.assertEqual(response.status_code, 200)
+        self.assertContains(response, "Visit cannot be added")
+
+    def test_render_add_visit_for_subject_with_unfinished_visit(self):
+        study_subject = create_study_subject()
+        create_visit(study_subject)
+
+        response = self.client.get(reverse('web.views.visit_add', kwargs={'subject_id': study_subject.id}), follow=True)
+        self.assertEqual(response.status_code, 200)
+        self.assertContains(response, "subject has unfinished visits")
+
     def test_save_add_visit(self):
         visit_count = Visit.objects.all().count()
         subject = create_study_subject()
diff --git a/smash/web/urls.py b/smash/web/urls.py
index 13c9886b..752fabf8 100644
--- a/smash/web/urls.py
+++ b/smash/web/urls.py
@@ -87,7 +87,7 @@ urlpatterns = [
     url(r'^subjects/voucher_expiry', views.subject.subject_voucher_expiry, name='web.views.subject_voucher_expiry'),
 
     url(r'^study/(?P<study_id>\d+)/subjects/add$', views.subject.subject_add, name='web.views.subject_add'),
-    url(r'^subjects/subject_visit_details/(?P<id>\d+)$', views.subject.subject_visit_details,
+    url(r'^subjects/subject_visit_details/(?P<subject_id>\d+)$', views.subject.subject_visit_details,
         name='web.views.subject_visit_details'),
     url(r'^subjects/edit/(?P<subject_id>\d+)$', views.subject.subject_edit, name='web.views.subject_edit'),
     url(r'^subjects/(?P<pk>\d+)/delete$', views.subject.SubjectDeleteView.as_view(),
diff --git a/smash/web/views/appointment.py b/smash/web/views/appointment.py
index a30cd045..cd09df61 100644
--- a/smash/web/views/appointment.py
+++ b/smash/web/views/appointment.py
@@ -45,11 +45,11 @@ def appointment_add(request, visit_id=None):
         visit_end   = visit.datetime_end.strftime("%Y-%m-%d")
         if visit.is_finished:
             messages.error(request, "Appointment cannot be added because the visit is finished")
-            return redirect('web.views.subject_visit_details', id=visit.subject.id)
+            return redirect('web.views.subject_visit_details', subject_id=visit.subject.id)
         if not visit.subject.can_schedule():
             messages.error(request,
                            "Appointment cannot be added because the subject status is: {}".format(visit.subject.status))
-            return redirect('web.views.subject_visit_details', id=visit.subject.id)
+            return redirect('web.views.subject_visit_details', subject_id=visit.subject.id)
     else:
         visit_start = datetime.datetime.today().strftime("%Y-%m-%d")
         visit_end   = datetime.datetime.today().strftime("%Y-%m-%d")
@@ -84,7 +84,7 @@ def appointment_edit(request, appointment_id):
         if not the_appointment.visit.subject.can_schedule():
             messages.error(request, "Appointment cannot be edited because the subject status is: {}".format(
                 the_appointment.visit.subject.status))
-            return redirect('web.views.subject_visit_details', id=the_appointment.visit.subject.id)
+            return redirect('web.views.subject_visit_details', subject_id=the_appointment.visit.subject.id)
 
     if request.method == 'POST':
         appointment_form = AppointmentEditForm(request.POST,
diff --git a/smash/web/views/subject.py b/smash/web/views/subject.py
index dd83c212..ec61136a 100644
--- a/smash/web/views/subject.py
+++ b/smash/web/views/subject.py
@@ -231,8 +231,8 @@ def persist_custom_file_fields(request, study_subject):
             study_subject.set_custom_data_value(CustomStudySubjectField.objects.get(pk=field_id), file)
 
 
-def subject_visit_details(request, id):  # pylint: disable=redefined-builtin
-    study_subject_to_be_viewed = get_object_or_404(StudySubject, id=id)
+def subject_visit_details(request, subject_id):
+    study_subject_to_be_viewed = get_object_or_404(StudySubject, id=subject_id)
     visits = study_subject_to_be_viewed.visit_set.order_by("-visit_number").all()
     visits_data = []
     allow_add_visit = True
@@ -251,4 +251,4 @@ def subject_visit_details(request, id):  # pylint: disable=redefined-builtin
             allow_add_visit = False
 
     return wrap_response(request, 'subjects/visit_details.html',
-                         {'display': visits_data, "id": id, "allow_add_visit": allow_add_visit})
+                         {'display': visits_data, "id": subject_id, "allow_add_visit": allow_add_visit})
diff --git a/smash/web/views/visit.py b/smash/web/views/visit.py
index a52d4787..c0555af0 100644
--- a/smash/web/views/visit.py
+++ b/smash/web/views/visit.py
@@ -139,11 +139,11 @@ def visit_add(request, subject_id=-1):
     if Visit.objects.filter(subject=subject, is_finished=False).count() > 0:
         messages.add_message(request, messages.WARNING,
                              'The subject has unfinished visits, please, finish them before adding new visits.')
-        return redirect('web.views.subject_visit_details', id=subject_id)
+        return redirect('web.views.subject_visit_details', subject_id=subject_id)
 
     if not subject.can_schedule():
         messages.error(request, "Visit cannot be added because the subject status is: {}".format(subject.status))
-        return redirect('web.views.subject_visit_details', id=subject_id)
+        return redirect('web.views.subject_visit_details', subject_id=subject_id)
 
     if request.method == 'POST':
         form = VisitAddForm(request.POST, request.FILES)
-- 
GitLab