Esempio n. 1
0
def toggle_demo_mode(request, domain, user_id):
    user = CommCareUser.get_by_user_id(user_id, domain)
    demo_mode = request.POST.get('demo_mode', 'no')
    demo_mode = True if demo_mode == 'yes' else False

    edit_user_url = reverse(EditCommCareUserView.urlname, args=[domain, user_id])
    # handle bad POST param
    if user.is_demo_user == demo_mode:
        warning = _("User is already in Demo mode!") if user.is_demo_user else _("User is not in Demo mode!")
        messages.warning(request, warning)
        return HttpResponseRedirect(edit_user_url)

    if demo_mode:
        download = DownloadBase()
        res = turn_on_demo_mode_task.delay(user.get_id, domain)
        download.set_task(res)
        return HttpResponseRedirect(
            reverse(
                DemoRestoreStatusView.urlname,
                args=[domain, download.download_id, user_id]
            )
        )
    else:
        from corehq.apps.app_manager.views.utils import unset_practice_mode_configured_apps, \
            get_practice_mode_configured_apps
        # if the user is being used as practice user on any apps, check/ask for confirmation
        apps = get_practice_mode_configured_apps(domain)
        confirm_turn_off = True if (request.POST.get('confirm_turn_off', 'no')) == 'yes' else False
        if apps and not confirm_turn_off:
            return HttpResponseRedirect(reverse(ConfirmTurnOffDemoModeView.urlname, args=[domain, user_id]))

        turn_off_demo_mode(user)
        unset_practice_mode_configured_apps(domain, user.get_id)
        messages.success(request, _("Successfully turned off demo mode!"))
    return HttpResponseRedirect(edit_user_url)
Esempio n. 2
0
def toggle_demo_mode(request, domain, user_id):
    user = CommCareUser.get_by_user_id(user_id, domain)
    demo_mode = request.POST.get('demo_mode', 'no')
    demo_mode = True if demo_mode == 'yes' else False

    edit_user_url = reverse(EditCommCareUserView.urlname,
                            args=[domain, user_id])
    # handle bad POST param
    if user.is_demo_user == demo_mode:
        warning = _("User is already in Demo mode!"
                    ) if user.is_demo_user else _("User is not in Demo mode!")
        messages.warning(request, warning)
        return HttpResponseRedirect(edit_user_url)

    if demo_mode:
        download = DownloadBase()
        res = turn_on_demo_mode_task.delay(user, domain)
        download.set_task(res)
        return HttpResponseRedirect(
            reverse(DemoRestoreStatusView.urlname,
                    args=[domain, download.download_id, user_id]))
    else:
        turn_off_demo_mode(user)
        messages.success(request, _("Successfully turned off demo mode!"))
    return HttpResponseRedirect(edit_user_url)
    def test_update_user_restore(self, mock):
        # updating user restore should result in version change in restore resource
        #   so that CommCare mobile will refetch the resource
        turn_on_demo_mode(self.user, self.domain)
        app = self.factory.app
        app.practice_mobile_worker_id = self.user._id
        app.save()

        self.assertXmlPartialEqual(
            self._get_restore_resource(self.user.demo_restore_id),
            app.create_suite(),
            "./user-restore"
        )

        version_before = self.user.demo_restore_id
        turn_off_demo_mode(self.user)
        turn_on_demo_mode(self.user, self.domain)
        version_after = self.user.demo_restore_id
        self.assertNotEqual(version_before, version_after)

        # refetch so that memoized app.get_practice_user gets busted`
        app = Application.get(app._id)
        app.build_spec.version = '2.30.0'  # for some reason, this gets set to an old version, after refetch
        self.assertXmlPartialEqual(
            self._get_restore_resource(version_after),
            app.create_suite(),
            "./user-restore"
        )
Esempio n. 4
0
def toggle_demo_mode(request, domain, user_id):
    user = CommCareUser.get_by_user_id(user_id, domain)
    demo_mode = request.POST.get('demo_mode', 'no')
    demo_mode = True if demo_mode == 'yes' else False

    edit_user_url = reverse(EditCommCareUserView.urlname, args=[domain, user_id])
    # handle bad POST param
    if user.is_demo_user == demo_mode:
        warning = _("User is already in Demo mode!") if user.is_demo_user else _("User is not in Demo mode!")
        messages.warning(request, warning)
        return HttpResponseRedirect(edit_user_url)

    if demo_mode:
        download = DownloadBase()
        res = turn_on_demo_mode_task.delay(user, domain)
        download.set_task(res)
        return HttpResponseRedirect(
            reverse(
                DemoRestoreStatusView.urlname,
                args=[domain, download.download_id, user_id]
            )
        )
    else:
        turn_off_demo_mode(user)
        messages.success(request, _("Successfully turned off demo mode!"))
    return HttpResponseRedirect(edit_user_url)
