def test_reference_to_missing_session_variable_in_stack(self): # http://manage.dimagi.com/default.asp?236750 # # Stack create blocks do not update the session after each datum # so items put into the session in one step aren't available later steps # # <datum id="case_id_A" value="instance('commcaresession')/session/data/case_id_new_A"/> # - <datum id="case_id_B" value="instance('casedb')/casedb/case[@case_id=instance('commcaresession')/session/data/case_id_A]/index/host"/> # + <datum id="case_id_B" value="instance('casedb')/casedb/case[@case_id=instance('commcaresession')/session/data/case_id_new_A]/index/host"/> # # in the above example ``case_id_A`` is being added to the session and then # later referenced. However since the session doesn't get updated # the value isn't available in the session. # # To fix this we need to replace any references to previous variables with the full xpath which # that session variable references. # # See corehq.apps.app_manager.suite_xml.post_process.workflow._replace_session_references_in_stack factory = AppFactory(build_version='2.9.0/latest') m0, m0f0 = factory.new_basic_module('person registration', 'person') factory.form_opens_case(m0f0) m1, m1f0 = factory.new_advanced_module('episode registration', 'episode') factory.form_requires_case(m1f0, case_type='person') factory.form_opens_case(m1f0, case_type='episode', is_subcase=True, is_extension=True) m2, m2f0 = factory.new_advanced_module('tests', 'episode') factory.form_requires_case(m2f0, 'episode') factory.advanced_form_autoloads(m2f0, AUTO_SELECT_CASE, 'host', 'load_episode_0') m1f0.post_form_workflow = WORKFLOW_FORM m1f0.form_links = [ FormLink( xpath="true()", form_id=m2f0.unique_id, datums=[ FormDatum( name='case_id_load_episode_0', xpath= "instance('commcaresession')/session/data/case_id_new_episode_0" ) ]), ] self.assertXmlPartialEqual(self.get_xml('form_link_enikshay'), factory.app.create_suite(), "./entry")
def _build_workflow_app(self, mode): factory = AppFactory(build_version='2.9.0') m0, m0f0 = factory.new_basic_module('m0', '') factory.new_form(m0) m1, m1f0 = factory.new_basic_module('m1', 'patient') m1f1 = factory.new_form(m1) factory.form_opens_case(m1f0) factory.form_requires_case(m1f1) m2, m2f0 = factory.new_basic_module('m2', 'patient') m2f1 = factory.new_form(m2) factory.form_requires_case(m2f0) factory.form_requires_case(m2f1) m3, m3f0 = factory.new_basic_module('m3', 'child') m3f1 = factory.new_form(m3) factory.form_requires_case(m3f0, parent_case_type='patient') factory.form_requires_case(m3f1) m4, m4f0 = factory.new_advanced_module('m4', 'patient') factory.form_requires_case(m4f0, case_type='patient') factory.form_requires_case(m4f0, case_type='patient') m4f1 = factory.new_form(m4) factory.form_requires_case(m4f1, case_type='patient') factory.form_requires_case(m4f1, case_type='patient') factory.form_requires_case(m4f1, case_type='patient') m4f2 = factory.new_form(m4) factory.form_requires_case(m4f2, case_type='patient') factory.form_requires_case(m4f2, case_type='patient') factory.advanced_form_autoloads(m4f2, AUTO_SELECT_RAW, 'case_id') m5, m5f0 = factory.new_basic_module('m5', 'patient', parent_module=m1) factory.form_requires_case(m5f0) m6 = factory.new_shadow_module('shadow_module', m1, with_form=False) factory.new_shadow_module('shadow_child', m5, with_form=False, parent_module=m6) for module in factory.app.get_modules(): for form in module.get_forms(): form.post_form_workflow = mode return factory.app
def test_reference_to_missing_session_variable_in_stack(self): # http://manage.dimagi.com/default.asp?236750 # # Stack create blocks do not update the session after each datum # so items put into the session in one step aren't available later steps # # <datum id="case_id_A" value="instance('commcaresession')/session/data/case_id_new_A"/> # - <datum id="case_id_B" value="instance('casedb')/casedb/case[@case_id=instance('commcaresession')/session/data/case_id_A]/index/host"/> # + <datum id="case_id_B" value="instance('casedb')/casedb/case[@case_id=instance('commcaresession')/session/data/case_id_new_A]/index/host"/> # # in the above example ``case_id_A`` is being added to the session and then # later referenced. However since the session doesn't get updated # the value isn't available in the session. # # To fix this we need to replace any references to previous variables with the full xpath which # that session variable references. # # See corehq.apps.app_manager.suite_xml.post_process.workflow._replace_session_references_in_stack factory = AppFactory(build_version='2.9.0/latest') m0, m0f0 = factory.new_basic_module('person registration', 'person') factory.form_opens_case(m0f0) m1, m1f0 = factory.new_advanced_module('episode registration', 'episode') factory.form_requires_case(m1f0, case_type='person') factory.form_opens_case(m1f0, case_type='episode', is_subcase=True, is_extension=True) m2, m2f0 = factory.new_advanced_module('tests', 'episode') factory.form_requires_case(m2f0, 'episode') factory.advanced_form_autoloads(m2f0, AUTO_SELECT_CASE, 'host', 'load_episode_0') m1f0.post_form_workflow = WORKFLOW_FORM m1f0.form_links = [ FormLink(xpath="true()", form_id=m2f0.unique_id, datums=[ FormDatum(name='case_id_load_episode_0', xpath="instance('commcaresession')/session/data/case_id_new_episode_0") ]), ] self.assertXmlPartialEqual(self.get_xml('form_link_enikshay'), factory.app.create_suite(), "./entry")
def _build_workflow_app(self, mode): factory = AppFactory(build_version='2.9.0/latest') m0, m0f0 = factory.new_basic_module('m0', '') factory.new_form(m0) m1, m1f0 = factory.new_basic_module('m1', 'patient') m1f1 = factory.new_form(m1) factory.form_opens_case(m1f0) factory.form_requires_case(m1f1) m2, m2f0 = factory.new_basic_module('m2', 'patient') m2f1 = factory.new_form(m2) factory.form_requires_case(m2f0) factory.form_requires_case(m2f1) m3, m3f0 = factory.new_basic_module('m3', 'child') m3f1 = factory.new_form(m3) factory.form_requires_case(m3f0, parent_case_type='patient') factory.form_requires_case(m3f1) m4, m4f0 = factory.new_advanced_module('m4', 'patient') factory.form_requires_case(m4f0, case_type='patient') factory.form_requires_case(m4f0, case_type='patient') m4f1 = factory.new_form(m4) factory.form_requires_case(m4f1, case_type='patient') factory.form_requires_case(m4f1, case_type='patient') factory.form_requires_case(m4f1, case_type='patient') m4f2 = factory.new_form(m4) factory.form_requires_case(m4f2, case_type='patient') factory.form_requires_case(m4f2, case_type='patient') factory.advanced_form_autoloads(m4f2, AUTO_SELECT_RAW, 'case_id') for module in factory.app.get_modules(): for form in module.get_forms(): form.post_form_workflow = mode return factory.app
def _build_workflow_app(self, mode): factory = AppFactory(build_version="2.9.0/latest") m0, m0f0 = factory.new_basic_module("m0", "") factory.new_form(m0) m1, m1f0 = factory.new_basic_module("m1", "patient") m1f1 = factory.new_form(m1) factory.form_opens_case(m1f0) factory.form_updates_case(m1f1) m2, m2f0 = factory.new_basic_module("m2", "patient") m2f1 = factory.new_form(m2) factory.form_updates_case(m2f0) factory.form_updates_case(m2f1) m3, m3f0 = factory.new_basic_module("m3", "child") m3f1 = factory.new_form(m3) factory.form_updates_case(m3f0, parent_case_type="patient") factory.form_updates_case(m3f1) m4, m4f0 = factory.new_advanced_module("m4", "patient") factory.form_updates_case(m4f0, case_type="patient") factory.form_updates_case(m4f0, case_type="patient") m4f1 = factory.new_form(m4) factory.form_updates_case(m4f1, case_type="patient") factory.form_updates_case(m4f1, case_type="patient") factory.form_updates_case(m4f1, case_type="patient") m4f2 = factory.new_form(m4) factory.form_updates_case(m4f2, case_type="patient") factory.form_updates_case(m4f2, case_type="patient") factory.advanced_form_autoloads(m4f2, AUTO_SELECT_RAW, "case_id") for module in factory.app.get_modules(): for form in module.get_forms(): form.post_form_workflow = mode return factory.app