def test_reset_view_staff(self): logged_in = self.client.login(username=self.staff['username'], password=self.staff['password']) self.assertTrue(logged_in) response = self.client.get('/reset/') self.assertEqual(response.status_code, 405) #set some setting dynamic_settings.set('TEST_SETTING1', 500, 'int') self.assertEqual(dynamic_settings.TEST_SETTING1, 500) response = self.client.post('/reset/', {'key': 'TEST_SETTING1'}) self.assertEqual(response.status_code, 200) content_json = simplejson.loads(response.content) self.assertEqual(content_json['status'], 'success') self.assertEqual(content_json['value'], 73) self.assertEqual(content_json['type'], 'int') self.assertEqual(dynamic_settings.TEST_SETTING1, 73) #call view without key response = self.client.post('/reset/') self.assertEqual(response.status_code, 200) content_json = simplejson.loads(response.content) self.assertEqual(content_json['status'], 'error') #reset a key wjhich is already reseted response = self.client.post('/reset/', {'key': 'TEST_SETTING3'}) self.assertEqual(response.status_code, 200) content_json = simplejson.loads(response.content) self.assertEqual(content_json['status'], 'error') self.assertEqual(dynamic_settings.TEST_SETTING1, 73) self.client.logout()
def test_reset_view_normal(self): logged_in = self.client.login(username=self.normal['username'], password=self.normal['password']) self.assertTrue(logged_in) response = self.client.get('/reset/') #attempt to log the user into admin self.assertEqual(response.status_code, 200) dynamic_settings.set('TEST_SETTING1', 500, 'int') self.assertEqual(dynamic_settings.TEST_SETTING1, 500) response = self.client.post('/reset/', {'key': 'TEST_SETTING1'}) self.assertEqual(response.status_code, 200) self.assertEqual(dynamic_settings.TEST_SETTING1, 500) dynamic_settings.reset('TEST_SETTING1') self.assertEqual(dynamic_settings.TEST_SETTING1, 73) self.client.logout()
def dynamicsettings_set(request): """A view to handle the POST request to set a setting in the database Params: - ``request``: a django http request object Returns: - a response as JSON including the following fields: - ``status``: "success" if the setting was saved in the database, "error" in other cases - on success: - ``value``: the new value of the setting (which is saved in the database) - ``type``: the new type of the setting, can only differ from the original type if it was ``NoneType`` - on error: - ``message``: the message describing the error - ``form``: the validated form rendered in a template (will show the error in the form) """ if request.method=='POST': response_dict = {} settings_form = forms.SettingsForm(request.POST) if settings_form.is_valid(): form_data = settings_form.cleaned_data changed = settings.set(form_data['key'], form_data['value'], form_data['type']) if changed is True: value = settings.__getattr__(form_data['key']) if isinstance(value, (list, tuple, dict)): value = simplejson.dumps(value, indent=4) response_dict.update({ 'status': 'success', 'value': value, 'type': form_data['type'], }) else: form_dict = {'settings_form': settings_form} form_dict.update(csrf_processor(request)) settings_form_rendered = template.loader.render_to_string('dynamicsettings/settings_form.html', form_dict) response_dict.update({ 'status': 'error', 'message': settings_form.errors['__all__'], 'form': settings_form_rendered }) return http.HttpResponse(simplejson.dumps(response_dict, indent=4), mimetype="text/plain") return http.HttpResponseNotAllowed(['GET', 'PUT', 'DELETE', 'HEAD', 'TRACE', 'OPTIONS', 'CONNECT', 'PATCH'])