From 6c5e55507e81e9afa7b9f3a9e6c8f5266cea90ea Mon Sep 17 00:00:00 2001 From: Adam Goldsmith Date: Fri, 16 Feb 2024 11:12:04 -0500 Subject: [PATCH] paperwork: Add basic tests for a few views --- paperwork/tests.py | 71 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/paperwork/tests.py b/paperwork/tests.py index a39b155..24138dd 100644 --- a/paperwork/tests.py +++ b/paperwork/tests.py @@ -1 +1,70 @@ -# Create your tests here. +from django.contrib.auth import get_user_model +from django.contrib.auth.models import Permission +from django.contrib.contenttypes.models import ContentType +from django.test import Client + +from hypothesis import given +from hypothesis import strategies as st +from hypothesis.extra.django import TestCase, from_model + +from paperwork.models import InstructorOrVendor, Waiver + + +class PermissionRequiredViewTestCaseMixin: + permissions = [] + path = None + + @classmethod + def setUpTestData(cls): + User = get_user_model() + cls.client = Client() + + cls.user_without_permission = User.objects.create_user( + username="user_without_permission" + ) + cls.user_with_permission = User.objects.create_user( + username="user_with_permission" + ) + + resolved_permissions = [ + Permission.objects.get( + content_type=ContentType.objects.get_for_model(permission["model"]), + codename=permission["codename"], + ) + for permission in cls.permissions + ] + + cls.user_with_permission.user_permissions.add(*resolved_permissions) + + def test_missing_permission(self) -> None: + self.client.force_login(self.user_without_permission) + response = self.client.get(self.path) + self.assertEqual(response.status_code, 403) + + +class WaiverReportTestCase(PermissionRequiredViewTestCaseMixin, TestCase): + permissions = [{"model": Waiver, "codename": "view_waiver"}] + path = "/paperwork/waivers" + + @given(waivers=st.lists(from_model(Waiver, number=st.none()))) + def test_waiver_report(self, waivers: list[Waiver]) -> None: + self.client.force_login(self.user_with_permission) + response = self.client.get(self.path) + self.assertEqual(response.status_code, 200) + + +class InstructorOrVendorReportTestCase(PermissionRequiredViewTestCaseMixin, TestCase): + permissions = [{"model": InstructorOrVendor, "codename": "view_instructororvendor"}] + path = "/paperwork/instructors-and-vendors" + + @given( + instructors_or_vendors=st.lists( + from_model(InstructorOrVendor, serial=st.none()) + ) + ) + def test_waiver_report( + self, instructors_or_vendors: list[InstructorOrVendor] + ) -> None: + self.client.force_login(self.user_with_permission) + response = self.client.get(self.path) + self.assertEqual(response.status_code, 200)