fix default custom field value not being used if blank value is present on model. Fixes #501

This commit is contained in:
sadnub 2021-05-14 18:48:49 -04:00
parent 9feb76ca81
commit 2d1863031c
2 changed files with 25 additions and 4 deletions

View File

@ -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(

View File

@ -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)}'"