From 31a4316ee1fca567ee62b379f4268b68edb4d707 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Wed, 13 Dec 2017 12:17:45 +0100 Subject: [PATCH] unit tests for editing worker --- smash/web/forms/worker_form.py | 7 +++- .../web/migrations/0099_auto_20171213_1115.py | 40 +++++++++++++++++++ smash/web/models/worker.py | 21 ++++++---- smash/web/templates/doctors/edit.html | 2 +- smash/web/tests/functions.py | 5 ++- smash/web/tests/view/test_worker.py | 30 ++++++++++---- smash/web/urls.py | 2 +- smash/web/views/worker.py | 2 +- 8 files changed, 89 insertions(+), 20 deletions(-) create mode 100644 smash/web/migrations/0099_auto_20171213_1115.py diff --git a/smash/web/forms/worker_form.py b/smash/web/forms/worker_form.py index 43f28958..dd898c17 100644 --- a/smash/web/forms/worker_form.py +++ b/smash/web/forms/worker_form.py @@ -1,9 +1,9 @@ from django import forms from django.forms import ModelForm -from web.models.worker import role_choices_by_worker_type from web.models import Worker, WorkerStudyRole from web.models.constants import GLOBAL_STUDY_ID +from web.models.worker import role_choices_by_worker_type from web.models.worker_study_role import WORKER_STAFF @@ -17,6 +17,11 @@ class WorkerForm(ModelForm): choices = role_choices_by_worker_type(worker_type) super(WorkerForm, self).__init__(*args, **kwargs) self.fields['role'] = forms.ChoiceField(label='Role', choices=choices) + instance = getattr(self, 'instance', None) + if instance is not None: + roles = WorkerStudyRole.objects.filter(worker=instance, study_id=GLOBAL_STUDY_ID) + if roles.count() > 0: + self.fields['role'].initial = roles[0].role def save(self, commit=True): instance = super(WorkerForm, self).save(commit) diff --git a/smash/web/migrations/0099_auto_20171213_1115.py b/smash/web/migrations/0099_auto_20171213_1115.py new file mode 100644 index 00000000..36f7df05 --- /dev/null +++ b/smash/web/migrations/0099_auto_20171213_1115.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2017-12-13 11:15 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('web', '0098_workerstudyrole'), + ] + + operations = [ + migrations.AlterField( + model_name='worker', + name='languages', + field=models.ManyToManyField(blank=True, to='web.Language', verbose_name=b'Known languages'), + ), + migrations.AlterField( + model_name='worker', + name='locations', + field=models.ManyToManyField(blank=True, to='web.Location', verbose_name=b'Locations'), + ), + migrations.AlterField( + model_name='worker', + name='phone_number', + field=models.CharField(blank=True, max_length=20, verbose_name=b'Phone number'), + ), + migrations.AlterField( + model_name='worker', + name='specialization', + field=models.CharField(blank=True, max_length=20, verbose_name=b'Specialization'), + ), + migrations.AlterField( + model_name='worker', + name='unit', + field=models.CharField(blank=True, max_length=50, verbose_name=b'Unit'), + ), + ] diff --git a/smash/web/models/worker.py b/smash/web/models/worker.py index 76f369a9..efca00bd 100644 --- a/smash/web/models/worker.py +++ b/smash/web/models/worker.py @@ -37,13 +37,13 @@ def worker_type_by_worker(worker): if roles.count() == 0: return WORKER_STAFF role = roles[0] - for role_type, role_name in STUDY_ROLE_CHOICES.items(): + for role_type, role_name in STUDY_ROLE_CHOICES: if role_type == role: return WORKER_STAFF - for role_type, role_name in HEALTH_PARTNER_ROLE_CHOICES.items(): + for role_type, role_name in HEALTH_PARTNER_ROLE_CHOICES: if role_type == role: return WORKER_HEALTH_PARTNER - for role_type, role_name in VOUCHER_PARTNER_ROLE_CHOICES.items(): + for role_type, role_name in VOUCHER_PARTNER_ROLE_CHOICES: if role_type == role: return WORKER_VOUCHER_PARTNER return WORKER_STAFF @@ -54,10 +54,12 @@ class Worker(models.Model): app_label = 'web' languages = models.ManyToManyField("web.Language", - verbose_name='Known languages' + verbose_name='Known languages', + blank=True ) locations = models.ManyToManyField("web.Location", - verbose_name='Locations' + verbose_name='Locations', + blank=True ) appointments = models.ManyToManyField('web.Appointment', blank=True, verbose_name='Appointments' @@ -72,17 +74,20 @@ class Worker(models.Model): verbose_name='Last name' ) phone_number = models.CharField(max_length=20, - verbose_name='Phone number' + verbose_name='Phone number', + blank=True ) unit = models.CharField(max_length=50, - verbose_name='Unit' + verbose_name='Unit', + blank=True ) email = models.EmailField( verbose_name='E-mail' ) specialization = models.CharField(max_length=20, - verbose_name='Specialization' + verbose_name='Specialization', + blank=True ) def is_on_leave(self): diff --git a/smash/web/templates/doctors/edit.html b/smash/web/templates/doctors/edit.html index bd5378b9..148cda2c 100644 --- a/smash/web/templates/doctors/edit.html +++ b/smash/web/templates/doctors/edit.html @@ -132,7 +132,7 @@ <td>{{ holiday.datetime_end }}</td> <td>{{ holiday.info }}</td> <td> - <a href="{% url 'web.views.doctor_holiday_delete' holiday.id %}" type="button" + <a href="{% url 'web.views.worker_holiday_delete' holiday.id %}" type="button" class="btn btn-block btn-default">Delete</a> </td> </tr> diff --git a/smash/web/tests/functions.py b/smash/web/tests/functions.py index dab991b8..b3855137 100644 --- a/smash/web/tests/functions.py +++ b/smash/web/tests/functions.py @@ -188,8 +188,11 @@ def create_worker(user=None, with_test_location=False): worker = Worker.objects.create( first_name='piotr', last_name="gawron", - email='jacob@bla', + email='jacob@bla.com', user=user, + specialization="spec", + unit="LCSB", + phone_number="0123456789" ) if with_test_location: worker.locations = [get_test_location()] diff --git a/smash/web/tests/view/test_worker.py b/smash/web/tests/view/test_worker.py index 2cb98a2a..a992eff9 100644 --- a/smash/web/tests/view/test_worker.py +++ b/smash/web/tests/view/test_worker.py @@ -6,7 +6,7 @@ from web.forms import WorkerForm from web.models import Worker from web.models.worker_study_role import WORKER_STAFF, ROLE_CHOICES_DOCTOR from web.tests import create_worker -from web.tests.functions import create_language, create_location, create_availability +from web.tests.functions import create_language, create_location, create_availability, format_form_field from .. import LoggedInTestCase logger = logging.getLogger(__name__) @@ -26,16 +26,11 @@ class WorkerViewTests(LoggedInTestCase): self.assertEqual(response.status_code, 200) def test_render_worker_added_request(self): - language = create_language() location = create_location() count = Worker.objects.all().count() - form = WorkerForm() - form_data = {} - for key, value in form.initial.items(): - if value is not None: - form_data[key] = value + form_data = self.get_form_data() form_data["first_name"] = "John" form_data["last_name"] = "Doe" form_data["phone_number"] = "0123456789" @@ -54,9 +49,30 @@ class WorkerViewTests(LoggedInTestCase): new_count = Worker.objects.all().count() self.assertEqual(count + 1, new_count) + @staticmethod + def get_form_data(worker=None): + form = WorkerForm(instance=worker) + form_data = {} + for key, value in form.initial.items(): + form_data[key] = format_form_field(value) + return form_data + def test_render_edit_worker_request(self): worker = create_worker() + form_data = self.get_form_data(worker) + form_data["last_name"] = "XYZ" + form_data["role"] = ROLE_CHOICES_DOCTOR + + response = self.client.post(reverse('web.views.worker_edit', args=[worker.id]), data=form_data) + self.assertEqual(response.status_code, 302) + + updated_worker = Worker.objects.get(id=worker.id) + self.assertEqual(updated_worker.last_name, form_data["last_name"]) + + def test_edit_worker(self): + worker = create_worker() + response = self.client.get(reverse('web.views.worker_edit', args=[worker.id])) self.assertEqual(response.status_code, 200) diff --git a/smash/web/urls.py b/smash/web/urls.py index e7e06a69..69d0f66c 100644 --- a/smash/web/urls.py +++ b/smash/web/urls.py @@ -103,7 +103,7 @@ urlpatterns = [ url(r'^doctors/(?P<worker_type>[A-z]+)$', views.worker.worker_list, name='web.views.workers'), url(r'^doctors/add/(?P<worker_type>[A-z]+)$', views.worker.worker_add, name='web.views.worker_add'), url(r'^doctors/edit/(?P<worker_id>\d+)$', views.worker.worker_edit, name='web.views.worker_edit'), - url(r'^doctors/disable/(?P<doctor_id>\d+)$', views.worker.doctor_disable, name='web.views.worker_disable'), + url(r'^doctors/disable/(?P<doctor_id>\d+)$', views.worker.worker_disable, name='web.views.worker_disable'), url(r'^doctors/(?P<doctor_id>\d+)/availability/add$', views.worker.worker_availability_add, name='web.views.worker_availability_add'), diff --git a/smash/web/views/worker.py b/smash/web/views/worker.py index a67abe92..12914af5 100644 --- a/smash/web/views/worker.py +++ b/smash/web/views/worker.py @@ -58,7 +58,7 @@ def worker_edit(request, worker_id): }) -def doctor_disable(request, doctor_id): +def worker_disable(request, doctor_id): the_doctor = get_object_or_404(Worker, id=doctor_id) the_doctor.disable() return worker_list(request) -- GitLab