Skip to content

Commit

Permalink
Fix tests, restructure tests
Browse files Browse the repository at this point in the history
  • Loading branch information
lepture committed Apr 6, 2022
1 parent 45ceb49 commit f735578
Show file tree
Hide file tree
Showing 44 changed files with 191 additions and 113 deletions.
3 changes: 1 addition & 2 deletions .github/workflows/python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,10 @@ jobs:
run: |
python -m pip install --upgrade pip
pip install tox
pip install -r requirements-test.txt
- name: Test with tox ${{ matrix.python.toxenv }}
env:
TOXENV: py,flask,django,starlette
TOXENV: py,jose,clients,flask,django
run: tox

- name: Report coverage
Expand Down
5 changes: 0 additions & 5 deletions requirements-test.txt

This file was deleted.

File renamed without changes.
34 changes: 0 additions & 34 deletions tests/starlette/utils.py → tests/clients/asgi_helper.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import json
from starlette.requests import Request as ASGIRequest
from starlette.responses import Response as ASGIResponse
from werkzeug.wrappers import Request as WSGIRequest
from werkzeug.wrappers import Response as WSGIResponse


class AsyncMockDispatch:
Expand Down Expand Up @@ -62,35 +60,3 @@ async def __call__(self, scope, receive, send):
headers=headers,
)
await response(scope, receive, send)


class MockDispatch:
def __init__(self, body=b'', status_code=200, headers=None,
assert_func=None):
if headers is None:
headers = {}
if isinstance(body, dict):
body = json.dumps(body).encode()
headers['Content-Type'] = 'application/json'
else:
if isinstance(body, str):
body = body.encode()
headers['Content-Type'] = 'application/x-www-form-urlencoded'

self.body = body
self.status_code = status_code
self.headers = headers
self.assert_func = assert_func

def __call__(self, environ, start_response):
request = WSGIRequest(environ)

if self.assert_func:
self.assert_func(request)

