From 5542d58c36d8d34d7f655ae175d6bf3c70b033f4 Mon Sep 17 00:00:00 2001 From: Junpei Kawamoto Date: Mon, 2 Jan 2023 14:58:52 -0600 Subject: [PATCH] Improve test coverage --- mastodon/authentication.py | 16 ++++++++-------- tests/test_create_app.py | 30 +++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/mastodon/authentication.py b/mastodon/authentication.py index 03eaf12..4403770 100644 --- a/mastodon/authentication.py +++ b/mastodon/authentication.py @@ -58,15 +58,15 @@ class Mastodon(Internals): 'User-Agent': user_agent } + if redirect_uris is not None: + if isinstance(redirect_uris, (list, tuple)): + redirect_uris = "\n".join(list(redirect_uris)) + request_data['redirect_uris'] = redirect_uris + else: + request_data['redirect_uris'] = 'urn:ietf:wg:oauth:2.0:oob' + if website is not None: + request_data['website'] = website try: - if redirect_uris is not None: - if isinstance(redirect_uris, (list, tuple)): - redirect_uris = "\n".join(list(redirect_uris)) - request_data['redirect_uris'] = redirect_uris - else: - request_data['redirect_uris'] = 'urn:ietf:wg:oauth:2.0:oob' - if website is not None: - request_data['website'] = website if session: ret = session.post(f"{api_base_url}/api/v1/apps", data=request_data, headers=headers, timeout=request_timeout) response = ret.json() diff --git a/tests/test_create_app.py b/tests/test_create_app.py index c7d2205..2f7c3fc 100644 --- a/tests/test_create_app.py +++ b/tests/test_create_app.py @@ -1,6 +1,7 @@ -from mastodon import Mastodon +from mastodon import Mastodon, MastodonNetworkError import pytest import requests +from requests import HTTPError import time try: @@ -39,11 +40,34 @@ def test_create_app_redirect_uris(mocker): kwargs = requests.post.call_args[1] assert kwargs['data']['redirect_uris'] == 'http://example.net' +def test_create_app_multiple_redirect_uris(mocker): + test_create_app(mocker, redirect_uris=['http://example.net', 'https://example.net']) + kwargs = requests.post.call_args[1] + assert kwargs['data']['redirect_uris'] == 'http://example.net\nhttps://example.net' + def test_create_app_website(mocker): test_create_app(mocker, website='http://example.net') kwargs = requests.post.call_args[1] assert kwargs['data']['website'] == 'http://example.net' +def test_create_app_session(): + resp = Mock(**{'json.return_value': {'client_id': 'foo', 'client_secret': 'bar'}}) + sess = Mock(**{'post.return_value': resp}) + + app = Mastodon.create_app("Mastodon.py test suite", api_base_url="example.com", session=sess) + + assert app == ('foo', 'bar') + sess.post.assert_called() + +def test_create_app_error(mocker): + def post(_url, **_kwargs): + raise HTTPError("Unauthorized") + + mocker.patch('requests.post', side_effect=post) + + with pytest.raises(MastodonNetworkError): + Mastodon.create_app("Mastodon.py test suite", api_base_url="example.com") + def test_create_app_user_agent(mocker): test_create_app(mocker, user_agent="pytest") kwargs = requests.post.call_args[1] @@ -60,7 +84,7 @@ def test_app_account_create(): # This leaves behind stuff on the test server, which is unfortunate, but eh. suffix = str(time.time()).replace(".", "")[-5:] - test_app = test_app = Mastodon.create_app( + test_app = Mastodon.create_app( "mastodon.py generated test app", api_base_url="http://localhost:3000/" ) @@ -80,7 +104,7 @@ def test_app_account_create(): def test_app_account_create_invalid(): suffix = str(time.time()).replace(".", "")[-5:] - test_app = test_app = Mastodon.create_app( + test_app = Mastodon.create_app( "mastodon.py generated test app", api_base_url="http://localhost:3000/" )