diff --git a/smash/web/tests/view/test_privacy_notice.py b/smash/web/tests/view/test_privacy_notice.py index 5d21c1d42df6c6d883a165aadc780a313c787eb4..609d46b55efc863445b80abf758a195bb08642aa 100644 --- a/smash/web/tests/view/test_privacy_notice.py +++ b/smash/web/tests/view/test_privacy_notice.py @@ -1,9 +1,11 @@ -from web.tests.functions import get_resource_path -from web.models import PrivacyNotice -from web.forms import PrivacyNoticeForm +from web.tests.functions import get_resource_path, get_test_study +from web.models import PrivacyNotice, Study, Worker +from web.forms import PrivacyNoticeForm, WorkerAcceptPrivacyNoticeForm from web.tests import LoggedInTestCase from django.urls import reverse from django.core.files.uploadedfile import SimpleUploadedFile +from django.contrib.messages import get_messages +from web.models.constants import GLOBAL_STUDY_ID class PrivacyNoticeTests(LoggedInTestCase): def test_add_privacy_notice(self): @@ -45,7 +47,6 @@ class PrivacyNoticeTests(LoggedInTestCase): page = reverse('web.views.privacy_notice_edit', kwargs={'pk': pn.id}) response = self.client.post(page, data={**form_data, **file_data}) - print(response) self.assertEqual(response.status_code, 302) pn = PrivacyNotice.objects.all()[0] self.assertEqual(pn.name, 'example2') @@ -58,4 +59,68 @@ class PrivacyNoticeTests(LoggedInTestCase): response = self.client.post(page) self.assertEqual(response.status_code, 302) self.assertEqual(0, PrivacyNotice.objects.count()) - \ No newline at end of file + + def test_privacy_notice_middleware_superuser(self): + self.test_add_privacy_notice() + + self.login_as_admin() + #assign privacy notice + pn = PrivacyNotice.objects.all()[0] + study = Study.objects.filter(id=GLOBAL_STUDY_ID)[0] + study.acceptance_of_study_privacy_notice_required = True + study.study_privacy_notice = pn + study.save() + + study = Study.objects.filter(id=GLOBAL_STUDY_ID)[0] + self.assertEqual(study.acceptance_of_study_privacy_notice_required, True) + self.assertEqual(study.study_privacy_notice.id, pn.id) + + self.login_as_super() + self.assertEqual(self.staff_worker.privacy_notice_accepted, False) + page = reverse('web.views.appointments') + response = self.client.get(page) + self.assertEqual(response.status_code, 200) + messages = list(get_messages(response.wsgi_request)) + self.assertEqual(len(messages), 0) + + def test_privacy_notice_middleware(self): + self.test_add_privacy_notice() + + self.login_as_admin() + #assign privacy notice + pn = PrivacyNotice.objects.all()[0] + study = Study.objects.filter(id=GLOBAL_STUDY_ID)[0] + study.acceptance_of_study_privacy_notice_required = True + study.study_privacy_notice = pn + study.save() + + study = Study.objects.filter(id=GLOBAL_STUDY_ID)[0] + self.assertEqual(study.acceptance_of_study_privacy_notice_required, True) + self.assertEqual(study.study_privacy_notice.id, pn.id) + + self.login_as_staff() + self.assertEqual(self.staff_worker.privacy_notice_accepted, False) + page = reverse('web.views.appointments') + response = self.client.get(page) + self.assertEqual(response.status_code, 302) + messages = list(get_messages(response.wsgi_request)) + self.assertEqual(len(messages), 1) + self.assertEqual(str(messages[0]), "You can't use the system until you accept the privacy notice.") + #accept privacy notice + form_data = dict(privacy_notice_accepted=True) + form = WorkerAcceptPrivacyNoticeForm(form_data) + self.assertTrue(form.is_valid()) + page = reverse('web.views.accept_privacy_notice', kwargs={'pk': pn.id}) + response = self.client.post(page, data={**form_data}) + self.assertEqual(response.status_code, 302) + messages = [m.message for m in get_messages(response.wsgi_request)] + self.assertIn("Privacy notice accepted", messages) + #check acceptance + worker = Worker.objects.filter(id=self.staff_worker.id).first() + self.assertEqual(worker.privacy_notice_accepted, True) + page = reverse('web.views.appointments') + response = self.client.get(page) + self.assertEqual(response.status_code, 200) + messages = list(get_messages(response.wsgi_request)) + worker = Worker.get_by_user(response.wsgi_request.user) + self.assertEqual(worker.privacy_notice_accepted, True)