From 978f217216f20a43ebec15f2f9b79ecb476bba6a Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Tue, 28 Mar 2017 11:15:12 +0200 Subject: [PATCH] screening number is automatically added if applicable --- smash/web/tests/test_view_subjects.py | 116 ++++++++++++++++++++++++++ smash/web/views/subject.py | 29 ++++++- 2 files changed, 141 insertions(+), 4 deletions(-) create mode 100644 smash/web/tests/test_view_subjects.py diff --git a/smash/web/tests/test_view_subjects.py b/smash/web/tests/test_view_subjects.py new file mode 100644 index 00000000..71023e28 --- /dev/null +++ b/smash/web/tests/test_view_subjects.py @@ -0,0 +1,116 @@ +from django.contrib.auth.models import User +from django.test import Client +from django.test import TestCase +from django.urls import reverse + +from functions import create_subject, create_worker, get_test_location +from web.forms import SubjectAddForm +from web.models.constants import SEX_CHOICES_MALE, SUBJECT_TYPE_CHOICES_CONTROL +from web.views.subject import get_new_screening_number + + +class SubjectsViewTests(TestCase): + def setUp(self): + self.client = Client() + username = 'piotr' + password = 'top_secret' + self.user = User.objects.create_user( + username=username, email='jacob@bla', password=password) + self.client.login(username=username, password=password) + + def test_subjects_add(self): + self.worker = create_worker(self.user) + self.worker.screening_number_prefix = "X" + self.worker.save() + + response = self.client.get(reverse('web.views.subject_add')) + self.assertEqual(response.status_code, 200) + + # check if screening number prefix is there + self.assertTrue("value=\"X-\"" in response.content) + + def test_subjects_add_2(self): + self.worker = create_worker(self.user, True) + + form = SubjectAddForm() + form_data = {} + for key, value in form.initial.items(): + if value is not None: + form_data[key] = value + + form_data["screening_number"] = "X-"; + form_data["country"] = "Luxembourg"; + form_data["first_name"] = "John"; + form_data["last_name"] = "Doe"; + form_data["sex"] = SEX_CHOICES_MALE; + form_data["type"] = SUBJECT_TYPE_CHOICES_CONTROL; + form_data["default_location"] = get_test_location().id; + response = self.client.post(reverse('web.views.subject_add'), data=form_data) + self.assertEqual(response.status_code, 302) + + + def test_get_new_screening_number(self): + prefix = "X-" + subject = create_subject() + subject.screening_number = prefix + "300" + subject.save() + + new_screening_number = get_new_screening_number(prefix) + self.assertEqual(prefix + "301", new_screening_number) + + def test_get_new_screening_number_2(self): + prefix = "X-" + subject = create_subject() + subject.screening_number = "L-1111; " + prefix + "300" + subject.save() + + new_screening_number = get_new_screening_number(prefix) + self.assertEqual(prefix + "301", new_screening_number) + + def test_get_new_screening_number_3(self): + prefix = "X-" + subject = create_subject() + subject.screening_number = prefix + "300" + "; L-1111" + subject.save() + + new_screening_number = get_new_screening_number(prefix) + self.assertEqual(prefix + "301", new_screening_number) + + def test_get_new_screening_number_3(self): + prefix = "X-" + subject = create_subject() + subject.screening_number = "P-1112; " + prefix + "300" + "; L-1111" + subject.save() + + new_screening_number = get_new_screening_number(prefix) + self.assertEqual(prefix + "301", new_screening_number) + + def test_get_new_screening_number_4(self): + prefix = "X-" + subject = create_subject() + subject.screening_number = "P-1112; " + subject.save() + + new_screening_number = get_new_screening_number(prefix) + self.assertEqual(prefix + "1", new_screening_number) + + def test_get_new_screening_number_5(self): + prefix = "X-" + subject = create_subject() + subject.screening_number = prefix + "100" + subject.save() + + subject = create_subject() + subject.screening_number = prefix + "200" + subject.save() + + subject = create_subject() + subject.screening_number = "Y-300" + subject.save() + + subject = create_subject() + subject.screening_number = prefix + "20" + subject.save() + + new_screening_number = get_new_screening_number(prefix) + self.assertEqual(prefix + "201", new_screening_number) diff --git a/smash/web/views/subject.py b/smash/web/views/subject.py index cfeddecd..0f667ba6 100644 --- a/smash/web/views/subject.py +++ b/smash/web/views/subject.py @@ -5,7 +5,7 @@ from django.shortcuts import redirect, get_object_or_404 from notifications import get_subjects_with_no_visit, get_subjects_with_reminder from . import wrap_response from ..forms import SubjectAddForm, SubjectEditForm, VisitDetailForm -from ..models import Subject +from ..models import Subject, Worker def subjects(request): @@ -17,17 +17,38 @@ def subjects(request): return wrap_response(request, 'subjects/index.html', context) +def get_new_screening_number(screening_number_prefix): + result_number = 0 + subjects = Subject.objects.filter(screening_number__contains=screening_number_prefix) + for subject in subjects: + screening_numbers = subject.screening_number.split(";") + for screening_number in screening_numbers: + screening_number = screening_number.strip() + if screening_number.startswith(screening_number_prefix): + number = screening_number[len(screening_number_prefix):] + result_number = max(result_number, int(number)) + + return screening_number_prefix + str(result_number + 1) + + def subject_add(request): + prefix_screening_number = '' + + worker = Worker.get_by_user(request.user) + if (worker.screening_number_prefix is not None) and (worker.screening_number_prefix != ""): + prefix_screening_number = worker.screening_number_prefix + "-" + if request.method == 'POST': form = SubjectAddForm(request.POST, request.FILES) if form.is_valid(): screening_number = form.cleaned_data['screening_number'] - if screening_number == '': - screening_number = get_new_screening_number() # FIXME: method doesn't exist + if screening_number == prefix_screening_number: + form.cleaned_data['screening_number'] = get_new_screening_number(prefix_screening_number) + form.save() return redirect('web.views.subjects') else: - form = SubjectAddForm() + form = SubjectAddForm(initial={'screening_number': prefix_screening_number}) return wrap_response(request, 'subjects/add.html', {'form': form}) -- GitLab