def test_owner_id_maps_to_attribute(self):
     factory = AppFactory()
     # Create form1 which uses case type 'house'
     module1, form1 = factory.new_module(Module, 'open_case', 'house')
     # Form1 updates house.owner_id
     factory.form_requires_case(form1,
                                case_type='house',
                                update={'owner_id': 'new_owner'})
     # Verify that the actual case property is '@owner_id', not 'owner_id'
     self.assertCaseProperties(factory.app, 'house', ['@owner_id'])
 def test_basic_apps(self):
     for class_ in (Module, AdvancedModule):
         factory = AppFactory()
         m1, m1f1 = factory.new_module(class_, 'open_case', 'house')
         factory.form_opens_case(m1f1)
         m1f2 = factory.new_form(m1)
         factory.form_requires_case(m1f2, case_type='house', update={
             'foo': '/data/question1',
             'bar': '/data/question2',
         })
         self.assertCaseProperties(factory.app, 'house', ['foo', 'bar'])
 def test_basic_apps(self):
     for class_ in (Module, AdvancedModule):
         factory = AppFactory()
         m1, m1f1 = factory.new_module(class_, 'open_case', 'house')
         factory.form_opens_case(m1f1)
         m1f2 = factory.new_form(m1)
         factory.form_requires_case(m1f2, case_type='house', update={
             'foo': '/data/question1',
             'bar': '/data/question2',
         })
         self.assertCaseProperties(factory.app, 'house', ['foo', 'bar'])
class ModuleAsChildTestBase(TestXmlMixin):
    file_path = ('data', 'suite')
    child_module_class = None

    def setUp(self):
        self.factory = AppFactory(build_version='2.20.0', domain=DOMAIN)
        self.module_0, _ = self.factory.new_basic_module('parent', 'gold-fish')
        self.module_1, _ = self.factory.new_module(self.child_module_class,
                                                   'child',
                                                   'guppy',
                                                   parent_module=self.module_0)

        self.app = self.factory.app

    def test_basic_workflow(self):
        # make module_1 as submenu to module_0
        XML = """
        <partial>
          <menu id="m0">
            <text>
              <locale id="modules.m0"/>
            </text>
            <command id="m0-f0"/>
          </menu>
          <menu root="m0" id="m1">
            <text>
              <locale id="modules.m1"/>
            </text>
            <command id="m1-f0"/>
          </menu>
        </partial>
        """
        self.assertXmlPartialEqual(XML, self.app.create_suite(), "./menu")

    def test_workflow_with_put_in_root(self):
        # make module_1 as submenu to module_0
        self.module_1.put_in_root = True

        XML = """
        <partial>
          <menu id="m0">
            <text>
              <locale id="modules.m0"/>
            </text>
            <command id="m0-f0"/>
          </menu>
          <menu id="m0">
            <text>
              <locale id="modules.m0"/>
            </text>
            <command id="m1-f0"/>
          </menu>
        </partial>
        """
        self.assertXmlPartialEqual(XML, self.app.create_suite(), "./menu")

    @patch('corehq.apps.app_manager.helpers.validators.domain_has_privilege',
           return_value=True)
    @patch('corehq.apps.app_manager.models.validate_xform', return_value=None)
    @patch('corehq.apps.builds.models.BuildSpec.supports_j2me',
           return_value=False)
    def test_deleted_parent(self, *args):
        self.module_1.root_module_id = "unknownmodule"

        cycle_error = {
            'type': 'unknown root',
        }
        errors = self.app.validate_app()
        self.assertIn(cycle_error, errors)

    @patch('corehq.apps.app_manager.helpers.validators.domain_has_privilege',
           return_value=True)
    @patch('corehq.apps.app_manager.models.validate_xform', return_value=None)
    @patch('corehq.apps.builds.models.BuildSpec.supports_j2me',
           return_value=False)
    def test_circular_relation(self, *args):
        self.module_0.root_module_id = self.module_1.unique_id
        cycle_error = {
            'type': 'root cycle',
        }
        errors = self.app.validate_app()
        self.assertIn(cycle_error, errors)
class ModuleAsChildTestBase(TestXmlMixin):
    file_path = ('data', 'suite')
    child_module_class = None

    def setUp(self):
        self.factory = AppFactory(build_version='2.9.0', domain=DOMAIN)
        self.module_0, _ = self.factory.new_basic_module('parent', 'gold-fish')
        self.module_1, _ = self.factory.new_module(self.child_module_class, 'child', 'guppy', parent_module=self.module_0)

        self.app = self.factory.app

    def test_basic_workflow(self):
        # make module_1 as submenu to module_0
        XML = """
        <partial>
          <menu id="m0">
            <text>
              <locale id="modules.m0"/>
            </text>
            <command id="m0-f0"/>
          </menu>
          <menu root="m0" id="m1">
            <text>
              <locale id="modules.m1"/>
            </text>
            <command id="m1-f0"/>
          </menu>
        </partial>
        """
        self.assertXmlPartialEqual(XML, self.app.create_suite(), "./menu")

    def test_workflow_with_put_in_root(self):
        # make module_1 as submenu to module_0
        self.module_1.put_in_root = True

        XML = """
        <partial>
          <menu id="m0">
            <text>
              <locale id="modules.m0"/>
            </text>
            <command id="m0-f0"/>
          </menu>
          <menu id="m0">
            <text>
              <locale id="modules.m0"/>
            </text>
            <command id="m1-f0"/>
          </menu>
        </partial>
        """
        self.assertXmlPartialEqual(XML, self.app.create_suite(), "./menu")

    @patch('corehq.apps.app_manager.helpers.validators.domain_has_privilege', return_value=True)
    @patch('corehq.apps.app_manager.models.validate_xform', return_value=None)
    def test_deleted_parent(self, *args):
        self.module_1.root_module_id = "unknownmodule"

        cycle_error = {
            'type': 'unknown root',
        }
        errors = self.app.validate_app()
        self.assertIn(cycle_error, errors)

    @patch('corehq.apps.app_manager.helpers.validators.domain_has_privilege', return_value=True)
    @patch('corehq.apps.app_manager.models.validate_xform', return_value=None)
    def test_circular_relation(self, *args):
        self.module_0.root_module_id = self.module_1.unique_id
        cycle_error = {
            'type': 'root cycle',
        }
        errors = self.app.validate_app()
        self.assertIn(cycle_error, errors)
