Beispiel #1
0
    def test_get_latest_master_release_not_permitted(self):
        self.linked_app.master = self.plain_master_app.get_id

        release = self.plain_master_app.make_build()
        release.is_released = True
        release.save()
        self.addCleanup(release.delete)

        latest_master_release = self.linked_app.get_latest_master_release()
        self.assertEqual(release.get_id, latest_master_release.get_id)

        self.domain_link.linked_domain = 'other'
        self.domain_link.save()
        get_domain_master_link.clear('domain-2')

        def _revert():
            self.domain_link.linked_domain = 'domain-2'
            self.domain_link.save()

        self.addCleanup(_revert)

        with self.assertRaises(ActionNotPermitted):
            # re-fetch to bust memoize cache
            LinkedApplication.get(
                self.linked_app._id).get_latest_master_release()
Beispiel #2
0
    def test_override_translations(self):
        translations = {'en': {'updates.check.begin': 'update?'}}

        self.linked_app.master = self.plain_master_app.get_id

        copy = self.plain_master_app.make_build()
        copy.save()
        self.addCleanup(copy.delete)

        self.plain_master_app.save()  # increment version number
        copy1 = self.plain_master_app.make_build()
        copy1.is_released = True
        copy1.save()
        self.addCleanup(copy1.delete)

        self.linked_app.linked_app_translations = translations
        self.linked_app.save()
        self.assertEqual(self.linked_app.translations, {})

        update_linked_app(self.linked_app, 'test_override_translations')
        # fetch after update to get the new version
        self.linked_app = LinkedApplication.get(self.linked_app._id)

        self.assertEqual(self.plain_master_app.translations, {})
        self.assertEqual(self.linked_app.linked_app_translations, translations)
        self.assertEqual(self.linked_app.translations, translations)
Beispiel #3
0
    def test_update_from_specific_build(self, *args):
        master_app = Application.new_app(self.domain, "Master Application")
        master_app.linked_whitelist = [self.linked_domain]
        master_app.save()
        self.addCleanup(master_app.delete)

        linked_app = LinkedApplication.new_app(self.linked_domain,
                                               "Linked Application")
        linked_app.master = master_app.get_id
        linked_app.save()
        self.addCleanup(linked_app.delete)

        master_app.add_module(Module.new_module('M1', None))
        copy1 = self._make_build(master_app, True)

        master_app.add_module(Module.new_module('M2', None))
        master_app.save()  # increment version number
        self._make_build(master_app, True)

        update_linked_app(linked_app,
                          'test_update_from_specific_build',
                          master_build=copy1)
        linked_app = LinkedApplication.get(linked_app._id)

        self.assertEqual(len(linked_app.modules), 1)
        self.assertEqual(linked_app.version, copy1.version)
Beispiel #4
0
    def test_override_translations(self):
        translations = {'en': {'updates.check.begin': 'update?'}}

        self.linked_app.master = self.plain_master_app.get_id

        copy = self.plain_master_app.make_build()
        copy.save()
        self.addCleanup(copy.delete)

        self.plain_master_app.save()  # increment version number
        copy1 = self.plain_master_app.make_build()
        copy1.is_released = True
        copy1.save()
        self.addCleanup(copy1.delete)

        self.linked_app.linked_app_translations = translations
        self.linked_app.save()
        self.assertEqual(self.linked_app.translations, {})

        update_linked_app(self.linked_app, 'test_override_translations')
        # fetch after update to get the new version
        self.linked_app = LinkedApplication.get(self.linked_app._id)

        self.assertEqual(self.plain_master_app.translations, {})
        self.assertEqual(self.linked_app.linked_app_translations, translations)
        self.assertEqual(self.linked_app.translations, translations)
    def handle(self, master_id, linked_id, url_base, domain, username, api_key, **options):
        remote_details = RemoteLinkDetails(
            url_base,
            username,
            api_key,
        )

        linked_app = LinkedApplication.get(linked_id)
        link_app(linked_app, domain, master_id, remote_details)
