From 5bc35da842e763035757727128885bec7e13618f Mon Sep 17 00:00:00 2001 From: Mike <22396211+Dresdn@users.noreply.github.com> Date: Wed, 6 Mar 2024 09:17:13 -0700 Subject: [PATCH] refactor(tests): expand EntityAdmin form tests and move to base function --- tests/test_forms.py | 58 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 45 insertions(+), 13 deletions(-) diff --git a/tests/test_forms.py b/tests/test_forms.py index 7ab61a8..e68b280 100644 --- a/tests/test_forms.py +++ b/tests/test_forms.py @@ -1,4 +1,5 @@ import sys + import pytest from django.contrib.admin.sites import AdminSite from django.core.handlers.base import BaseHandler @@ -78,19 +79,6 @@ class Forms(TestCase): ) self.instance = Patient.objects.create(name='Jim Morrison') - self.site = AdminSite() - - def test_fields(self): - admin = BaseEntityAdmin(Patient, self.site) - admin.form = BaseDynamicEntityForm - view = admin.change_view(request, str(self.instance.pk)) - - own_fields = 3 - adminform = view.context_data['adminform'] - - self.assertEqual( - len(adminform.form.fields), Attribute.objects.count() + own_fields - ) def test_valid_submit(self): self.instance.eav.color = 'Blue' @@ -126,6 +114,13 @@ def patient() -> Patient: return Patient.objects.create(name='Jim Morrison') +@pytest.fixture() +def create_attributes() -> None: + """Create some Attributes to use for testing.""" + Attribute.objects.create(name='weight', datatype=Attribute.TYPE_FLOAT) + Attribute.objects.create(name='color', datatype=Attribute.TYPE_TEXT) + + @pytest.mark.django_db() @pytest.mark.parametrize( 'csv_data, separator', @@ -165,3 +160,40 @@ def test_csvdynamicform_empty(patient) -> None: ) assert form.is_valid() assert form.save() + + +@pytest.mark.django_db() +@pytest.mark.usefixtures('create_attributes') +@pytest.mark.parametrize('define_fieldsets', (True, False)) +def test_entity_admin_form(patient, define_fieldsets): + """Test the BaseEntityAdmin form setup and dynamic fieldsets handling.""" + admin = BaseEntityAdmin(Patient, AdminSite()) + admin.readonly_fields = ('email',) + admin.form = BaseDynamicEntityForm + + if define_fieldsets: + # Use all fields in Patient model + admin.fieldsets = ( + (None, {'fields': ['name', 'example']}), + ('Contact Info', {'fields': ['email']}), + ) + + view = admin.change_view(request, str(patient.pk)) + + adminform = view.context_data['adminform'] + + # Count the total fields in fieldsets + total_fields = sum( + len(fields_info['fields']) for _, fields_info in adminform.fieldsets + ) + + # 3 for 'name', 'email', 'example' + expected_fields_count = Attribute.objects.count() + 3 + + assert total_fields == expected_fields_count + + # Ensure our fieldset count is correct + if define_fieldsets: + assert len(adminform.fieldsets) == 3 + else: + assert len(adminform.fieldsets) == 2