diff --git a/app/access/tests/functional/person/test_functional_person_serializer.py b/app/access/tests/functional/person/test_functional_person_serializer.py index 180d8673..159b51b0 100644 --- a/app/access/tests/functional/person/test_functional_person_serializer.py +++ b/app/access/tests/functional/person/test_functional_person_serializer.py @@ -1,161 +1,88 @@ import pytest -from django.test import TestCase - from rest_framework.exceptions import ValidationError -from access.serializers.entity_person import ( - Person, - ModelSerializer -) from access.tests.functional.entity.test_functional_entity_serializer import ( + MockView, EntitySerializerInheritedCases ) -class SerializerTestCases( - EntitySerializerInheritedCases, +class PersonSerializerTestCases( + EntitySerializerInheritedCases ): - create_model_serializer = ModelSerializer - """Serializer to test""" - duplicate_f_name_l_name_dob: dict = { - 'f_name': 'fred', - 'm_name': 'D', - 'l_name': 'Flinstone', - 'dob': '2025-04-08', + parameterized_test_data: dict = { + "model_notes": { + 'will_create': True, + }, + "f_name": { + 'will_create': False, + 'exception_key': 'required' + }, + "m_name": { + 'will_create': True, + }, + "l_name": { + 'will_create': False, + 'exception_key': 'required' + }, + "dob": { + 'will_create': True, + } } - kwargs_create_item_duplicate_f_name_l_name_dob: dict = { - 'f_name': 'fred', - 'm_name': 'D', - 'l_name': 'Flinstone', - 'dob': '2025-04-08', - } - - kwargs_create_item: dict = { + valid_data: dict = { 'f_name': 'Ian', 'm_name': 'Peter', 'l_name': 'Funny', 'dob': '2025-04-08', } - - model = Person - """Model to test""" - - valid_data: dict = { - 'f_name': 'Ian', - 'm_name': 'Peter', - 'l_name': 'Strange', - 'dob': '2025-04-08', - } + """Valid data used by serializer to create object""" - - def test_serializer_validation_no_f_name_exception(self): - """Serializer Validation Check - - Ensure that when creating with valid data and field f_name is missing - a validation error occurs. - """ - - data = self.valid_data.copy() - - del data['f_name'] - - with pytest.raises(ValidationError) as err: - - serializer = self.create_model_serializer( - data = data - ) - - serializer.is_valid(raise_exception = True) - - assert err.value.get_codes()['f_name'][0] == 'required' - - - - def test_serializer_validation_no_m_name(self): - """Serializer Validation Check - - Ensure that when creating with valid data and field f_name is missing - no validation error occurs. - """ - - data = self.valid_data.copy() - - del data['m_name'] - - serializer = self.create_model_serializer( - data = data - ) - - assert serializer.is_valid(raise_exception = True) - - - - def test_serializer_validation_no_l_name_exception(self): - """Serializer Validation Check - - Ensure that when creating with valid data and field l_name is missing - a validation error occurs. - """ - - data = self.valid_data.copy() - - del data['l_name'] - - with pytest.raises(ValidationError) as err: - - serializer = self.create_model_serializer( - data = data - ) - - serializer.is_valid(raise_exception = True) - - assert err.value.get_codes()['l_name'][0] == 'required' - - - - def test_serializer_validation_no_dob(self): - """Serializer Validation Check - - Ensure that when creating with valid data and field dob is missing - no validation error occurs. - """ - - data = self.valid_data.copy() - - del data['dob'] - - serializer = self.create_model_serializer( - data = data - ) - - assert serializer.is_valid(raise_exception = True) - - - - def test_serializer_validation_duplicate_f_name_l_name_dob(self): + def test_serializer_validation_duplicate_f_name_l_name_dob(self, model, create_serializer): """Serializer Validation Check Ensure that when creating with valid data and fields f_name, l_name and dob already exists in the db a validation error occurs. """ - self.model.objects.create( - organization = self.organization, - **self.kwargs_create_item_duplicate_f_name_l_name_dob + valid_data = self.valid_data.copy() + + valid_data['f_name'] = 'duplicate' + + valid_data['organization'] = self.organization + + obj = model.objects.create( + **valid_data ) - data = self.duplicate_f_name_l_name_dob.copy() + valid_data['organization'] = self.organization.id + + if 'email' in valid_data: # Contact Entity + + valid_data['email'] = 'abc@xyz.qwe' + + if 'name' in valid_data: # Company Entity + + valid_data['name'] = 'diff' + + if 'employee_number' in valid_data: # Employee Entity + + valid_data['employee_number'] = 13579 + + view_set = MockView() with pytest.raises(ValidationError) as err: - serializer = self.create_model_serializer( - data = data + serializer = create_serializer( + context = { + 'view': view_set, + }, + data = valid_data ) serializer.is_valid(raise_exception = True) @@ -167,64 +94,18 @@ class SerializerTestCases( class PersonSerializerInheritedCases( - SerializerTestCases, + PersonSerializerTestCases, ): - create_model_serializer = None - """Serializer to test""" - - duplicate_f_name_l_name_dob: dict = None - """ Duplicate model serializer dict - - used for testing for duplicate f_name, l_name and dob fields. - """ - - kwargs_create_item: dict = None - """ Model kwargs to create item""" - - kwargs_create_item_duplicate_f_name_l_name_dob: dict = None - """model kwargs to create object - - **None:** Ensure that the fields of sub-model to person do not match - `self.duplicate_f_name_l_name_dob`. if they do the wrong exception will be thrown. - - used for testing for duplicate f_name, l_name and dob fields. - """ - - model = None - """Model to test""" + parameterized_test_data: dict = None valid_data: dict = None """Valid data used by serializer to create object""" - @classmethod - def setUpTestData(self): - """Setup Test""" - self.duplicate_f_name_l_name_dob.update( - super().duplicate_f_name_l_name_dob - ) - - self.kwargs_create_item_duplicate_f_name_l_name_dob.update( - super().kwargs_create_item_duplicate_f_name_l_name_dob - ) - - self.kwargs_create_item.update( - super().kwargs_create_item - ) - - self.valid_data.update( - super().valid_data - ) - - super().setUpTestData() - - - -class PersonSerializerTest( - SerializerTestCases, - TestCase, +class PersonSerializerPyTest( + PersonSerializerTestCases, ): - pass + parameterized_test_data: dict = None