JsonResponse читается как строка во время тестирования django_nose - PullRequest
0 голосов
/ 13 января 2019

здесь болит голова. У меня есть этот простой API, который я хочу проверить, но пока не могу. Это работает частично. Ошибка происходит, если пользователь заблокирован или удален, что говорит:

 'str' object has no attribute status_code.

enter image description here

Но я думаю, что я действительно отвечаю 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'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...