Beispiel #6
0
 def test_app_build_and_release(self, *args):
     self._make_master1_build(True)
     original_version = self.linked_app.version
     self.manager.release([
         self._model_status(MODEL_APP, detail=AppLinkDetail(app_id=self.master1._id).to_json()),
     ], [self.linked_domain], True)
     self._assert_domain_outcomes({self.linked_domain}, set())
     self.linked_application = LinkedApplication.get(self.linked_app._id)
     self.assertEqual(original_version + 1, self.linked_application.version)
     self.assertTrue(self.linked_application.is_released)
    def test_override_logo(self):
        image_data = _get_image_data()
        image = CommCareImage.get_by_data(image_data)
        image.attach_data(image_data, original_filename='logo.png')
        image.add_domain(self.linked_app.domain)
        image.save()
        self.addCleanup(image.delete)

        image_path = "jr://file/commcare/logo/data/hq_logo_android_home.png"

        logo_refs = {
            "hq_logo_android_home": {
                "humanized_content_length": "45.4 KB",
                "icon_class": "fa fa-picture-o",
                "image_size": "448 X 332 Pixels",
                "m_id": image._id,
                "media_type": "Image",
                "path": "jr://file/commcare/logo/data/hq_logo_android_home.png",
                "uid": "3b79a76a067baf6a23a0b6978b2fb352",
                "updated": False,
                "url": "/hq/multimedia/file/CommCareImage/e3c45dd61c5593fdc5d985f0b99f6199/"
            },
        }

        self.linked_app.master = self.plain_master_app.get_id

        copy = self.plain_master_app.make_build()
        copy.save()
        self.addCleanup(copy.delete)

        self.plain_master_app.save()  # increment version number
        copy1 = self.plain_master_app.make_build()
        copy1.is_released = True
        copy1.save()
        self.addCleanup(copy1.delete)

        self.linked_app.version = 1

        self.linked_app.linked_app_logo_refs = logo_refs
        self.linked_app.create_mapping(image, image_path, save=False)
        self.linked_app.save()
        self.assertEqual(self.linked_app.logo_refs, {})

        update_linked_app(self.linked_app, 'test_override_logos')
        # fetch after update to get the new version
        self.linked_app = LinkedApplication.get(self.linked_app._id)

        self.assertEqual(self.plain_master_app.logo_refs, {})
        self.assertEqual(self.linked_app.linked_app_logo_refs, logo_refs)
        self.assertEqual(self.linked_app.logo_refs, logo_refs)

        # cleanup the linked app logo properties
        self.linked_app.linked_app_logo_refs = {}
        self.linked_app.save()
Beispiel #8
0
 def test_app_build_and_release(self, *args):
     self._make_master1_build(True)
     original_version = self.linked_app.version
     self._assert_release([
         self._linked_data_view_model(
             MODEL_APP,
             detail=AppLinkDetail(app_id=self.master1._id).to_json()),
     ],
                          build_apps=True)
     self.linked_application = LinkedApplication.get(self.linked_app._id)
     self.assertEqual(original_version + 1, self.linked_application.version)
     self.assertTrue(self.linked_application.is_released)
    def test_overwrite_app_override_form_unique_ids(self):
        module = self.master1.add_module(Module.new_module('M1', None))
        master_form = module.new_form('f1', None, self.get_xml('very_simple_form').decode('utf-8'))

        add_xform_resource_overrides(self.linked_domain, self.linked_app.get_id, {master_form.unique_id: '123'})
        overwrite_app(self.linked_app, self.master1)

        self.assertEqual(
            {master_form.xmlns: '123'},
            self._get_form_ids_by_xmlns(LinkedApplication.get(self.linked_app._id))
        )

        ResourceOverride.objects.filter(domain=self.linked_domain, app_id=self.linked_app.get_id).delete()
Beispiel #10
0
    def test_overwrite_app_maintain_ids(self):
        module = self.plain_master_app.add_module(Module.new_module(
            'M1', None))
        module.new_form('f1', None, self.get_xml('very_simple_form'))

        module = self.linked_app.add_module(Module.new_module('M1', None))
        module.new_form('f1', None, self.get_xml('very_simple_form'))

        id_map_before = _get_form_id_map(self.linked_app)

        overwrite_app(self.linked_app, self.plain_master_app, {})
        self.assertEqual(
            id_map_before,
            _get_form_id_map(LinkedApplication.get(self.linked_app._id)))
