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()
示例#2
0
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()