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 logging
from functools import wraps
from urllib.parse import urlsplit
from urllib.parse import urlunsplit
import ldap
from canaille.models import User
@ -79,3 +81,12 @@ def smtp_needed():
def 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
from urllib.parse import urlsplit
from urllib.parse import urlunsplit
from authlib.integrations.flask_oauth2 import current_token
from authlib.jose import JsonWebKey
@ -21,6 +19,7 @@ from flask_themer import render_template
from werkzeug.datastructures import CombinedMultiDict
from ..flaskutils import current_user
from ..flaskutils import set_parameter_in_url_query
from ..forms import FullLoginForm
from ..models import User
from .forms import LogoutForm
@ -255,19 +254,6 @@ def userinfo():
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"])
def end_session():
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"
)