Beispiel #11
0
    def test_overwrite_app_maintain_ids(self):
        module = self.plain_master_app.add_module(Module.new_module('M1', None))
        module.new_form('f1', None, self.get_xml('very_simple_form').decode('utf-8'))

        module = self.linked_app.add_module(Module.new_module('M1', None))
        module.new_form('f1', None, self.get_xml('very_simple_form').decode('utf-8'))

        id_map_before = _get_form_id_map(self.linked_app)

        overwrite_app(self.linked_app, self.plain_master_app, {})
        self.assertEqual(
            id_map_before,
            _get_form_id_map(LinkedApplication.get(self.linked_app._id))
        )
Beispiel #12
0
    def test_overwrite_app_override_form_unique_ids(self):
        master_form = list(self.master1.get_forms(bare=True))[0]

        add_xform_resource_overrides(self.linked_domain,
                                     self.linked_app.get_id,
                                     {master_form.unique_id: '123'})
        overwrite_app(self.linked_app, self.master1)

        self.assertEqual({master_form.xmlns: '123'},
                         self._get_form_ids_by_xmlns(
                             LinkedApplication.get(self.linked_app._id)))

        ResourceOverride.objects.filter(
            domain=self.linked_domain, app_id=self.linked_app.get_id).delete()
Beispiel #13
0
    def test_overwrite_app_maintain_form_unique_ids(self):
        module = self.master1.add_module(Module.new_module('M1', None))
        module.new_form('f1', None, self.get_xml('very_simple_form').decode('utf-8'))

        module = self.linked_app.add_module(Module.new_module('M1', None))
        module.new_form('f1', None, self.get_xml('very_simple_form').decode('utf-8'))

        id_map_before = _get_form_ids_by_xmlns(self.linked_app)

        overwrite_app(self.linked_app, self.master1, {})
        self.assertEqual(
            id_map_before,
            _get_form_ids_by_xmlns(LinkedApplication.get(self.linked_app._id))
        )
    def test_override_translations(self, *args):
        translations = {'en': {'updates.check.begin': 'update?'}}

        self._make_master1_build(True)
        self._make_master1_build(True)

        self.linked_app.linked_app_translations = translations
        self.linked_app.save()
        self.assertEqual(self.linked_app.translations, {})

        self._pull_linked_app(self.master1.get_id)
        self.linked_app = LinkedApplication.get(self.linked_app._id)
        self.assertEqual(self.master1.translations, {})
        self.assertEqual(self.linked_app.linked_app_translations, translations)
        self.assertEqual(self.linked_app.translations, translations)
Beispiel #15
0
    def handle(self, master_id, linked_id, **options):
        print("Linking apps")
        master_app = Application.get(master_id)
        master_version = get_latest_released_app_version(master_app.domain, master_id)
        if not master_version:
            raise CommandError(
                "Creating linked app failed."
                " Unable to get latest released version of your app."
                " Make sure you have at least one released build."
            )

        linked_app = LinkedApplication.get(linked_id)

        link_app(linked_app, master_app.domain, master_id)
        update_linked_app(linked_app, 'system')
Beispiel #16
0
    def handle(self, master_id, linked_id, **options):
        print("Linking apps")
        master_app = Application.get(master_id)
        master_version = get_latest_released_app_version(master_app.domain, master_id)
        if not master_version:
            raise CommandError(
                "Creating linked app failed."
                " Unable to get latest released version of your app."
                " Make sure you have at least one released build."
            )

        linked_app = LinkedApplication.get(linked_id)

        link_app(linked_app, master_app.domain, master_id)
        update_linked_app(linked_app, 'system')
Beispiel #17
0
    def test_get_latest_master_release_not_permitted(self):
        self.linked_app.master = self.plain_master_app.get_id

        release = self.plain_master_app.make_build()
        release.is_released = True
        release.save()
        self.addCleanup(release.delete)

        latest_master_release = self.linked_app.get_latest_master_release()
        self.assertEqual(release.get_id, latest_master_release.get_id)

        self.domain_link.linked_domain = 'other'
        self.domain_link.save()
        get_domain_master_link.clear('domain-2')

        def _revert():
            self.domain_link.linked_domain = 'domain-2'
            self.domain_link.save()

        self.addCleanup(_revert)

        with self.assertRaises(ActionNotPermitted):
            # re-fetch to bust memoize cache
            LinkedApplication.get(self.linked_app._id).get_latest_master_release()
    def handle(self, master_id, linked_id, url_base, domain, username, api_key,
               **options):
        remote_app_details = RemoteAppDetails(url_base, domain, username,
                                              api_key, master_id)

        linked_app = LinkedApplication.get(linked_id)
        whilelist_app_on_remote(remote_app_details, linked_app.domain)

        linked_app.master = master_id
        linked_app.remote_url_base = url_base
        linked_app.master_domain = domain
        linked_app.remote_auth.username = username
        linked_app.remote_auth.api_key = api_key
        linked_app.version = 0
        linked_app.doc_type = 'LinkedApplication'
        linked_app.save()
