Выход из системы с токеном в фляге API хорошо работает в почтальоне, но не работает с unittest - PullRequest
0 голосов
/ 27 апреля 2019

Мой выход из системы хорошо работает с почтальоном, но unittest с python завершается неудачно с 401 и выглядит так, как токен, полученный при ответе на вход в систему, недействителен, моя регистрация и вход в систему хорошо проверяются, и ответ при входе в систему содержит токен, но мне не удалось его получитьв моем юнит-тесте

FAIL: test_user_logout (app.test_final.test_auth.TestAuth)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/kawalya/ask-questionsdb/app/test_final/test_auth.py", line 32, in test_user_logout
    self.assertEqual(logout.status_code, 200)
AssertionError: 401 != 200
# base_test.py

def get_headers(self, authtoken=None):
        headers = {
            "Authorization": 'Bearer {}'.format(authtoken),
            "content_type": 'application/json'
        }
        return headers

    def post(self, path, data, auth):
        paths = self.endpoint_path(path=path)
        dto = json.dumps(data)
        if auth is None:
            headers = None
        else:
            headers = self.get_headers(authtoken=auth)
        res = self.client.post(path=paths, data=dto, headers=headers, content_type='application/json')
        return res

  def post(self, path, data, auth):
        paths = self.endpoint_path(path=path)
        dto = json.dumps(data)
        if auth is None:
            headers = None
        else:
            headers = self.get_headers(authtoken=auth)
        res = self.client.post(path=paths, data=dto, headers=headers, content_type='application/json')
        return res

   def post_user(self, path=""):
        if not path:
            path = '/auth/signup'
        res = self.post(path=path, data=self.user, auth=None)
        return res

  def normal_login(self):
        self.post_user(path='/auth/signup')
        login = self.post(path='/auth/login', data=self.log, auth=None)
        return login
# test_auth.py

def test_user_logout(self):
        with self.client:
            token = self.normal_login()
            headers = dict(Authorization='Bearer {}'.format(token))
            path = '/api/v2/auth/logout'
            logout = self.client.post(path=path,
                                      headers=headers,
                                      content_type="application/json")
            self.assertEqual(logout.status_code, 200)
# logout.py

 def post(self):
        auth = request.headers.get('Authorization')
        if not auth:
            return make_response(jsonify({
                "message": "No authorization header provided. This resource is secured"
            }), 403)
        auth_t_oken = auth.split(" ")[1]
        response = UserModel().decode_token(auth_t_oken)
        if isinstance(response, int):
            UserModel().logout(auth_t_oken)
            return make_response(jsonify({
                "message": "Loged out successfully"
            }), 200)
        else:
            return make_response(jsonify({
                "message": response
            }), 401)
def decode_token(self, auth_token):
        """This function takes in an authtoken and decodes it, returning an integer or string"""
        if self.blacklisted(auth_token):
            return "Token has been blacklisted"
        secret = os.getenv("SECRET")
        try:
            payload = jwt.decode(auth_token, secret)
                return payload['user']  # user_id
        except jwt.ExpiredSignatureError:
            return "The token has expired"
        except jwt.InvalidTokenError:
            return "The token is invalid"

Я ожидал, что код статуса выхода из системы будет 200, но это был 401.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...