From 6d883fc37d754b5c748a6fed72b29870a94325d9 Mon Sep 17 00:00:00 2001 From: Mira Weller Date: Mon, 13 Nov 2023 16:26:54 +0100 Subject: [PATCH] add test cases --- src/tests/base/test_templatetag.py | 90 ++++++++++++++++++++++++------ 1 file changed, 74 insertions(+), 16 deletions(-) diff --git a/src/tests/base/test_templatetag.py b/src/tests/base/test_templatetag.py index cf9cbeb6a..bdbae991c 100644 --- a/src/tests/base/test_templatetag.py +++ b/src/tests/base/test_templatetag.py @@ -19,34 +19,92 @@ # You should have received a copy of the GNU Affero General Public License along with this program. If not, see # . # +from decimal import Decimal + from django.template import Context, Template from django.test import RequestFactory +from django.utils import translation -TEMPLATE_REPLACE_PAGE = Template("{% load urlreplace %}{% url_replace request 'page' 3 %}") +from pretix import settings + +TEMPLATE_REPLACE_PAGE = Template( + "{% load urlreplace %}{% url_replace request 'page' 3 %}" +) +TEMPLATE_MONEY_FILTER = Template("{% load money %}{{ my_amount|money:my_currency }}") +NBSP = "\xa0" def test_urlreplace_add__first_parameter(): factory = RequestFactory() - request = factory.get('/customer/details') - rendered = TEMPLATE_REPLACE_PAGE.render(Context({ - 'request': request - })).strip() - assert rendered == 'page=3' + request = factory.get("/customer/details") + rendered = TEMPLATE_REPLACE_PAGE.render(Context({"request": request})).strip() + assert rendered == "page=3" def test_urlreplace_add_parameter(): factory = RequestFactory() - request = factory.get('/customer/details?foo=bar') - rendered = TEMPLATE_REPLACE_PAGE.render(Context({ - 'request': request - })).strip() - assert rendered in ('foo=bar&page=3', 'page=3&foo=bar') + request = factory.get("/customer/details?foo=bar") + rendered = TEMPLATE_REPLACE_PAGE.render(Context({"request": request})).strip() + assert rendered in ("foo=bar&page=3", "page=3&foo=bar") def test_urlreplace_replace_parameter(): factory = RequestFactory() - request = factory.get('/customer/details?page=15') - rendered = TEMPLATE_REPLACE_PAGE.render(Context({ - 'request': request - })).strip() - assert rendered == 'page=3' + request = factory.get("/customer/details?page=15") + rendered = TEMPLATE_REPLACE_PAGE.render(Context({"request": request})).strip() + assert rendered == "page=3" + + +def _render_money_filter(locale, amount, currency): + factory = RequestFactory() + translation.activate(locale) + request = factory.get("/foo/bar") + return TEMPLATE_MONEY_FILTER.render( + Context( + { + "request": request, + "my_amount": amount, + "my_currency": currency, + } + ) + ).strip() + + +def test_money_filter_de_EUR_happycase(): + rendered = _render_money_filter("de", Decimal("1.23"), "EUR") + assert rendered == "1,23" + NBSP + "€" + + +def test_money_filter_de_EUR_happycase2(): + rendered = _render_money_filter("de", Decimal("1000.00"), "EUR") + assert rendered == "1.000,00" + NBSP + "€" + + +def test_money_filter_de_JPY_happycase(): + rendered = _render_money_filter("de", Decimal("1023"), "JPY") + assert rendered == "1.023" + NBSP + "¥" + + +def test_money_filter_de_unknown_currency(): + rendered = _render_money_filter("de", Decimal("1234.56"), "FOO") + assert rendered == "1.234,56 FOO" + + +def test_money_filter_de_unknown_currency2(): + rendered = _render_money_filter("de", Decimal("1234.567"), "FOO") + assert rendered == "FOO 1234,57" + + +def test_money_filter_en_JPY_happycase(): + rendered = _render_money_filter("en", Decimal("1023"), "JPY") + assert rendered == "¥1,023" + + +def test_money_filter_de_JPY_rounding_error(): + rendered = _render_money_filter("de", Decimal("1023.1"), "JPY") + assert rendered == "JPY 1023,10" + + +def test_money_filter_de_EUR_rounding_error(): + rendered = _render_money_filter("de", Decimal("1.234"), "EUR") + assert rendered == "EUR 1,23" # TODO - should this really be handled differently then JPY?