[test] add default DEBUG flag for pytest, add tests for jwt_middleware

This commit is contained in:
Maxime Alves LIRMM 2020-07-09 10:27:45 +02:00
parent 55ebe0bbdd
commit 13ac878a7c
3 changed files with 46 additions and 16 deletions

View File

@ -44,10 +44,11 @@ class JWTUser(BaseUser):
self.payload = payload
def __str__(self):
if len(self.__id) > 0:
return self.__id
else:
return 'no id'
return str({
'id' : str(self.__id),
'token': self.token,
'payload': self.payload
})
@property
def is_authenticated(self) -> bool:
return True

View File

@ -2,3 +2,5 @@
testpaths = tests halfapi
addopts = --doctest-modules
doctest_optionflags = ELLIPSIS
env =
DEBUG=TRUE

View File

@ -2,28 +2,55 @@ import jwt
import requests
import pytest
import json
from json.decoder import JSONDecodeError
import sys
from hashlib import sha256
from halfapi.app import app
from base64 import b64decode
from starlette.testclient import TestClient
from halfapi.app import app
from halfapi.lib.jwt_middleware import (JWTUser, JWTAuthenticationBackend,
JWTWebSocketAuthenticationBackend)
def coucou():
return
def test_connected():
app.route('/', coucou)
def test_token():
# This test needs to have a running auth-lirmm on 127.0.0.1:3000
@pytest.fixture
def token():
# This fixture needs to have a running auth-lirmm on 127.0.0.1:3000
# Sets a valid token
r = requests.post('http://127.0.0.1:3000/',
data={'email':'maizi', 'password':'a'})
assert len(r.text) > 0
res = json.loads(r.text)
assert 'token' in res.keys()
sys.stderr.write(f'Token : {res["token"]}\n')
secret = open('/etc/half_orm/secret').readline()
sys.stderr.write(f'Secret : {secret}\n')
assert jwt.decode(
res['token'],
secret, algorithms=['HS256'])
if len(r.text) <= 0:
raise Exception('No result in token retrieval')
try:
res = json.loads(r.text)
except JSONDecodeError:
raise Exception('Malformed response from token retrieval')
if 'token' not in res.keys():
raise Exception('Missing token in token request')
return res['token']
def test_token(token):
client = TestClient(app)
r = client.get('/user', headers={'Authorization':token})
res = False
try:
res = json.loads(r.text)
except JSONDecodeError:
raise Exception('Malformed response from /user request')
assert 'user' in res.keys()
print(res['user'])
assert 'id' in res['user'].keys()
assert 'token' in res['user'].keys()
assert 'payload' in res['user'].keys()