"""Per-device preferences: cookies in, validated values out (AD-15).""" import pytest from django.test import Client, RequestFactory from portal.shell import preferences from portal.shell.preferences import Preferences def request_with(cookies=None, accept_language=""): request = RequestFactory().get("/", HTTP_ACCEPT_LANGUAGE=accept_language) request.COOKIES.update(cookies or {}) return request def test_without_cookies_the_defaults_apply(): prefs = preferences.from_request(request_with()) assert prefs == Preferences(theme="system", language="en", form="sie") @pytest.mark.parametrize( ("header", "expected"), [("de-DE,de;q=0.9,en;q=0.5", "de"), ("en-GB", "en"), ("fr-FR", "en"), ("", "en")], ) def test_the_language_defaults_from_the_browser(header, expected): assert preferences.from_request(request_with(accept_language=header)).language == expected def test_valid_cookies_are_used_and_beat_the_browser(): cookies = {"pm_theme": "dark", "pm_lang": "en", "pm_form": "du"} prefs = preferences.from_request(request_with(cookies, accept_language="de")) assert prefs == Preferences(theme="dark", language="en", form="du") @pytest.mark.parametrize("value", ["", "blue", "