Мой выход из системы хорошо работает с почтальоном, но 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.