def test_case_list_form_parent_child_basic(self): """ * Register house (case type = house, basic) * Register house form * Register person (case type = person, parent select = 'Register house', basic) * Register person form * Manager person (case type = person, case list form = 'Register person form', basic) * Manage person form """ factory = AppFactory(build_version='2.9') register_house_module, register_house_form = factory.new_basic_module( 'register_house', 'house') factory.form_opens_case(register_house_form) register_person_module, register_person_form = factory.new_basic_module( 'register_person', 'house') factory.form_updates_case(register_person_form) factory.form_opens_case(register_person_form, case_type='person', is_subcase=True) person_module, update_person_form = factory.new_basic_module( 'update_person', 'person', case_list_form=register_person_form) factory.form_updates_case(update_person_form, parent_case_type='house') self.assertXmlEqual( self.get_xml('case-list-form-suite-parent-child-basic'), factory.app.create_suite())
def test_case_list_form_parent_child_basic(self): """ * Register house (case type = house, basic) * Register house form * Register person (case type = person, parent select = 'Register house', basic) * Register person form * Manager person (case type = person, case list form = 'Register person form', basic) * Manage person form """ factory = AppFactory(build_version='2.9') register_house_module, register_house_form = factory.new_basic_module('register_house', 'house') factory.form_opens_case(register_house_form) register_person_module, register_person_form = factory.new_basic_module('register_person', 'house') factory.form_updates_case(register_person_form) factory.form_opens_case(register_person_form, case_type='person', is_subcase=True) person_module, update_person_form = factory.new_basic_module( 'update_person', 'person', case_list_form=register_person_form ) factory.form_updates_case(update_person_form, parent_case_type='house') self.assertXmlEqual(self.get_xml('case-list-form-suite-parent-child-basic'), factory.app.create_suite())
class FormFilterErrorTests(SimpleTestCase, TestFileMixin): file_path = ('data', 'suite') def setUp(self): self.suite_xml_is_usercase_in_use_patch = patch('corehq.apps.app_manager.suite_xml.is_usercase_in_use') self.suite_xml_is_usercase_in_use_mock = self.suite_xml_is_usercase_in_use_patch.start() self.factory = AppFactory(build_version='2.9') def tearDown(self): self.suite_xml_is_usercase_in_use_patch.stop() def test_error_when_no_case(self): self.suite_xml_is_usercase_in_use_mock.return_value = True __, reg_form = self.factory.new_basic_module('reg_module', 'mother') self.factory.form_opens_case(reg_form) reg_form.form_filter = './due_date <= today()' with self.assertRaises(CaseXPathValidationError): self.factory.app.create_suite() def test_no_error_when_user_case(self): self.suite_xml_is_usercase_in_use_mock.return_value = True __, reg_form = self.factory.new_basic_module('reg_module', 'mother') self.factory.form_opens_case(reg_form) reg_form.form_filter = '#user/due_date <= today()' expected = """ <partial> <menu id="m0"> <text> <locale id="modules.m0"/> </text> <command id="m0-f0" relevant="instance('casedb')/casedb/case[@case_type='commcare-user'][hq_user_id=instance('commcaresession')/session/context/userid][1]/due_date <= today()"/> </menu> </partial> """ self.assertXmlPartialEqual(expected, self.factory.app.create_suite(), './menu') def test_no_error_when_case(self): self.suite_xml_is_usercase_in_use_mock.return_value = False __, update_form = self.factory.new_basic_module('update_mother', 'mother') self.factory.form_updates_case(update_form) update_form.form_filter = '#case/due_date <= today()' expected = """ <partial> <menu id="m0"> <text> <locale id="modules.m0"/> </text> <command id="m0-f0" relevant="instance('casedb')/casedb/case[@case_id=instance('commcaresession')/session/data/case_id]/due_date <= today()"/> </menu> </partial> """ self.assertXmlPartialEqual(expected, self.factory.app.create_suite(), './menu')
def test_with_case_management_both_update(self): factory = AppFactory(build_version="2.9.0/latest") m0, m0f0 = factory.new_basic_module("m0", "frog") factory.form_updates_case(m0f0) m1, m1f0 = factory.new_basic_module("m1", "frog") factory.form_updates_case(m1f0) m0f0.post_form_workflow = WORKFLOW_FORM m0f0.form_links = [FormLink(xpath="(today() - dob) > 7", form_id=m1f0.unique_id)] self.assertXmlPartialEqual(self.get_xml("form_link_update_case"), factory.app.create_suite(), "./entry[1]")
def test_with_case_management_create_update(self): factory = AppFactory(build_version='2.9.0/latest') m0, m0f0 = factory.new_basic_module('m0', 'frog') factory.form_opens_case(m0f0) m1, m1f0 = factory.new_basic_module('m1', 'frog') factory.form_updates_case(m1f0) m0f0.post_form_workflow = WORKFLOW_FORM m0f0.form_links = [FormLink(xpath='true()', form_id=m1f0.unique_id)] self.assertXmlPartialEqual( self.get_xml('form_link_create_update_case'), factory.app.create_suite(), "./entry[1]")
def _prep_case_list_form_app(self): factory = AppFactory(build_version='2.9') case_module, update_case_form = factory.new_basic_module('case_module', 'suite_test') factory.form_updates_case(update_case_form) register_module, register_form = factory.new_basic_module('register_case', 'suite_test') factory.form_opens_case(register_form) case_module.case_list_form.form_id = register_form.get_unique_id() case_module.case_list_form.label = { 'en': 'New Case' } return factory
def _prep_case_list_form_app(self): factory = AppFactory(build_version='2.9') case_module, update_case_form = factory.new_basic_module( 'case_module', 'suite_test') factory.form_updates_case(update_case_form) register_module, register_form = factory.new_basic_module( 'register_case', 'suite_test') factory.form_opens_case(register_form) case_module.case_list_form.form_id = register_form.get_unique_id() case_module.case_list_form.label = {'en': 'New Case'} return factory
def test_case_list_registration_form_advanced(self): factory = AppFactory(build_version='2.9') register_module, register_form = factory.new_advanced_module('register_dugong', 'dugong') factory.form_opens_case(register_form) case_module, update_form = factory.new_advanced_module('update_dugong', 'dugong') factory.form_updates_case(update_form) case_module.case_list_form.form_id = register_form.get_unique_id() case_module.case_list_form.label = { 'en': 'Register another Dugong' } self.assertXmlEqual(self.get_xml('case-list-form-advanced'), factory.app.create_suite())
def test_case_list_registration_form_advanced(self): factory = AppFactory(build_version='2.9') register_module, register_form = factory.new_advanced_module( 'register_dugong', 'dugong') factory.form_opens_case(register_form) case_module, update_form = factory.new_advanced_module( 'update_dugong', 'dugong') factory.form_updates_case(update_form) case_module.case_list_form.form_id = register_form.get_unique_id() case_module.case_list_form.label = {'en': 'Register another Dugong'} self.assertXmlEqual(self.get_xml('case-list-form-advanced'), factory.app.create_suite())
def test_link_to_form_in_parent_module(self): factory = AppFactory(build_version="2.9.0/latest") m0, m0f0 = factory.new_basic_module("enroll child", "child") factory.form_opens_case(m0f0) m1, m1f0 = factory.new_basic_module("child visit", "child") factory.form_updates_case(m1f0) m2, m2f0 = factory.new_advanced_module("visit history", "visit", parent_module=m1) factory.form_updates_case(m2f0, "child") # link to child -> edit child m2f0.post_form_workflow = WORKFLOW_FORM m2f0.form_links = [FormLink(xpath="true()", form_id=m1f0.unique_id)] self.assertXmlPartialEqual(self.get_xml("form_link_child_modules"), factory.app.create_suite(), "./entry[3]")
def test_with_case_management_multiple_links(self): factory = AppFactory(build_version="2.9.0/latest") m0, m0f0 = factory.new_basic_module("m0", "frog") factory.form_opens_case(m0f0) m1, m1f0 = factory.new_basic_module("m1", "frog") factory.form_updates_case(m1f0) m1f1 = factory.new_form(m1) factory.form_opens_case(m1f1) m0f0.post_form_workflow = WORKFLOW_FORM m0f0.form_links = [ FormLink(xpath="a = 1", form_id=m1f0.unique_id), FormLink(xpath="a = 2", form_id=m1f1.unique_id), ] self.assertXmlPartialEqual(self.get_xml("form_link_multiple"), factory.app.create_suite(), "./entry[1]")
def test_case_list_registration_form_advanced_autoload(self): factory = AppFactory(build_version='2.9') register_module, register_form = factory.new_advanced_module( 'register_dugong', 'dugong') factory.form_opens_case(register_form) register_form.actions.load_update_cases.append( LoadUpdateAction(case_tag='usercase', auto_select=AutoSelectCase( mode=AUTO_SELECT_USERCASE, ))) case_module, update_form = factory.new_advanced_module( 'update_dugong', 'dugong') factory.form_updates_case(update_form) case_module.case_list_form.form_id = register_form.get_unique_id() case_module.case_list_form.label = {'en': 'Register another Dugong'} self.assertXmlEqual(self.get_xml('case-list-form-advanced-autoload'), factory.app.create_suite())
def test_case_list_registration_form_advanced_autoload(self): factory = AppFactory(build_version='2.9') register_module, register_form = factory.new_advanced_module('register_dugong', 'dugong') factory.form_opens_case(register_form) register_form.actions.load_update_cases.append(LoadUpdateAction( case_tag='usercase', auto_select=AutoSelectCase( mode=AUTO_SELECT_USERCASE, ) )) case_module, update_form = factory.new_advanced_module('update_dugong', 'dugong') factory.form_updates_case(update_form) case_module.case_list_form.form_id = register_form.get_unique_id() case_module.case_list_form.label = { 'en': 'Register another Dugong' } self.assertXmlEqual(self.get_xml('case-list-form-advanced-autoload'), factory.app.create_suite())
def test_link_to_form_in_parent_module(self): factory = AppFactory(build_version='2.9.0/latest') m0, m0f0 = factory.new_basic_module('enroll child', 'child') factory.form_opens_case(m0f0) m1, m1f0 = factory.new_basic_module('child visit', 'child') factory.form_updates_case(m1f0) m2, m2f0 = factory.new_advanced_module('visit history', 'visit', parent_module=m1) factory.form_updates_case(m2f0, 'child') # link to child -> edit child m2f0.post_form_workflow = WORKFLOW_FORM m2f0.form_links = [ FormLink(xpath="true()", form_id=m1f0.unique_id), ] self.assertXmlPartialEqual(self.get_xml('form_link_child_modules'), factory.app.create_suite(), "./entry[3]")
def test_case_list_form_parent_child_submodule_advanced_rename_case_var( self): """Test that the session vars in the entries for the submodule get updated to match the parent (and to avoid naming conflicts). m3-f0: 'case_id_load_house' -> 'case_id_load_house_renamed' m3-f0: 'case_id_load_house_renamed' -> 'case_id_load_house_renamed_person' """ factory = AppFactory(build_version='2.9') register_house_module, register_house_form = factory.new_basic_module( 'register_house', 'house') factory.form_opens_case(register_house_form) register_person_module, register_person_form = factory.new_advanced_module( 'register_person', 'person') factory.form_updates_case(register_person_form, 'house') factory.form_opens_case(register_person_form, 'person', is_subcase=True) house_module, update_house_form = factory.new_advanced_module( 'update_house', 'house', case_list_form=register_house_form) factory.form_updates_case(update_house_form) # changing this case tag should result in the session var in the submodule entry being updated to match it update_house_form.actions.load_update_cases[ 0].case_tag = 'load_house_renamed' person_module, update_person_form = factory.new_advanced_module( 'update_person', 'person', parent_module=house_module, case_list_form=register_person_form) factory.form_updates_case(update_person_form, 'house') factory.form_updates_case(update_person_form, 'person', parent_case_type='house') # making this case tag the same as the one in the parent module should mean that it will also # get changed to avoid conflicts update_person_form.actions.load_update_cases[ 1].case_tag = 'load_house_renamed' self.assertXmlEqual( self.get_xml( 'case-list-form-suite-parent-child-submodule-advanced-rename-var' ), factory.app.create_suite())
def test_case_list_form_parent_child_submodule_advanced_rename_case_var(self): """Test that the session vars in the entries for the submodule get updated to match the parent (and to avoid naming conflicts). m3-f0: 'case_id_load_house' -> 'case_id_load_house_renamed' m3-f0: 'case_id_load_house_renamed' -> 'case_id_load_house_renamed_person' """ factory = AppFactory(build_version='2.9') register_house_module, register_house_form = factory.new_basic_module('register_house', 'house') factory.form_opens_case(register_house_form) register_person_module, register_person_form = factory.new_advanced_module('register_person', 'person') factory.form_updates_case(register_person_form, 'house') factory.form_opens_case(register_person_form, 'person', is_subcase=True) house_module, update_house_form = factory.new_advanced_module( 'update_house', 'house', case_list_form=register_house_form ) factory.form_updates_case(update_house_form) # changing this case tag should result in the session var in the submodule entry being updated to match it update_house_form.actions.load_update_cases[0].case_tag = 'load_house_renamed' person_module, update_person_form = factory.new_advanced_module( 'update_person', 'person', parent_module=house_module, case_list_form=register_person_form ) factory.form_updates_case(update_person_form, 'house') factory.form_updates_case(update_person_form, 'person', parent_case_type='house') # making this case tag the same as the one in the parent module should mean that it will also # get changed to avoid conflicts update_person_form.actions.load_update_cases[1].case_tag = 'load_house_renamed' self.assertXmlEqual(self.get_xml('case-list-form-suite-parent-child-submodule-advanced-rename-var'), factory.app.create_suite())
class FormFilterErrorTests(SimpleTestCase, TestFileMixin): file_path = ('data', 'suite') def setUp(self): self.suite_xml_is_usercase_in_use_patch = patch( 'corehq.apps.app_manager.suite_xml.is_usercase_in_use') self.suite_xml_is_usercase_in_use_mock = self.suite_xml_is_usercase_in_use_patch.start( ) self.factory = AppFactory(build_version='2.9') def tearDown(self): self.suite_xml_is_usercase_in_use_patch.stop() def test_error_when_no_case(self): self.suite_xml_is_usercase_in_use_mock.return_value = True __, reg_form = self.factory.new_basic_module('reg_module', 'mother') self.factory.form_opens_case(reg_form) reg_form.form_filter = './due_date <= today()' with self.assertRaises(CaseXPathValidationError): self.factory.app.create_suite() def test_no_error_when_user_case(self): self.suite_xml_is_usercase_in_use_mock.return_value = True __, reg_form = self.factory.new_basic_module('reg_module', 'mother') self.factory.form_opens_case(reg_form) reg_form.form_filter = '#user/due_date <= today()' expected = """ <partial> <menu id="m0"> <text> <locale id="modules.m0"/> </text> <command id="m0-f0" relevant="instance('casedb')/casedb/case[@case_type='commcare-user'][hq_user_id=instance('commcaresession')/session/context/userid][1]/due_date <= today()"/> </menu> </partial> """ self.assertXmlPartialEqual(expected, self.factory.app.create_suite(), './menu') def test_no_error_when_case(self): self.suite_xml_is_usercase_in_use_mock.return_value = False __, update_form = self.factory.new_basic_module( 'update_mother', 'mother') self.factory.form_updates_case(update_form) update_form.form_filter = '#case/due_date <= today()' expected = """ <partial> <menu id="m0"> <text> <locale id="modules.m0"/> </text> <command id="m0-f0" relevant="instance('casedb')/casedb/case[@case_id=instance('commcaresession')/session/data/case_id]/due_date <= today()"/> </menu> </partial> """ self.assertXmlPartialEqual(expected, self.factory.app.create_suite(), './menu')
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
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