Test MeB OAuth provider #583
GitHub Actions / Test Results
failed
Sep 9, 2024 in 0s
1 fail, 200 pass in 53s
201 tests 200 ✅ 53s ⏱️
1 suites 0 💤
1 files 1 ❌
Results for commit 6cadd3a.
Annotations
Check warning on line 0 in critiquebrainz.frontend.views.test.test_login.LoginViewsTestCase
github-actions / Test Results
test_login_oauth (critiquebrainz.frontend.views.test.test_login.LoginViewsTestCase) failed
reports/tests.xml [took 0s]
Raw output
requests.exceptions.MissingSchema: Invalid URL '/token': No scheme supplied. Perhaps you meant https:///token?
self = <critiquebrainz.frontend.views.test.test_login.LoginViewsTestCase testMethod=test_login_oauth>
mock_requests = <requests_mock.mocker.Mocker object at 0x7f136961d2d0>
@requests_mock.Mocker()
def test_login_oauth(self, mock_requests):
""" Tests that creating a new user, update MB username and login to CB updates MB username in CB db """
row_id = 1111
mock_requests.post("https://musicbrainz.org/oauth2/token", json={
"access_token": "UF7GvG2pl70jTogIwOhD32BhI_aIevPF",
"expires_in": 3600,
"token_type": "Bearer",
"refresh_token": "GjSCBBjp4fnbE0AKo3uFu9qq9K2fFm4u"
})
mock_requests.get("https://musicbrainz.org/oauth2/userinfo", json={
"sub": "old-user-name",
"metabrainz_user_id": row_id
})
response = self.client.get(url_for("login.musicbrainz"))
params = parse_qs(urlparse(response.location).query)
> response = self.client.get(
url_for("login.musicbrainz_post", code="foobar", state=params["state"][0]),
follow_redirects=True
)
critiquebrainz/frontend/views/test/test_login.py:37:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.11/site-packages/werkzeug/test.py:1162: in get
return self.open(*args, **kw)
/usr/local/lib/python3.11/site-packages/flask/testing.py:232: in open
response = super().open(
/usr/local/lib/python3.11/site-packages/werkzeug/test.py:1116: in open
response_parts = self.run_wsgi_app(request.environ, buffered=buffered)
/usr/local/lib/python3.11/site-packages/werkzeug/test.py:988: in run_wsgi_app
rv = run_wsgi_app(self.application, environ, buffered=buffered)
/usr/local/lib/python3.11/site-packages/werkzeug/test.py:1264: in run_wsgi_app
app_rv = app(environ, start_response)
/usr/local/lib/python3.11/site-packages/flask/app.py:1478: in __call__
return self.wsgi_app(environ, start_response)
/usr/local/lib/python3.11/site-packages/flask/app.py:1458: in wsgi_app
response = self.handle_exception(e)
/usr/local/lib/python3.11/site-packages/flask/app.py:1455: in wsgi_app
response = self.full_dispatch_request()
/usr/local/lib/python3.11/site-packages/flask/app.py:869: in full_dispatch_request
rv = self.handle_user_exception(e)
/usr/local/lib/python3.11/site-packages/flask/app.py:867: in full_dispatch_request
rv = self.dispatch_request()
/usr/local/lib/python3.11/site-packages/flask/app.py:852: in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
critiquebrainz/frontend/login/__init__.py:39: in decorated
return f(*args, **kwargs)
critiquebrainz/frontend/views/login.py:29: in musicbrainz_post
user = mb_auth.get_user()
critiquebrainz/frontend/login/provider.py:73: in get_user
s = self._service.get_auth_session(
/usr/local/lib/python3.11/site-packages/rauth/service.py:556: in get_auth_session
session = self.get_session(self.get_access_token(method, **kwargs))
/usr/local/lib/python3.11/site-packages/rauth/service.py:541: in get_access_token
r = self.get_raw_access_token(method, **kwargs)
/usr/local/lib/python3.11/site-packages/rauth/service.py:516: in get_raw_access_token
self.access_token_response = session.request(method,
/usr/local/lib/python3.11/site-packages/rauth/session.py:358: in request
return super(OAuth2Session, self).request(method, url, **req_kwargs)
/usr/local/lib/python3.11/site-packages/requests/sessions.py:575: in request
prep = self.prepare_request(req)
/usr/local/lib/python3.11/site-packages/requests/sessions.py:484: in prepare_request
p.prepare(
/usr/local/lib/python3.11/site-packages/requests/models.py:367: in prepare
self.prepare_url(url, params)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <PreparedRequest [POST]>, url = '/token', params = OrderedDict()
def prepare_url(self, url, params):
"""Prepares the given HTTP URL."""
#: Accept objects that have string representations.
#: We're unable to blindly call unicode/str functions
#: as this will include the bytestring indicator (b'')
#: on python 3.x.
#: https://github.com/psf/requests/pull/2238
if isinstance(url, bytes):
url = url.decode("utf8")
else:
url = str(url)
# Remove leading whitespaces from url
url = url.lstrip()
# Don't do any URL preparation for non-HTTP schemes like `mailto`,
# `data` etc to work around exceptions from `url_parse`, which
# handles RFC 3986 only.
if ":" in url and not url.lower().startswith("http"):
self.url = url
return
# Support for unicode domain names and paths.
try:
scheme, auth, host, port, path, query, fragment = parse_url(url)
except LocationParseError as e:
raise InvalidURL(*e.args)
if not scheme:
> raise MissingSchema(
f"Invalid URL {url!r}: No scheme supplied. "
f"Perhaps you meant https://{url}?"
)
E requests.exceptions.MissingSchema: Invalid URL '/token': No scheme supplied. Perhaps you meant https:///token?
/usr/local/lib/python3.11/site-packages/requests/models.py:438: MissingSchema
Loading