diff --git a/src/tests/base/test_invoices.py b/src/tests/base/test_invoices.py new file mode 100644 index 0000000000..5003b981d8 --- /dev/null +++ b/src/tests/base/test_invoices.py @@ -0,0 +1,92 @@ +from datetime import timedelta + +import pytest +from django.utils.timezone import now +from decimal import Decimal + +from pretix.base.models import Event, Organizer, Order, Item, OrderPosition, InvoiceAddress +from pretix.base.payment import FreeOrderProvider +from pretix.base.services.invoices import generate_invoice + + +@pytest.fixture +def env(): + o = Organizer.objects.create(name='Dummy', slug='dummy') + event = Event.objects.create( + organizer=o, name='Dummy', slug='dummy', + date_from=now(), plugins='banktransfer' + ) + o = Order.objects.create( + code='FOO', event=event, email='dummy@dummy.test', + status=Order.STATUS_PENDING, + datetime=now(), expires=now() + timedelta(days=10), + total=0, payment_provider='banktransfer', + payment_fee=Decimal('0.25'), payment_fee_tax_rate=0, + payment_fee_tax_value=0 + ) + ticket = Item.objects.create(event=event, name='Early-bird ticket', + category=None, default_price=23, + admission=True) + OrderPosition.objects.create( + order=o, + item=ticket, + variation=None, + price=Decimal("14"), + ) + return event, o + + +@pytest.mark.django_db +def test_locale_setting(env): + event, order = env + event.settings.set('invoice_language', 'de') + inv = generate_invoice(order) + assert inv.locale == 'de' + + +@pytest.mark.django_db +def test_locale_user(env): + event, order = env + order.locale = 'en' + event.settings.set('invoice_language', '__user__') + inv = generate_invoice(order) + assert inv.locale == order.locale + + +@pytest.mark.django_db +def test_address(env): + event, order = env + event.settings.set('invoice_language', 'en') + InvoiceAddress.objects.create(company='Acme Company', street='221B Baker Street', + zipcode='12345', city='London', country='UK', + order=order) + inv = generate_invoice(order) + assert inv.invoice_to == "Acme Company\n\n221B Baker Street\n12345 London\nUK" + + +@pytest.mark.django_db +def test_address_vat_id(env): + event, order = env + event.settings.set('invoice_language', 'en') + InvoiceAddress.objects.create(company='Acme Company', street='221B Baker Street', + name='Sherlock Holmes', zipcode='12345', city='London', country='UK', + vat_id='UK1234567', order=order) + inv = generate_invoice(order) + assert inv.invoice_to == "Acme Company\nSherlock Holmes\n221B Baker Street\n12345 London\nUK\nVAT-ID: UK1234567" + + +@pytest.mark.django_db +def test_positions(env): + event, order = env + inv = generate_invoice(order) + assert inv.lines.count() == 2 + first = inv.lines.first() + assert 'Early-bird' in first.description + assert first.gross_value == Decimal('23.00') + + last = inv.lines.last() + assert 'Payment' in last.description + assert last.gross_value == order.payment_fee + assert last.tax_rate == order.payment_fee_tax_rate + assert last.tax_value == order.payment_fee_tax_value + assert inv.invoice_to == "Acme Company\n\n221B Baker Street\n12345 London\nUK" diff --git a/src/tests/base/test_templatetag.py b/src/tests/base/test_templatetag.py new file mode 100644 index 0000000000..f0c92e22a0 --- /dev/null +++ b/src/tests/base/test_templatetag.py @@ -0,0 +1,38 @@ +import pytest +from django.conf import settings +from django.core.urlresolvers import NoReverseMatch +from django.template import Context, Template, TemplateSyntaxError +from django.test import RequestFactory +from django.utils.timezone import now + +from pretix.base.models import Event, Organizer +from pretix.multidomain.models import KnownDomain + +TEMPLATE_REPLACE_PAGE = Template("{% load urlreplace %}{% url_replace request 'page' 3 %}") + + +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' + + +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') + + +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'