У меня есть проект Django Rest Framework.функциональность работает должным образом, когда я делаю это через Django View Framework.
Я написал тест для почтового запроса, который работает правильно.Когда я запускаю следующие тесты, я получаю ошибку, хотя она не должна давать ошибку и фактически проходить.Я новичок в написании тестов для django rest framework, поэтому я не совсем уверен, почему я получаю следующую ошибку:
Creating test database for alias 'default'...
C:\Users\jandali\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\fields\__init__.py:1421: RuntimeWarning: DateTimeField User.date_joined received a naive datetime (2019-05-30 14:17:09.953000) while time zone support is active.
RuntimeWarning)
....F........................................................
======================================================================
FAIL: test_UserCreatePreference (owf_framework.tests.api.v2.test_url_preferences.Preferencetest_AsUser)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\jandali\Desktop\ozone-backend\ozone-framework-python-server\owf_framework\tests\api\v2\test_url_preferences.py", line 154, in test_UserCreatePreference
self.assertEqual(response_post_extra.status_code, 403)
AssertionError: 201 != 403
----------------------------------------------------------------------
Ran 61 tests in 11.833s
FAILED (failures=1)
Destroying test database for alias 'default'...
System check identified no issues (0 silenced).
{'version': 1, 'namespace': 'namespace2', 'path': 'path1', 'value': 'random value 1', 'user_id': 1, 'person': 1}
{'version': 1, 'namespace': 'namespace2', 'path': 'path2', 'value': 'random value 2', 'user_id': 1, 'person': 1}
{'version': 1, 'namespace': 'namespace2', 'path': 'path2', 'value': 'random value 2', 'user_id': 1, 'person': 1, 'display_name': 'namespace-path'}
LINE 133 - следующая строка из теста:
self.assertEqual(response_post_1.status_code, 201)
Это тест, который я написал .:
class Preferencetest_AsUser(TestCase):
fixtures = ['default_users.json', 'default_objects.json']
test_post_1 = {
"version": 1,
"namespace":'namespace2',
"path":'path1',
"value":'random value 1',
"user_id":1,
"person":1
}
test_post_2 = {
"version": 1,
"namespace":'namespace2',
"path":'path2',
"value":'random value 2',
"user_id":1,
"person":1
}
test_post_extra = {
"version": 1,
"namespace":'namespace2',
"path":'path2',
"value":'random value 2',
"user_id":1,
"person":1,
"display_name":'namespace-path'
}
test_post_missing = {
"version": 1,
"namespace":'namespace2',
"path":'path2',
"value":'random value 2',
}
test_post_mismatch = {
"version": 1,
"namespace":'namespace2',
"path":'path2',
"value":1,
"user_id":'random value 2',
"person":1
}
test_put_1 = {
"version": 2,
"namespace":'namespace2',
"path":'path3',
"value":'random value 3',
"user_id":1,
"person":1
}
test_put_2 = {
"version": 2,
"namespace":'namespace2',
"path":'path4',
"value":'random value 4',
"user_id":1,
"person":1
}
test_put_extra = {
"version": 1,
"namespace":'namespace2',
"path":'path3',
"value":'random value 3',
"user_id":1,
"person":1,
"display_name":'namespace-path'
}
test_put_missing = {
"version": 1,
"namespace":'namespace2',
"path":'path3',
"value":'random value 3',
}
test_put_mismatch = {
"version": 1,
"namespace":'namespace2',
"path":'path3',
"value":1,
"user_id":'random value 3',
"person":1
}
def test_UserCreatePreference(self):
client.logout()
client.login(username='test', password='password')
response_post_1 = client.post('/api/v2/preferences/', self.test_post_1, format='json')
self.assertEqual(response_post_1.status_code, 201)
response_parsed_post_1 = response_post_1.json()
self.assertEqual(response_parsed_post_1['version'], self.test_post_1['version'])
self.assertEqual(response_parsed_post_1['namespace'], self.test_post_1['namespace'])
self.assertEqual(response_parsed_post_1['path'], self.test_post_1['path'])
self.assertEqual(response_parsed_post_1['value'], self.test_post_1['value'])
self.assertEqual(response_parsed_post_1['user_id'], self.test_post_1['user_id'])
self.assertEqual(response_parsed_post_1['person'], self.test_post_1['person'])
response_post_2 = client.post('/api/v2/preferences/', self.test_post_2, format='json')
self.assertEqual(response_post_2.status_code, 201)
response_parsed_post_2 = response_post_2.json()
self.assertEqual(response_parsed_post_2['version'], self.test_post_2['version'])
self.assertEqual(response_parsed_post_2['namespace'], self.test_post_2['namespace'])
self.assertEqual(response_parsed_post_2['path'], self.test_post_2['path'])
self.assertEqual(response_parsed_post_2['value'], self.test_post_2['value'])
self.assertEqual(response_parsed_post_2['user_id'], self.test_post_2['user_id'])
self.assertEqual(response_parsed_post_2['person'], self.test_post_2['person'])
response_post_extra = client.post('/api/v2/preferences/', self.test_post_extra, format='json')
self.assertEqual(response_post_extra.status_code, 403)
response_post_missing = client.post('/api/v2/preferences/', self.test_post_missing, format='json')
self.assertEqual(response_post_missing.status_code, 403)
response_post_mismatch = client.post('/api/v2/preferences/', self.test_post_mismatch, format='json')
self.assertEqual(response_post_mismatch.status_code, 403)
client.logout()
Вот мой набор параметров, который работает правильно:
@permission_classes((IsAuthenticated))
def create(self, request, *args, **kwargs):
namespace = self.kwargs.get('namespace', None)
path = self.kwargs.get('path', None)
print(request.data)
if namespace is None and path is None:
return super().create(request, *args, **kwargs)
if namespace and path is None:
data = {
"person":request.user.id,
'version':request.data.get('version'),
'namespace':namespace,
'path':request.data.get('path'),
'value':request.data.get('value'),
'user_id':request.user.id,
}
if namespace and path:
data = {
"person":request.user.id,
'version':request.data.get('version'),
'namespace':namespace,
'path':path,
'value':request.data.get('value'),
'user_id':request.user.id,
}
serializer = self.get_serializer(data=data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
метод post работает точно так, как я ожидал, ия знаю, что это работает, но не уверен, почему мой тест не пройден.