From a0c41d7d7842a9bb46f03452347c35616d446399 Mon Sep 17 00:00:00 2001 From: Maxime Alves LIRMM Date: Fri, 28 May 2021 22:12:53 +0200 Subject: [PATCH] =?UTF-8?q?[tests]=C2=A0jwt,=20use=20of=20TestClient=20ins?= =?UTF-8?q?tead=20of=20requests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/conftest.py | 1 + tests/test_jwt_middleware.py | 117 +++++++++++++---------------- tests/test_jwt_middleware_debug.py | 54 ------------- 3 files changed, 52 insertions(+), 120 deletions(-) delete mode 100644 tests/test_jwt_middleware_debug.py diff --git a/tests/conftest.py b/tests/conftest.py index 06f7d6f..4b8b8d2 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -9,6 +9,7 @@ import tempfile from typing import Dict, Tuple from uuid import uuid1, uuid4, UUID import click +from click.testing import CliRunner import jwt from unittest.mock import patch import pytest diff --git a/tests/test_jwt_middleware.py b/tests/test_jwt_middleware.py index 54996b1..2a93895 100644 --- a/tests/test_jwt_middleware.py +++ b/tests/test_jwt_middleware.py @@ -31,92 +31,77 @@ def test_JWTUser(): assert user.payload == payload assert user.is_authenticated == True -@pytest.mark.asyncio -async def test_JWTAuthenticationBackend_NoToken(token_builder): - backend = JWTAuthenticationBackend() - assert backend.secret_key == SECRET +def test_jwt_NoToken(dummy_app): + async def test_route(request): + assert isinstance(request.user, UnauthenticatedUser) + return PlainTextResponse('ok') - req = Request() + dummy_app.add_route('/test', test_route) + test_client = TestClient(dummy_app) + resp = test_client.get('/test') + assert resp.status_code == 200 - credentials, user = await backend.authenticate(req) - assert isinstance(user, UnauthenticatedUser) - assert isinstance(credentials, AuthCredentials) +def test_jwt_Token(dummy_app, token_builder): + async def test_route(request): + assert isinstance(request.user, JWTUser) + print(request.scope['app'].debug) + return PlainTextResponse('ok') + dummy_app.add_route('/test', test_route) + test_client = TestClient(dummy_app) -@pytest.mark.asyncio -async def test_JWTAuthenticationBackend_Token(token_builder): - backend = JWTAuthenticationBackend() - assert backend.secret_key == SECRET - - req = Request( + resp = test_client.get('/test', headers={ 'Authorization': token_builder }) - - credentials, user = await backend.authenticate(req) - assert isinstance(user, JWTUser) - assert isinstance(credentials, AuthCredentials) + assert resp.status_code == 200 -@pytest.mark.asyncio -async def test_JWTAuthenticationBackend_DebugFalse(token_debug_false_builder): - backend = JWTAuthenticationBackend() - assert backend.secret_key == SECRET +def test_jwt_DebugFalse(dummy_app, token_debug_false_builder): + async def test_route(request): + assert isinstance(request.user, JWTUser) + return PlainTextResponse('ok') - req = Request( + dummy_app.add_route('/test', test_route) + test_client = TestClient(dummy_app) + + resp = test_client.get('/test', headers={ 'Authorization': token_debug_false_builder }) - - credentials, user = await backend.authenticate(req) - assert isinstance(user, JWTUser) - assert isinstance(credentials, AuthCredentials) + assert resp.status_code == 200 -@pytest.mark.asyncio -async def test_JWTAuthenticationBackend_DebugTrue(token_debug_true_builder): - backend = JWTAuthenticationBackend() - assert backend.secret_key == SECRET +def test_jwt_DebugTrue(dummy_app, token_debug_true_builder): + """ + A debug token should return a 400 status code with a non debug app + """ + async def test_route(request): + return PlainTextResponse('ok') - req = Request( + dummy_app.add_route('/test', test_route) + test_client = TestClient(dummy_app) + + resp = test_client.get('/test', headers={ 'Authorization': token_debug_true_builder }) + assert resp.status_code == 400 - try: - await backend.authenticate(req) - except Exception as exc: - assert type(exc) == AuthenticationError -@pytest.mark.asyncio -async def test_JWTAuthenticationBackend_Check(token_debug_false_builder): - backend = JWTAuthenticationBackend() - assert backend.secret_key == SECRET +def test_jwt_DebugTrue_DebugApp(dummy_debug_app, token_debug_true_builder): + """ + A debug token should return a 200 status code with a debug app + """ + async def test_route(request): + assert isinstance(request.user, JWTUser) + return PlainTextResponse('ok') - req = Request( - params={ - 'check':True, + dummy_debug_app.add_route('/test', test_route) + test_client = TestClient(dummy_debug_app) + + resp = test_client.get('/test', + headers={ + 'Authorization': token_debug_true_builder }) - - credentials, user = await backend.authenticate(req) - assert isinstance(user, UnauthenticatedUser) - assert isinstance(credentials, AuthCredentials) - - -@pytest.mark.asyncio -async def test_JWTAuthenticationBackend_CheckUserId(token_debug_false_builder): - backend = JWTAuthenticationBackend() - assert backend.secret_key == SECRET - - tmp_user_id = str(uuid4()) - - req = Request( - params={ - 'check': True, - 'user_id': tmp_user_id - }) - - credentials, user = await backend.authenticate(req) - assert isinstance(user, JWTUser) - assert user.__id == tmp_user_id - assert isinstance(credentials, AuthCredentials) + assert resp.status_code == 200 diff --git a/tests/test_jwt_middleware_debug.py b/tests/test_jwt_middleware_debug.py deleted file mode 100644 index 7615d78..0000000 --- a/tests/test_jwt_middleware_debug.py +++ /dev/null @@ -1,54 +0,0 @@ -import os -import jwt -from requests import Request -import pytest -from unittest.mock import patch -import json -from json.decoder import JSONDecodeError -import sys -from hashlib import sha256 -from base64 import b64decode -from uuid import uuid4, UUID - -from starlette.testclient import TestClient -from starlette.authentication import ( - AuthenticationBackend, AuthenticationError, BaseUser, AuthCredentials, - UnauthenticatedUser) - - -#from halfapi.app import app -os.environ['HALFAPI_PROD'] = '' -os.environ['HALFAPI_SECRET'] = 'randomsecret' - -from halfapi.lib.jwt_middleware import (PRODUCTION, SECRET, - JWTUser, JWTAuthenticationBackend, - JWTWebSocketAuthenticationBackend) - -def test_constants(): - assert PRODUCTION == bool(os.environ['HALFAPI_PROD']) - #assert SECRET == os.environ['HALFAPI_SECRET'] - - -@pytest.fixture -def token_debug_builder(): - yield jwt.encode({ - 'name':'xxx', - 'user_id': str(uuid4()), - 'debug': True}, - key=SECRET - ) - - -@pytest.mark.asyncio -async def test_JWTAuthenticationBackend_debug(token_debug_builder): - backend = JWTAuthenticationBackend() - - req = Request( - headers={ - 'Authorization': token_debug_builder - }) - - auth = await backend.authenticate(req) - assert(len(auth) == 2) - assert type(auth[0]) == AuthCredentials - assert type(auth[1]) == JWTUser