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)
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" )
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_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)
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_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)
def tearDown(self): self.factory.app.delete() turn_off_demo_mode(self.user)