diff --git a/src/datasource_toolkit/forestadmin/datasource_toolkit/decorators/action/form_elements.py b/src/datasource_toolkit/forestadmin/datasource_toolkit/decorators/action/form_elements.py index fb0c0a37f..b5ba7ed59 100644 --- a/src/datasource_toolkit/forestadmin/datasource_toolkit/decorators/action/form_elements.py +++ b/src/datasource_toolkit/forestadmin/datasource_toolkit/decorators/action/form_elements.py @@ -249,7 +249,7 @@ async def to_action_field( description=await self.description(context), is_read_only=await self.is_read_only(context), is_required=await self.is_required(context), - value=await self.value(context) or default_value, + value=await self.value(context) if callable(self._value) else default_value, default_value=await self.default_value(context), collection_name=None, enum_values=None, diff --git a/src/datasource_toolkit/tests/decorators/action/test_form_elements.py b/src/datasource_toolkit/tests/decorators/action/test_form_elements.py index 29d5512bf..8e7586464 100644 --- a/src/datasource_toolkit/tests/decorators/action/test_form_elements.py +++ b/src/datasource_toolkit/tests/decorators/action/test_form_elements.py @@ -3,6 +3,8 @@ from unittest import TestCase from unittest.mock import Mock, patch +from forestadmin.datasource_toolkit.decorators.action.context.single import ActionContextSingle + if sys.version_info >= (3, 9): import zoneinfo else: @@ -150,6 +152,35 @@ def setUpClass(cls) -> None: ) +class TestStringDynamicField(BaseTestDynamicField): + def test_to_action_field_when_dynamic_value_it_should_not_use_default_value(self): + for return_dynamic_value in ["", None, "abc"]: + plain_dynamic_field = PlainStringDynamicField( + type=ActionFieldType.STRING, + label="string", + value=lambda ctx: return_dynamic_value, + default_value="default value", + ) + dynamic_field = FormElementFactory.build(plain_dynamic_field) + context = ActionContextSingle(self.collection_product, None, {}, None, {}, "string") + action_field = self.loop.run_until_complete(dynamic_field.to_action_field(context, "current value", None)) + self.assertEqual(action_field["value"], return_dynamic_value) + + def test_to_action_field_when_value_is_static_value_it_should_not_use_default_value(self): + for return_value in ["", None, "abc"]: + plain_dynamic_field = PlainStringDynamicField( + type=ActionFieldType.STRING, + label="string", + value=return_value, + default_value="default value", + ) + dynamic_field = FormElementFactory.build(plain_dynamic_field) + context = ActionContextSingle(self.collection_product, None, {}, None, {}, "string") + action_field = self.loop.run_until_complete(dynamic_field.to_action_field(context, "current value", None)) + print(action_field["value"], return_value) + self.assertEqual(action_field["value"], "current value") + + class TestFileDynamicField(BaseTestDynamicField): def test_when_having_default_value_field_should_be_dynamic(self): plain_dynamic_field = PlainFileDynamicField(