From 77d44e92f68ab36d3c9ac73bcd65adf2b21884b2 Mon Sep 17 00:00:00 2001 From: Agus Hilman Date: Mon, 13 Jul 2020 20:42:06 +0700 Subject: [PATCH] Triggers referring to hidden question will produce an error. --- pyxform/question.py | 10 ++++++++++ pyxform/tests_v1/test_trigger.py | 16 ++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/pyxform/question.py b/pyxform/question.py index c1633e1ae..02e7f19d7 100644 --- a/pyxform/question.py +++ b/pyxform/question.py @@ -32,6 +32,16 @@ def xml_instance(self, **kwargs): def xml_control(self): if ("calculate" in self.bind or self.trigger) and not (self.label or self.hint): + nested_setvalues = self.get_root().get_setvalues_for_question_name( + self.name + ) + if nested_setvalues: + for setvalue in nested_setvalues: + msg = ( + "Trigger was added for ${%s} that refers to hidden question. This is not allowed." + % setvalue[0] + ) + raise PyXFormError(msg) return None xml_node = self.build_xml() diff --git a/pyxform/tests_v1/test_trigger.py b/pyxform/tests_v1/test_trigger.py index 70155bed2..6da047f4a 100644 --- a/pyxform/tests_v1/test_trigger.py +++ b/pyxform/tests_v1/test_trigger.py @@ -158,6 +158,22 @@ def test_handling_trigger_column_with_no_calculation_no_label_no_hint(self): ], ) + def test_trigger_refer_to_hidden_node_ref_gives_error(self): + self.assertPyxformXform( + name="trigger-invalid-ref", + md=""" + | survey | | | | | | + | | type | name | label | trigger | calculation | + | | calculate | one | | | 5 + 4 | + | | calculate | one-ts | | ${one} | now() | + | | note | note | timestamp: ${one-ts} | | | + """, + errored=True, + error__contains=[ + "Trigger was added for ${one-ts} that refers to hidden question. This is not allowed." + ], + ) + def test_handling_trigger_column_in_group(self): md = """ | survey | | | | | |