здесь болит голова. У меня есть этот простой API, который я хочу проверить, но пока не могу. Это работает частично. Ошибка происходит, если пользователь заблокирован или удален, что говорит:
'str' object has no attribute status_code.
Но я думаю, что я действительно отвечаю JsonResponse во всех случаях. Хуже того, он работает правильно для правильного пользователя и когда электронная почта не существует. А при проверке от почтальона он правильно отвечает со статусом 400 и корректным сообщением. Я что-то пропускаю в своих тестах?
class ForgotPwd(APIView):
permission_classes = []
def post(self,request, format = None):
email = request.data.get('email' , '').strip()
reply = {}
status = 400
filters = {}
if email:
filters['email'] = email
try:
user_info = User.objects.values('id', 'status', 'email').get(**filters)
if user_info['status'] == 0:
reply['detail'] = _('userBlocked')
elif user_info['status'] == 2:
reply['detail'] = _('userMissing')
else:
# send email
reply['detail'] = _('pwdResetLinkSent')
status = 200
except BaseException as e:
reply['detail'] = _('errorNoAccount')
else:
reply['detail'] = _('errorNoAccount')
return JsonResponse(reply,status=status)
Мой тест:
class ForgotPwdTest(APITestCase):
""" Test module for initiating forgot password """
def setUp(self):
self.valid_payload = {
'email': 'valid@gmail.com'
}
self.invalid_email_payload = {
'email': 'invalid@yahoo.com'
}
self.blocked_user_payload = {
'email': 'blocked@gmail.com'
}
self.deleted_user_payload = {
'email': 'deleted@gmail.com'
}
user_valid = {'first_name': 'John', 'email': 'valid@gmail.com','password' : 'password', 'status': 1}
self.user_valid = User.objects.create_user(**user_valid)
# create users for other test cases
user_blocked = {'first_name': 'John', 'email': 'blocked@gmail.com','password' : 'password', 'status' : 0}
self.user_valid = User.objects.create_user(**user_blocked)
user_deleted = {'first_name': 'John', 'email': 'deleted@gmail.com','password' : 'password', 'status' : 2}
self.user_valid = User.objects.create_user(**user_deleted)
self.url = reverse('forgotpwd')
def test_valid_forgotpwd(self):
"""
Ensure a valid user can start a forgot password process: WORKS
"""
response = self.client.post(self.url , self.valid_payload, format='json')
self.assertEqual(response.status_code, 200)
'''
def test_missing_email(self):
""" The email is not registered in the system : WORKS """
response = self.client.post(
self.url,
self.invalid_email_payload
)
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json()['detail'], _('errorNoAccount'))
'''
def test_blocked_user(self):
""" Blocked user cannot initiate forgot password token """
response = self.client.post(
self.url ,
self.blocked_user_payload
)
self.assertEqual(response.status_code, 400) # fails response is string
self.assertContains(response.json()['detail'], _('userBlocked'))
def test_deleted_user(self):
""" Deleted user cannot initiate forgot password token """
response = self.client.post(
self.url ,
self.deleted_user_payload,
content_type='application/json'
)
self.assertEqual(response.status_code, 400) # fails response is string
self.assertEqual(response['detail'], _('userMissing'))