response = WSGIResponse(
status=self.status_code,
response=self.body,
headers=self.headers,
)
return response(environ, start_response)
6 changes: 6 additions & 0 deletions tests/clients/keys/jwks_private.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"keys": [
{"kty": "RSA", "kid": "abc", "n": "pF1JaMSN8TEsh4N4O_5SpEAVLivJyLH-Cgl3OQBPGgJkt8cg49oasl-5iJS-VdrILxWM9_JCJyURpUuslX4Eb4eUBtQ0x5BaPa8-S2NLdGTaL7nBOO8o8n0C5FEUU-qlEip79KE8aqOj-OC44VsIquSmOvWIQD26n3fCVlgwoRBD1gzzsDOeaSyzpKrZR851Kh6rEmF2qjJ8jt6EkxMsRNACmBomzgA4M1TTsisSUO87444pe35Z4_n5c735o2fZMrGgMwiJNh7rT8SYxtIkxngioiGnwkxGQxQ4NzPAHg-XSY0J04pNm7KqTkgtxyrqOANJLIjXlR-U9SQ90NjHVQ", "e": "AQAB", "d": "G4E84ppZwm3fLMI0YZ26iJ_sq3BKcRpQD6_r0o8ZrZmO7y4Uc-ywoP7h1lhFzaox66cokuloZpKOdGHIfK-84EkI3WeveWHPqBjmTMlN_ClQVcI48mUbLhD7Zeenhi9y9ipD2fkNWi8OJny8k4GfXrGqm50w8schrsPksnxJjvocGMT6KZNfDURKF2HlM5X1uY8VCofokXOjBEeHIfYM8e7IcmPpyXwXKonDmVVbMbefo-u-TttgeyOYaO6s3flSy6Y0CnpWi43JQ_VEARxQl6Brj1oizr8UnQQ0nNCOWwDNVtOV4eSl7PZoiiT7CxYkYnhJXECMAM5YBpm4Qk9zdQ", "p": "1g4ZGrXOuo75p9_MRIepXGpBWxip4V7B9XmO9WzPCv8nMorJntWBmsYV1I01aITxadHatO4Gl2xLniNkDyrEQzJ7w38RQgsVK-CqbnC0K9N77QPbHeC1YQd9RCNyUohOimKvb7jyv798FBU1GO5QI2eNgfnnfteSVXhD2iOoTOs", "q": "xJJ-8toxJdnLa0uUsAbql6zeNXGbUBMzu3FomKlyuWuq841jS2kIalaO_TRj5hbnE45jmCjeLgTVO6Ach3Wfk4zrqajqfFJ0zUg_Wexp49lC3RWiV4icBb85Q6bzeJD9Dn9vhjpfWVkczf_NeA1fGH_pcgfkT6Dm706GFFttLL8", "dp": "Zfx3l5NR-O8QIhzuHSSp279Afl_E6P0V2phdNa_vAaVKDrmzkHrXcl-4nPnenXrh7vIuiw_xkgnmCWWBUfylYALYlu-e0GGpZ6t2aIJIRa1QmT_CEX0zzhQcae-dk5cgHK0iO0_aUOOyAXuNPeClzAiVknz4ACZDsXdIlNFyaZs", "dq": "Z9DG4xOBKXBhEoWUPXMpqnlN0gPx9tRtWe2HRDkZsfu_CWn-qvEJ1L9qPSfSKs6ls5pb1xyeWseKpjblWlUwtgiS3cOsM4SI03H4o1FMi11PBtxKJNitLgvT_nrJ0z8fpux-xfFGMjXyFImoxmKpepLzg5nPZo6f6HscLNwsSJk", "qi": "Sk20wFvilpRKHq79xxFWiDUPHi0x0pp82dYIEntGQkKUWkbSlhgf3MAi5NEQTDmXdnB-rVeWIvEi-BXfdnNgdn8eC4zSdtF4sIAhYr5VWZo0WVWDhT7u2ccvZBFymiz8lo3gN57wGUCi9pbZqzV1-ZppX6YTNDdDCE0q-KO3Cec"},
{"kty": "RSA", "kid": "[email protected]", "use": "sig", "n": "n4EPtAOCc9AlkeQHPzHStgAbgs7bTZLwUBZdR8_KuKPEHLd4rHVTeT-O-XV2jRojdNhxJWTDvNd7nqQ0VEiZQHz_AJmSCpMaJMRBSFKrKb2wqVwGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj-oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuCLqKnS2BYwdq_mzSnbLY7h_qixoR7jig3__kRhuaxwUkRz5iaiQkqgc5gHdrNP5zw", "e": "AQAB", "d": "bWUC9B-EFRIo8kpGfh0ZuyGPvMNKvYWNtB_ikiH9k20eT-O1q_I78eiZkpXxXQ0UTEs2LsNRS-8uJbvQ-A1irkwMSMkK1J3XTGgdrhCku9gRldY7sNA_AKZGh-Q661_42rINLRCe8W-nZ34ui_qOfkLnK9QWDDqpaIsA-bMwWWSDFu2MUBYwkHTMEzLYGqOe04noqeq1hExBTHBOBdkMXiuFhUq1BU6l-DqEiWxqg82sXt2h-LMnT3046AOYJoRioz75tSUQfGCshWTBnP5uDjd18kKhyv07lhfSJdrPdM5Plyl21hsFf4L_mHCuoFau7gdsPfHPxxjVOcOpBrQzwQ", "p": "3Slxg_DwTXJcb6095RoXygQCAZ5RnAvZlno1yhHtnUex_fp7AZ_9nRaO7HX_-SFfGQeutao2TDjDAWU4Vupk8rw9JR0AzZ0N2fvuIAmr_WCsmGpeNqQnev1T7IyEsnh8UMt-n5CafhkikzhEsrmndH6LxOrvRJlsPp6Zv8bUq0k", "q": "uKE2dh-cTf6ERF4k4e_jy78GfPYUIaUyoSSJuBzp3Cubk3OCqs6grT8bR_cu0Dm1MZwWmtdqDyI95HrUeq3MP15vMMON8lHTeZu2lmKvwqW7anV5UzhM1iZ7z4yMkuUwFWoBvyY898EXvRD-hdqRxHlSqAZ192zB3pVFJ0s7pFc", "dp": "B8PVvXkvJrj2L-GYQ7v3y9r6Kw5g9SahXBwsWUzp19TVlgI-YV85q1NIb1rxQtD-IsXXR3-TanevuRPRt5OBOdiMGQp8pbt26gljYfKU_E9xn-RULHz0-ed9E9gXLKD4VGngpz-PfQ_q29pk5xWHoJp009Qf1HvChixRX59ehik", "dq": "CLDmDGduhylc9o7r84rEUVn7pzQ6PF83Y-iBZx5NT-TpnOZKF1pErAMVeKzFEl41DlHHqqBLSM0W1sOFbwTxYWZDm6sI6og5iTbwQGIC3gnJKbi_7k_vJgGHwHxgPaX2PnvP-zyEkDERuf-ry4c_Z11Cq9AqC2yeL6kdKT1cYF8", "qi": "3PiqvXQN0zwMeE-sBvZgi289XP9XCQF3VWqPzMKnIgQp7_Tugo6-NZBKCQsMf3HaEGBjTVJs_jcK8-TRXvaKe-7ZMaQj8VfBdYkssbu0NKDDhjJ-GtiseaDVWt7dcH0cfwxgFUHpQh7FoCrjFJ6h6ZEpMF6xmujs4qMpPz8aaI4"}
]
}
6 changes: 6 additions & 0 deletions tests/clients/keys/jwks_public.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"keys": [
{"kty": "RSA", "kid": "abc", "n": "pF1JaMSN8TEsh4N4O_5SpEAVLivJyLH-Cgl3OQBPGgJkt8cg49oasl-5iJS-VdrILxWM9_JCJyURpUuslX4Eb4eUBtQ0x5BaPa8-S2NLdGTaL7nBOO8o8n0C5FEUU-qlEip79KE8aqOj-OC44VsIquSmOvWIQD26n3fCVlgwoRBD1gzzsDOeaSyzpKrZR851Kh6rEmF2qjJ8jt6EkxMsRNACmBomzgA4M1TTsisSUO87444pe35Z4_n5c735o2fZMrGgMwiJNh7rT8SYxtIkxngioiGnwkxGQxQ4NzPAHg-XSY0J04pNm7KqTkgtxyrqOANJLIjXlR-U9SQ90NjHVQ", "e": "AQAB"},
{"kty": "RSA", "kid": "[email protected]", "use": "sig", "n": "n4EPtAOCc9AlkeQHPzHStgAbgs7bTZLwUBZdR8_KuKPEHLd4rHVTeT-O-XV2jRojdNhxJWTDvNd7nqQ0VEiZQHz_AJmSCpMaJMRBSFKrKb2wqVwGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj-oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuCLqKnS2BYwdq_mzSnbLY7h_qixoR7jig3__kRhuaxwUkRz5iaiQkqgc5gHdrNP5zw", "e": "AQAB"}
]
}
27 changes: 27 additions & 0 deletions tests/clients/keys/rsa_private.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEApF1JaMSN8TEsh4N4O/5SpEAVLivJyLH+Cgl3OQBPGgJkt8cg
49oasl+5iJS+VdrILxWM9/JCJyURpUuslX4Eb4eUBtQ0x5BaPa8+S2NLdGTaL7nB
OO8o8n0C5FEUU+qlEip79KE8aqOj+OC44VsIquSmOvWIQD26n3fCVlgwoRBD1gzz
sDOeaSyzpKrZR851Kh6rEmF2qjJ8jt6EkxMsRNACmBomzgA4M1TTsisSUO87444p
e35Z4/n5c735o2fZMrGgMwiJNh7rT8SYxtIkxngioiGnwkxGQxQ4NzPAHg+XSY0J
04pNm7KqTkgtxyrqOANJLIjXlR+U9SQ90NjHVQIDAQABAoIBABuBPOKaWcJt3yzC
NGGduoif7KtwSnEaUA+v69KPGa2Zju8uFHPssKD+4dZYRc2qMeunKJLpaGaSjnRh
yHyvvOBJCN1nr3lhz6gY5kzJTfwpUFXCOPJlGy4Q+2Xnp4YvcvYqQ9n5DVovDiZ8
vJOBn16xqpudMPLHIa7D5LJ8SY76HBjE+imTXw1EShdh5TOV9bmPFQqH6JFzowRH
hyH2DPHuyHJj6cl8FyqJw5lVWzG3n6Prvk7bYHsjmGjurN35UsumNAp6VouNyUP1
RAEcUJega49aIs6/FJ0ENJzQjlsAzVbTleHkpez2aIok+wsWJGJ4SVxAjADOWAaZ
uEJPc3UCgYEA1g4ZGrXOuo75p9/MRIepXGpBWxip4V7B9XmO9WzPCv8nMorJntWB
msYV1I01aITxadHatO4Gl2xLniNkDyrEQzJ7w38RQgsVK+CqbnC0K9N77QPbHeC1
YQd9RCNyUohOimKvb7jyv798FBU1GO5QI2eNgfnnfteSVXhD2iOoTOsCgYEAxJJ+
8toxJdnLa0uUsAbql6zeNXGbUBMzu3FomKlyuWuq841jS2kIalaO/TRj5hbnE45j
mCjeLgTVO6Ach3Wfk4zrqajqfFJ0zUg/Wexp49lC3RWiV4icBb85Q6bzeJD9Dn9v
hjpfWVkczf/NeA1fGH/pcgfkT6Dm706GFFttLL8CgYBl/HeXk1H47xAiHO4dJKnb
v0B+X8To/RXamF01r+8BpUoOubOQetdyX7ic+d6deuHu8i6LD/GSCeYJZYFR/KVg
AtiW757QYalnq3ZogkhFrVCZP8IRfTPOFBxp752TlyAcrSI7T9pQ47IBe4094KXM
CJWSfPgAJkOxd0iU0XJpmwKBgGfQxuMTgSlwYRKFlD1zKap5TdID8fbUbVnth0Q5
GbH7vwlp/qrxCdS/aj0n0irOpbOaW9ccnlrHiqY25VpVMLYIkt3DrDOEiNNx+KNR
TItdTwbcSiTYrS4L0/56ydM/H6bsfsXxRjI18hSJqMZiqXqS84OZz2aOn+h7HCzc
LEiZAoGASk20wFvilpRKHq79xxFWiDUPHi0x0pp82dYIEntGQkKUWkbSlhgf3MAi
5NEQTDmXdnB+rVeWIvEi+BXfdnNgdn8eC4zSdtF4sIAhYr5VWZo0WVWDhT7u2ccv
ZBFymiz8lo3gN57wGUCi9pbZqzV1+ZppX6YTNDdDCE0q+KO3Cec=
-----END RSA PRIVATE KEY-----
File renamed without changes.
36 changes: 36 additions & 0 deletions tests/clients/test_django/settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
SECRET_KEY = 'django-secret'

DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": "example.sqlite",
}
}

MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware'
]

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake',
}
}

INSTALLED_APPS=[]

AUTHLIB_OAUTH_CLIENTS = {
'dev_overwrite': {
'client_id': 'dev-client-id',
'client_secret': 'dev-client-secret',
'access_token_params': {
'foo': 'foo-1',
'bar': 'bar-2'
}
}
}

USE_TZ = True
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from unittest import mock
from django.test import override_settings
from authlib.jose import jwk
from authlib.oidc.core.grants.util import generate_id_token
from authlib.integrations.django_client import OAuth, OAuthError
from authlib.common.urls import urlparse, url_decode
from tests.django.base import TestCase
from tests.client_base import (
from django.test import override_settings
from tests.django_helper import TestCase
from ..util import (
mock_send_value,
get_bearer_token
)
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
from authlib.integrations.flask_client import OAuth, OAuthError
from authlib.integrations.flask_client import FlaskOAuth2App
from authlib.common.urls import urlparse, url_decode
from tests.flask.cache import SimpleCache
from tests.client_base import (
from cachelib import SimpleCache
from ..util import (
mock_send_value,
get_bearer_token
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
from authlib.jose.errors import InvalidClaimError
from authlib.integrations.flask_client import OAuth
from authlib.oidc.core.grants.util import generate_id_token
from tests.util import read_file_path
from tests.client_base import get_bearer_token
from ..util import get_bearer_token, read_key_file


class FlaskUserMixinTest(TestCase):
Expand Down Expand Up @@ -122,7 +121,7 @@ def test_runtime_error_fetch_jwks_uri(self):
self.assertRaises(RuntimeError, client.parse_id_token, token, 'n')

def test_force_fetch_jwks_uri(self):
secret_keys = read_file_path('jwks_private.json')
secret_keys = read_key_file('jwks_private.json')
token = get_bearer_token()
id_token = generate_id_token(
token, {'sub': '123'}, secret_keys,
Expand All @@ -145,7 +144,7 @@ def test_force_fetch_jwks_uri(self):

def fake_send(sess, req, **kwargs):
resp = mock.MagicMock()
resp.json = lambda: read_file_path('jwks_public.json')
resp.json = lambda: read_key_file('jwks_public.json')
resp.status_code = 200
return resp

Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import time
import pytest
from authlib.integrations.httpx_client import AssertionClient
from ..utils import MockDispatch
from ..wsgi_helper import MockDispatch


default_token = {
Expand All @@ -13,7 +13,6 @@
}


@pytest.mark.asyncio
def test_refresh_token():
def verifier(request):
content = request.form
Expand Down Expand Up @@ -50,7 +49,6 @@ def verifier(request):
client.get('https://i.b')


@pytest.mark.asyncio
def test_without_alg():
with AssertionClient(
'https://i.b/token',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import time
import pytest
from authlib.integrations.httpx_client import AsyncAssertionClient
from ..utils import AsyncMockDispatch
from ..asgi_helper import AsyncMockDispatch


default_token = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
SIGNATURE_TYPE_BODY,
SIGNATURE_TYPE_QUERY,
)
from ..utils import AsyncMockDispatch
from ..asgi_helper import AsyncMockDispatch

oauth_url = 'https://example.com/oauth'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
OAuthError,
AsyncOAuth2Client,
)
from ..utils import AsyncMockDispatch
from ..asgi_helper import AsyncMockDispatch


default_token = {
Expand All @@ -21,17 +21,20 @@
}


@pytest.mark.asyncio
async def assert_token_in_header(request):
token = 'Bearer ' + default_token['access_token']
auth_header = request.headers.get('authorization')
assert auth_header == token


@pytest.mark.asyncio
async def assert_token_in_body(request):
content = await request.body()
assert default_token['access_token'] in content.decode()


@pytest.mark.asyncio
async def assert_token_in_uri(request):
assert default_token['access_token'] in str(request.url)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,11 @@
SIGNATURE_TYPE_BODY,
SIGNATURE_TYPE_QUERY,
)
from ..utils import MockDispatch
from ..wsgi_helper import MockDispatch

oauth_url = 'https://example.com/oauth'


@pytest.mark.asyncio
def test_fetch_request_token_via_header():
request_token = {'oauth_token': '1', 'oauth_token_secret': '2'}

Expand All @@ -26,7 +25,6 @@ def assert_func(request):
assert response == request_token


@pytest.mark.asyncio
def test_fetch_request_token_via_body():
request_token = {'oauth_token': '1', 'oauth_token_secret': '2'}

Expand All @@ -49,7 +47,6 @@ def assert_func(request):
assert response == request_token


@pytest.mark.asyncio
def test_fetch_request_token_via_query():
request_token = {'oauth_token': '1', 'oauth_token_secret': '2'}

Expand All @@ -72,7 +69,6 @@ def assert_func(request):
assert response == request_token


@pytest.mark.asyncio
def test_fetch_access_token():
request_token = {'oauth_token': '1', 'oauth_token_secret': '2'}

Expand All @@ -96,7 +92,6 @@ def assert_func(request):
assert response == request_token


@pytest.mark.asyncio
def test_get_via_header():
mock_response = MockDispatch(b'hello')
with OAuth1Client(
Expand All @@ -113,7 +108,6 @@ def test_get_via_header():
assert 'oauth_signature=' in auth_header


@pytest.mark.asyncio
def test_get_via_body():
def assert_func(request):
content = request.form
Expand All @@ -136,7 +130,6 @@ def assert_func(request):
assert auth_header is None


@pytest.mark.asyncio
def test_get_via_query():
mock_response = MockDispatch(b'hello')
with OAuth1Client(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
OAuthError,
OAuth2Client,
)
from ..utils import MockDispatch
from ..wsgi_helper import MockDispatch


default_token = {
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@
from authlib.oauth1.rfc5849.util import escape
from authlib.common.encoding import to_unicode
from authlib.integrations.requests_client import OAuth1Session, OAuthError
from tests.client_base import mock_text_response
from tests.util import read_file_path
from ..util import mock_text_response, read_key_file


TEST_RSA_OAUTH_SIGNATURE = (
Expand Down Expand Up @@ -88,7 +87,7 @@ def test_signature_methods(self, generate_nonce, generate_timestamp):
'oauth_signature="{sig}"'
).format(sig=TEST_RSA_OAUTH_SIGNATURE)

rsa_key = read_file_path('rsa_private.pem')
rsa_key = read_key_file('rsa_private.pem')
auth = OAuth1Session(
'foo', signature_method=SIGNATURE_RSA_SHA1, rsa_key=rsa_key)
auth.send = self.verify_signature(signature)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,16 @@
from authlib.integrations.requests_client import OAuth2Session, OAuthError
from authlib.oauth2.rfc6749 import MismatchingStateException
from authlib.oauth2.rfc7523 import ClientSecretJWT, PrivateKeyJWT
from tests.util import read_file_path
from tests.client_base import mock_json_response
from ..util import read_key_file


def mock_json_response(payload):
def fake_send(r, **kwargs):
resp = mock.MagicMock()
resp.json = lambda: payload
return resp
return fake_send



class OAuth2SessionTest(TestCase):
Expand Down Expand Up @@ -439,7 +447,7 @@ def fake_send(r, **kwargs):
self.assertEqual(token, self.token)

def test_private_key_jwt(self):
client_secret = read_file_path('rsa_private.pem')
client_secret = read_key_file('rsa_private.pem')
sess = OAuth2Session(
'id', client_secret,
token_endpoint_auth_method='private_key_jwt'
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
from starlette.requests import Request
from authlib.common.urls import urlparse, url_decode
from authlib.integrations.starlette_client import OAuth, OAuthError
from tests.client_base import get_bearer_token
from ..utils import AsyncPathMapDispatch
from ..asgi_helper import AsyncPathMapDispatch
from ..util import get_bearer_token


def test_register_remote_app():
Expand Down
Loading

0 comments on commit f735578

Please sign in to comment.