unit tests: improved flaskutils coverage

This commit is contained in:
Éloi Rivard 2022-12-11 22:49:32 +01:00
parent 118af82409
commit 9a3363a17f
3 changed files with 30 additions and 15 deletions

View file

@ -1,6 +1,8 @@
import datetime import datetime
import logging import logging
from functools import wraps from functools import wraps
from urllib.parse import urlsplit
from urllib.parse import urlunsplit
import ldap import ldap
from canaille.models import User from canaille.models import User
@ -79,3 +81,12 @@ def smtp_needed():
def timestamp(dt): def timestamp(dt):
return datetime.datetime.timestamp(dt) return datetime.datetime.timestamp(dt)
def set_parameter_in_url_query(url, **kwargs):
split = list(urlsplit(url))
pairs = split[3].split("&")
parameters = {pair.split("=")[0]: pair.split("=")[1] for pair in pairs if pair}
parameters = {**parameters, **kwargs}
split[3] = "&".join(f"{key}={value}" for key, value in parameters.items())
return urlunsplit(split)

View file

@ -1,6 +1,4 @@
import datetime import datetime
from urllib.parse import urlsplit
from urllib.parse import urlunsplit
from authlib.integrations.flask_oauth2 import current_token from authlib.integrations.flask_oauth2 import current_token
from authlib.jose import JsonWebKey from authlib.jose import JsonWebKey
@ -21,6 +19,7 @@ from flask_themer import render_template
from werkzeug.datastructures import CombinedMultiDict from werkzeug.datastructures import CombinedMultiDict
from ..flaskutils import current_user from ..flaskutils import current_user
from ..flaskutils import set_parameter_in_url_query
from ..forms import FullLoginForm from ..forms import FullLoginForm
from ..models import User from ..models import User
from .forms import LogoutForm from .forms import LogoutForm
@ -255,19 +254,6 @@ def userinfo():
return jsonify(response) return jsonify(response)
def set_parameter_in_url_query(url, **kwargs):
split = list(urlsplit(url))
parameters = "&".join(f"{key}={value}" for key, value in kwargs.items())
if split[3]:
split[3] = f"{split[3]}&{parameters}"
else:
split[3] = parameters
return urlunsplit(split)
@bp.route("/end_session", methods=["GET", "POST"]) @bp.route("/end_session", methods=["GET", "POST"])
def end_session(): def end_session():
data = CombinedMultiDict((request.args, request.form)) data = CombinedMultiDict((request.args, request.form))

18
tests/test_flaskutils.py Normal file
View file

@ -0,0 +1,18 @@
from canaille.flaskutils import set_parameter_in_url_query
def test_set_parameter_in_url_query():
assert (
set_parameter_in_url_query("https://auth.mydomain.tld", foo="bar")
== "https://auth.mydomain.tld?foo=bar"
)
assert (
set_parameter_in_url_query("https://auth.mydomain.tld?foo=baz", foo="bar")
== "https://auth.mydomain.tld?foo=bar"
)
assert (
set_parameter_in_url_query("https://auth.mydomain.tld?foo=baz", hello="world")
== "https://auth.mydomain.tld?foo=baz&hello=world"
)