Files
mandelstudio/mandelstudio/tests/test_i18n_set_language_view.py

64 lines
2.1 KiB
Python

from unittest.mock import patch
from django.http import HttpResponseRedirect
from django.test import RequestFactory, SimpleTestCase, override_settings
from mandelstudio.i18n_utils import normalize_set_language_next
from mandelstudio.i18n_views import set_language_normalized
@override_settings(
LANGUAGES=(
("nl", "Dutch"),
("en", "English"),
("de", "German"),
("fr", "French"),
("es", "Spanish"),
("it", "Italian"),
("pt", "Portuguese"),
("ru", "Russian"),
)
)
class SetLanguageNormalizationTests(SimpleTestCase):
def setUp(self):
self.factory = RequestFactory()
def test_normalize_set_language_next_strips_single_prefix(self):
self.assertEqual(
normalize_set_language_next("/en/manage/checkout/paymentmethod/"),
"/manage/checkout/paymentmethod/",
)
@patch("mandelstudio.i18n_views.django_set_language")
def test_post_next_is_normalized_before_delegate(self, django_set_language):
django_set_language.side_effect = lambda request: HttpResponseRedirect(
request.POST["next"]
)
request = self.factory.post(
"/i18n/setlang/",
data={"language": "de", "next": "/en/manage/checkout/paymentmethod/"},
)
response = set_language_normalized(request)
self.assertEqual(response.status_code, 302)
self.assertEqual(
django_set_language.call_args.args[0].POST["next"],
"/manage/checkout/paymentmethod/",
)
@patch("mandelstudio.i18n_views.django_set_language")
def test_get_next_is_normalized_before_delegate(self, django_set_language):
django_set_language.side_effect = lambda request: HttpResponseRedirect(
request.GET["next"]
)
request = self.factory.get(
"/i18n/setlang/",
data={"language": "fr", "next": "/de/manage/"},
)
response = set_language_normalized(request)
self.assertEqual(response.status_code, 302)
self.assertEqual(django_set_language.call_args.args[0].GET["next"], "/manage/")