Beispiel #19
0
    def test_update_from_specific_build(self, *args):
        factory = AppFactory(self.domain, "Upstream Application")
        m0, f0 = factory.new_basic_module("M1", None)
        f0.source = get_simple_form()
        master_app = factory.app
        master_app.save()
        self.addCleanup(master_app.delete)

        linked_app = LinkedApplication.new_app(self.linked_domain,
                                               "Linked Application")
        linked_app.save()
        self.addCleanup(linked_app.delete)

        copy1 = self._make_build(master_app, True)

        m1, f1 = factory.new_basic_module("M2", None)
        f1.source = get_simple_form()
        master_app.save()  # increment version number
        self._make_build(master_app, True)

        update_linked_app(linked_app, copy1, 'test_update_from_specific_build')
        linked_app = LinkedApplication.get(linked_app._id)
        self.assertEqual(len(linked_app.modules), 1)
        self.assertEqual(linked_app.version, copy1.version)
 def setUp(self):
     # re-fetch app
     self.linked_app = LinkedApplication.get(self.linked_app._id)
 def _pull_linked_app(self, upstream_app_id):
     update_linked_app(self.linked_app, upstream_app_id,
                       'TestLinkedApps user')
     self.linked_app = LinkedApplication.get(self.linked_app._id)
Beispiel #22
0
    def test_override_logo(self):
        image_data = _get_image_data()
        image = CommCareImage.get_by_data(image_data)
        image.attach_data(image_data, original_filename='logo.png')
        image.add_domain(self.linked_app.domain)
        image.save()
        self.addCleanup(image.delete)

        image_path = "jr://file/commcare/logo/data/hq_logo_android_home.png"

        logo_refs = {
            "hq_logo_android_home": {
                "humanized_content_length":
                "45.4 KB",
                "icon_class":
                "fa fa-picture-o",
                "image_size":
                "448 X 332 Pixels",
                "m_id":
                image._id,
                "media_type":
                "Image",
                "path":
                "jr://file/commcare/logo/data/hq_logo_android_home.png",
                "uid":
                "3b79a76a067baf6a23a0b6978b2fb352",
                "updated":
                False,
                "url":
                "/hq/multimedia/file/CommCareImage/e3c45dd61c5593fdc5d985f0b99f6199/"
            },
        }

        self.linked_app.master = self.plain_master_app.get_id

        copy = self.plain_master_app.make_build()
        copy.save()
        self.addCleanup(copy.delete)

        self.plain_master_app.save()  # increment version number
        copy1 = self.plain_master_app.make_build()
        copy1.is_released = True
        copy1.save()
        self.addCleanup(copy1.delete)

        self.linked_app.version = 1

        self.linked_app.linked_app_logo_refs = logo_refs
        self.linked_app.create_mapping(image, image_path, save=False)
        self.linked_app.save()
        self.assertEqual(self.linked_app.logo_refs, {})

        update_linked_app(self.linked_app, 'test_override_logos')
        # fetch after update to get the new version
        self.linked_app = LinkedApplication.get(self.linked_app._id)

        self.assertEqual(self.plain_master_app.logo_refs, {})
        self.assertEqual(self.linked_app.linked_app_logo_refs, logo_refs)
        self.assertEqual(self.linked_app.logo_refs, logo_refs)

        # cleanup the linked app logo properties
        self.linked_app.linked_app_logo_refs = {}
        self.linked_app.save()
Beispiel #23
0
 def _pull_linked_app(self):
     update_linked_app(self.linked_app, 'TestLinkedApps user')
     self.linked_app = LinkedApplication.get(self.linked_app._id)
Beispiel #24
0
 def setUp(self):
     # re-fetch app
     self.linked_app = LinkedApplication.get(self.linked_app._id)