class ModuleAsChildTestBase(TestXmlMixin):
    file_path = ('data', 'suite')
    child_module_class = None

    def setUp(self):
        update_toggle_cache(MODULE_FILTER.slug, DOMAIN, True, NAMESPACE_DOMAIN)
        self.factory = AppFactory(domain=DOMAIN)
        self.module_0, _ = self.factory.new_basic_module('parent', 'gold-fish')
        self.module_1, _ = self.factory.new_module(self.child_module_class, 'child', 'guppy', parent_module=self.module_0)

        self.app = self.factory.app

    def tearDown(self):
        clear_toggle_cache(MODULE_FILTER.slug, DOMAIN, NAMESPACE_DOMAIN)

    def test_basic_workflow(self):
        # make module_1 as submenu to module_0
        XML = """
        <partial>
          <menu id="m0">
            <text>
              <locale id="modules.m0"/>
            </text>
            <command id="m0-f0"/>
          </menu>
          <menu root="m0" id="m1">
            <text>
              <locale id="modules.m1"/>
            </text>
            <command id="m1-f0"/>
          </menu>
        </partial>
        """
        self.assertXmlPartialEqual(XML, self.app.create_suite(), "./menu")

    def test_workflow_with_put_in_root(self):
        # make module_1 as submenu to module_0
        self.module_1.put_in_root = True

        XML = """
        <partial>
          <menu id="m0">
            <text>
              <locale id="modules.m0"/>
            </text>
            <command id="m0-f0"/>
          </menu>
          <menu id="m0">
            <text>
              <locale id="modules.m1"/>
            </text>
            <command id="m1-f0"/>
          </menu>
        </partial>
        """
        self.assertXmlPartialEqual(XML, self.app.create_suite(), "./menu")

    def test_deleted_parent(self):
        self.module_1.root_module_id = "unknownmodule"

        cycle_error = {
            'type': 'unknown root',
        }
        errors = self.app.validate_app()
        self.assertIn(cycle_error, errors)

    def test_circular_relation(self):
        self.module_0.root_module_id = self.module_1.unique_id
        cycle_error = {
            'type': 'root cycle',
        }
        errors = self.app.validate_app()
        self.assertIn(cycle_error, errors)
Exemple #7
0
class ModuleAsChildTestBase(TestXmlMixin):
    file_path = ('data', 'suite')
    child_module_class = None

    def setUp(self):
        update_toggle_cache(MODULE_FILTER.slug, DOMAIN, True, NAMESPACE_DOMAIN)
        self.factory = AppFactory(domain=DOMAIN)
        self.module_0, _ = self.factory.new_basic_module('parent', 'gold-fish')
        self.module_1, _ = self.factory.new_module(self.child_module_class,
                                                   'child',
                                                   'guppy',
                                                   parent_module=self.module_0)

        self.app = self.factory.app

    def tearDown(self):
        clear_toggle_cache(MODULE_FILTER.slug, DOMAIN, NAMESPACE_DOMAIN)

    def test_basic_workflow(self):
        # make module_1 as submenu to module_0
        XML = """
        <partial>
          <menu id="m0">
            <text>
              <locale id="modules.m0"/>
            </text>
            <command id="m0-f0"/>
          </menu>
          <menu root="m0" id="m1">
            <text>
              <locale id="modules.m1"/>
            </text>
            <command id="m1-f0"/>
          </menu>
        </partial>
        """
        self.assertXmlPartialEqual(XML, self.app.create_suite(), "./menu")

    def test_workflow_with_put_in_root(self):
        # make module_1 as submenu to module_0
        self.module_1.put_in_root = True

        XML = """
        <partial>
          <menu id="m0">
            <text>
              <locale id="modules.m0"/>
            </text>
            <command id="m0-f0"/>
          </menu>
          <menu id="m0">
            <text>
              <locale id="modules.m1"/>
            </text>
            <command id="m1-f0"/>
          </menu>
        </partial>
        """
        self.assertXmlPartialEqual(XML, self.app.create_suite(), "./menu")

    def test_deleted_parent(self):
        self.module_1.root_module_id = "unknownmodule"

        cycle_error = {
            'type': 'unknown root',
        }
        errors = self.app.validate_app()
        self.assertIn(cycle_error, errors)

    def test_circular_relation(self):
        self.module_0.root_module_id = self.module_1.unique_id
        cycle_error = {
            'type': 'root cycle',
        }
        errors = self.app.validate_app()
        self.assertIn(cycle_error, errors)