diff --git a/src/tests/test_form_config.py b/src/tests/test_form_config.py new file mode 100644 index 0000000..40c5230 --- /dev/null +++ b/src/tests/test_form_config.py @@ -0,0 +1,73 @@ +from unittest.mock import Mock + +from django.db import models + +from servala.core.crd import generate_custom_form_class +from servala.core.models import ControlPlaneCRD + + +def test_custom_model_form_class_is_none_when_no_form_config(): + crd = Mock(spec=ControlPlaneCRD) + service_def = Mock() + service_def.form_config = None + crd.service_definition = service_def + crd.django_model = Mock() + + if not ( + crd.django_model + and crd.service_definition + and crd.service_definition.form_config + and crd.service_definition.form_config.get("fieldsets") + ): + result = None + else: + result = generate_custom_form_class( + crd.service_definition.form_config, crd.django_model + ) + + assert result is None + + +def test_custom_model_form_class_returns_class_when_form_config_exists(): + + crd = Mock(spec=ControlPlaneCRD) + service_def = Mock() + service_def.form_config = { + "fieldsets": [ + { + "title": "General", + "fields": [ + { + "type": "text", + "label": "Name", + "controlplane_field_mapping": "name", + "required": True, + } + ], + } + ] + } + crd.service_definition = service_def + + class TestModel(models.Model): + name = models.CharField(max_length=100) + + class Meta: + app_label = "test" + + crd.django_model = TestModel + + if not ( + crd.django_model + and crd.service_definition + and crd.service_definition.form_config + and crd.service_definition.form_config.get("fieldsets") + ): + result = None + else: + result = generate_custom_form_class( + crd.service_definition.form_config, crd.django_model + ) + + assert result is not None + assert hasattr(result, "form_config")