Esempio n. 5
0
    def test_update_user_restore(self, mock):
        # updating user restore should result in version change in restore resource
        #   so that CommCare mobile will refetch the resource
        turn_on_demo_mode(self.user, self.domain)
        app = self.factory.app
        app.practice_mobile_worker_id = self.user._id
        app.save()

        self.assertXmlPartialEqual(
            self._get_restore_resource(self.user.demo_restore_id),
            app.create_suite(),
            "./user-restore"
        )

        version_before = self.user.demo_restore_id
        turn_off_demo_mode(self.user)
        turn_on_demo_mode(self.user, self.domain)
        version_after = self.user.demo_restore_id
        self.assertNotEqual(version_before, version_after)

        # refetch so that memoized app.get_practice_user gets busted`
        app = Application.get(app._id)
        app.build_spec.version = '2.30.0'  # for some reason, this gets set to an old version, after refetch
        self.assertXmlPartialEqual(
            self._get_restore_resource(version_after),
            app.create_suite(),
            "./user-restore"
        )
Esempio n. 6
0
def toggle_demo_mode(request, domain, user_id):
    user = CommCareUser.get_by_user_id(user_id, domain)
    demo_mode = request.POST.get('demo_mode', 'no')
    demo_mode = True if demo_mode == 'yes' else False

    edit_user_url = reverse(EditCommCareUserView.urlname, args=[domain, user_id])
    # handle bad POST param
    if user.is_demo_user == demo_mode:
        warning = _("User is already in Demo mode!") if user.is_demo_user else _("User is not in Demo mode!")
        messages.warning(request, warning)
        return HttpResponseRedirect(edit_user_url)

    if demo_mode:
        download = DownloadBase()
        res = turn_on_demo_mode_task.delay(user.get_id, domain)
        download.set_task(res)
        return HttpResponseRedirect(
            reverse(
                DemoRestoreStatusView.urlname,
                args=[domain, download.download_id, user_id]
            )
        )
    else:
        from corehq.apps.app_manager.views.utils import unset_practice_mode_configured_apps, \
            get_practice_mode_configured_apps
        # if the user is being used as practice user on any apps, check/ask for confirmation
        apps = get_practice_mode_configured_apps(domain)
        confirm_turn_off = True if (request.POST.get('confirm_turn_off', 'no')) == 'yes' else False
        if apps and not confirm_turn_off:
            return HttpResponseRedirect(reverse(ConfirmTurnOffDemoModeView.urlname, args=[domain, user_id]))

        turn_off_demo_mode(user)
        unset_practice_mode_configured_apps(domain, user.get_id)
        messages.success(request, _("Successfully turned off demo mode!"))
    return HttpResponseRedirect(edit_user_url)
Esempio n. 7
0
    def test_demo_user_data_in_restore(self):
        # assert that demo users have '<data user_type="demo">' element in restore XML
        demo_element = '<data key="{}">{}</data>'.format(COMMCARE_USER_TYPE_KEY, COMMCARE_USER_TYPE_DEMO)

        turn_off_demo_mode(self.user)
        restore = self._raw_restore_response()
        self.assertFalse(demo_element in restore)

        turn_on_demo_mode(self.user, self.domain)
        restore = self._raw_restore_response()
        self.assertTrue(demo_element in restore)
Esempio n. 8
0
    def test_demo_restore(self):
        # restore should always update for normal users
        self._assert_restore(should_change=True)

        # restore should be frozen for demo user
        turn_on_demo_mode(self.user, self.domain)
        self._assert_restore(should_change=False)

        # restore should update once demo mode is off
        turn_off_demo_mode(self.user)
        self._assert_restore(should_change=True)
    def test_demo_restore(self):
        # restore should always update for normal users
        self._assert_restore(should_change=True)

        # restore should be frozen for demo user
        turn_on_demo_mode(self.user, self.domain)
        self._assert_restore(should_change=False)

        # restore should update once demo mode is off
        turn_off_demo_mode(self.user)
        self._assert_restore(should_change=True)
Esempio n. 10
0
    def test_demo_user_data_in_restore(self):
        # assert that demo users have '<data user_type="demo">' element in restore XML
        demo_element = '<data key="{}">{}</data>'.format(COMMCARE_USER_TYPE_KEY, COMMCARE_USER_TYPE_DEMO)

        turn_off_demo_mode(self.user)
        restore = self._raw_restore_response().decode('utf-8')
        self.assertFalse(demo_element in restore)

        turn_on_demo_mode(self.user, self.domain)
        restore = self._raw_restore_response().decode('utf-8')
        self.assertTrue(demo_element in restore)
Esempio n. 11
0
 def tearDown(self):
     self.factory.app.delete()
     turn_off_demo_mode(self.user)
 def tearDown(self):
     self.factory.app.delete()
     turn_off_demo_mode(self.user)