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_reset(request): """A view to handle the POST request to reset 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 reset in the database, "error" in other cases - on success: - ``value``: the original value of the setting (which is not saved in the database) - ``type``: the original type of the setting - on error: - ``message``: the message describing the error """ if request.method=='POST': key = request.POST.get('key', None) if key is None: response_dict = { 'status': 'error', 'message': _('No variable "key" in POST request.'), } else: reset_success = settings.reset(key) if reset_success is True: value = settings.__getattr__(key) if isinstance(value, (list, tuple, dict)): value = simplejson.dumps(value, indent=4) response_dict = { 'status': 'success', 'value': value, 'type': type(settings.get(key)).__name__, } else: response_dict = { 'status': 'error', 'message': _('The setting "%s" is not saved in the database or can not be reseted.' % request.POST['key']), } return http.HttpResponse(simplejson.dumps(response_dict, indent=4), mimetype="text/plain") return http.HttpResponseNotAllowed(['GET', 'PUT', 'DELETE', 'HEAD', 'TRACE', 'OPTIONS', 'CONNECT', 'PATCH'])
def test_set_view_staff(self): logged_in = self.client.login(username=self.staff['username'], password=self.staff['password']) self.assertTrue(logged_in) response = self.client.get('/set/') self.assertEqual(response.status_code, 405) #check first setting response = self.client.post('/set/', {'key': 'TEST_SETTING1', 'value': '42', 'type': 'int'}) self.assertEqual(response.status_code, 200) content_json = simplejson.loads(response.content) self.assertEqual(content_json['status'], 'success') self.assertEqual(content_json['value'], 42) self.assertEqual(content_json['type'], 'int') self.assertTrue(dynamic_settings.is_in_db('TEST_SETTING1')) #change to non int response = self.client.post('/set/', {'key': 'TEST_SETTING1', 'value': 'some random string', 'type': 'int'}) self.assertEqual(response.status_code, 200) content_json = simplejson.loads(response.content) self.assertEqual(content_json['status'], 'error') self.assertTrue(dynamic_settings.is_in_db('TEST_SETTING1')) #check that the old value is still saved self.assertEqual(dynamic_settings.TEST_SETTING1, 42) dynamic_settings.reset('TEST_SETTING1') self.assertFalse(dynamic_settings.is_in_db('TEST_SETTING1')) self.assertEqual(dynamic_settings.TEST_SETTING1, 73) #check second setting response = self.client.post('/set/', {'key': 'TEST_SETTING2', 'value': 'my_custom_string', 'type': 'str'}) self.assertEqual(response.status_code, 200) content_json = simplejson.loads(response.content) self.assertEqual(content_json['status'], 'success') self.assertEqual(content_json['value'], 'my_custom_string') self.assertEqual(content_json['type'], 'str') self.assertTrue(dynamic_settings.is_in_db('TEST_SETTING2')) #change to the type response = self.client.post('/set/', {'key': 'TEST_SETTING2', 'value': '123', 'type': 'int'}) self.assertEqual(response.status_code, 200) content_json = simplejson.loads(response.content) self.assertEqual(content_json['status'], 'error') self.assertTrue(dynamic_settings.is_in_db('TEST_SETTING2')) #check that the old value is still saved self.assertEqual(dynamic_settings.TEST_SETTING2, 'my_custom_string') dynamic_settings.reset('TEST_SETTING2') self.assertFalse(dynamic_settings.is_in_db('TEST_SETTING2')) self.assertEqual(dynamic_settings.TEST_SETTING2, 'a string') #check third setting response = self.client.post('/set/', {'key': 'TEST_SETTING3', 'value': '[4,5]', 'type': 'list'}) self.assertEqual(response.status_code, 200) content_json = simplejson.loads(response.content) self.assertEqual(content_json['status'], 'success') self.assertEqual(content_json['value'].replace('\n','').replace(' ',''), '[4,5]') self.assertEqual(content_json['type'], 'list') self.assertTrue(dynamic_settings.is_in_db('TEST_SETTING3')) #change the value to sth which doesnt look like a list response = self.client.post('/set/', {'key': 'TEST_SETTING3', 'value': '{"d": 123}', 'type': 'list'}) self.assertEqual(response.status_code, 200) content_json = simplejson.loads(response.content) self.assertEqual(content_json['status'], 'error') self.assertTrue(dynamic_settings.is_in_db('TEST_SETTING3')) #check that the old value is still saved self.assertEqual(dynamic_settings.TEST_SETTING3, [4, 5]) dynamic_settings.reset('TEST_SETTING3') self.assertFalse(dynamic_settings.is_in_db('TEST_SETTING3')) self.assertEqual(dynamic_settings.TEST_SETTING3, [1, 2, 3]) #check fourth setting response = self.client.post('/set/', {'key': 'TEST_SETTING4', 'value': '{"d": 123, "abc": "string", "l": []}', 'type': 'dict'}) self.assertEqual(response.status_code, 200) content_json = simplejson.loads(response.content) self.assertEqual(content_json['status'], 'success') self.assertEqual(content_json['type'], 'dict') self.assertTrue(dynamic_settings.is_in_db('TEST_SETTING4')) #change the value and type to something completely different response = self.client.post('/set/', {'key': 'TEST_SETTING4', 'value': '123', 'type': 'long'}) self.assertEqual(response.status_code, 200) content_json = simplejson.loads(response.content) self.assertEqual(content_json['status'], 'error') self.assertTrue(dynamic_settings.is_in_db('TEST_SETTING4')) #check that the old value is still saved self.assertEqual(dynamic_settings.TEST_SETTING4, {"d": 123, "abc": "string", "l": []}) dynamic_settings.reset('TEST_SETTING4') self.assertFalse(dynamic_settings.is_in_db('TEST_SETTING4')) self.assertEqual(dynamic_settings.TEST_SETTING4, {'key': 'value', 'num': 3}) #check last setting (NoneType - can be changed to anything) response = self.client.post('/set/', {'key': 'TEST_SETTING5', 'value': u'你好', 'type': 'unicode'}) self.assertEqual(response.status_code, 200) content_json = simplejson.loads(response.content) self.assertEqual(content_json['status'], 'success') self.assertEqual(content_json['value'], u'你好') self.assertEqual(content_json['type'], 'unicode') self.assertTrue(dynamic_settings.is_in_db('TEST_SETTING5')) #check to another type (once a type is set it should not change anymore) response = self.client.post('/set/', {'key': 'TEST_SETTING5', 'value': '300', 'type': 'int'}) self.assertEqual(response.status_code, 200) content_json = simplejson.loads(response.content) self.assertEqual(content_json['status'], 'error') self.assertTrue(dynamic_settings.is_in_db('TEST_SETTING5')) #change the type to list and value to something which doesnt look like a list response = self.client.post('/set/', {'key': 'TEST_SETTING5', 'value': '404', 'type': 'list'}) self.assertEqual(response.status_code, 200) content_json = simplejson.loads(response.content) self.assertEqual(content_json['status'], 'error') self.assertTrue(dynamic_settings.is_in_db('TEST_SETTING5')) #check that the old value is still saved self.assertEqual(dynamic_settings.TEST_SETTING5, u'你好') dynamic_settings.reset('TEST_SETTING5') self.assertFalse(dynamic_settings.is_in_db('TEST_SETTING5')) self.assertEqual(dynamic_settings.TEST_SETTING5, None) self.assertEqual(type(dynamic_settings.TEST_SETTING5).__name__, 'NoneType') self.client.logout()