From 2d1863031cb0352492bb0278a5562c94f6eb0d33 Mon Sep 17 00:00:00 2001 From: sadnub Date: Fri, 14 May 2021 18:48:49 -0400 Subject: [PATCH] fix default custom field value not being used if blank value is present on model. Fixes #501 --- api/tacticalrmm/scripts/tests.py | 20 +++++++++++++++++++- api/tacticalrmm/tacticalrmm/utils.py | 9 ++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/api/tacticalrmm/scripts/tests.py b/api/tacticalrmm/scripts/tests.py index 4dae409d..8105c11c 100644 --- a/api/tacticalrmm/scripts/tests.py +++ b/api/tacticalrmm/scripts/tests.py @@ -388,7 +388,7 @@ class TestScriptViews(TacticalTestCase): ) # test with set value - baker.make( + value = baker.make( "clients.SiteCustomField", field=field, site=agent.site, @@ -399,6 +399,24 @@ class TestScriptViews(TacticalTestCase): Script.parse_script_args(agent=agent, shell="python", args=args), ) + # test with set but empty field value + value.string_value = "" # type: ignore + value.save() # type: ignore + + self.assertEqual( + ["-Parameter", "-Another 'DEFAULT'"], + Script.parse_script_args(agent=agent, shell="python", args=args), + ) + + # test blank default and value + field.default_value_string = "" # type: ignore + field.save() # type: ignore + + self.assertEqual( + ["-Parameter", "-Another ''"], + Script.parse_script_args(agent=agent, shell="python", args=args), + ) + def test_script_arg_replacement_array_fields(self): agent = baker.make_recipe("agents.agent") field = baker.make( diff --git a/api/tacticalrmm/tacticalrmm/utils.py b/api/tacticalrmm/tacticalrmm/utils.py index 1909ab64..bd898701 100644 --- a/api/tacticalrmm/tacticalrmm/utils.py +++ b/api/tacticalrmm/tacticalrmm/utils.py @@ -336,13 +336,16 @@ def replace_db_values( model_fields = getattr(field, f"{model}_fields") value = None if model_fields.filter(**{model: obj}).exists(): - value = model_fields.get(**{model: obj}).value + if field.type != "checkbox" and model_fields.get(**{model: obj}).value: + value = model_fields.get(**{model: obj}).value + elif field.type == "checkbox": + value = model_fields.get(**{model: obj}).value # need explicit None check since a false boolean value will pass default value - if value == None and field.default_value: + if value == None and field.default_value != None: value = field.default_value - # check if value exists and if not use defa + # check if value exists and if not use default if value and field.type == "multiple": value = ( f"'{format_shell_array(value)}'"