Add tests for invoicing

This commit is contained in:
Tobias Kunze
2016-10-27 14:18:11 +02:00
committed by Raphael Michel
parent bac9960d0c
commit 5ea35aa76f

View File

@@ -5,9 +5,13 @@ import pytest
from django.utils.timezone import now
from pretix.base.models import (
Event, InvoiceAddress, Item, Order, OrderPosition, Organizer,
Event, Invoice, InvoiceAddress, Item, ItemVariation, Order, OrderPosition,
Organizer,
)
from pretix.base.services.invoices import (
build_preview_invoice_pdf, generate_cancellation, generate_invoice,
invoice_pdf_task, regenerate_invoice,
)
from pretix.base.services.invoices import generate_invoice
@pytest.fixture
@@ -28,12 +32,22 @@ def env():
ticket = Item.objects.create(event=event, name='Early-bird ticket',
category=None, default_price=23,
admission=True)
t_shirt = Item.objects.create(event=event, name='T-Shirt',
category=None, default_price=42,
admission=True)
variation = ItemVariation.objects.create(value='M', item=t_shirt)
OrderPosition.objects.create(
order=o,
item=ticket,
variation=None,
price=Decimal("23.00"),
)
OrderPosition.objects.create(
order=o,
item=t_shirt,
variation=variation,
price=Decimal("42.00"),
)
return event, o
@@ -80,11 +94,16 @@ def test_address_vat_id(env):
def test_positions(env):
event, order = env
inv = generate_invoice(order)
assert inv.lines.count() == 2
assert inv.lines.count() == 3
first = inv.lines.first()
assert 'Early-bird' in first.description
assert first.gross_value == Decimal('23.00')
second = inv.lines.all()[1]
assert 'T-Shirt' in second.description
assert 'M' in second.description
assert second.gross_value == Decimal('42.00')
last = inv.lines.last()
assert 'Payment' in last.description
assert last.gross_value == order.payment_fee
@@ -93,6 +112,60 @@ def test_positions(env):
assert inv.invoice_to == ""
@pytest.mark.django_db
def test_rebuilding(env):
event, order = env
inv = generate_invoice(order)
inv2 = regenerate_invoice(inv)
assert inv.order == inv2.order
inv3 = generate_cancellation(inv)
inv4 = regenerate_invoice(inv3)
assert inv3.order == inv4.order
@pytest.mark.django_db
def test_cannot_delete_invoice(env):
event, order = env
inv = generate_invoice(order)
with pytest.raises(Exception):
inv.delete()
@pytest.mark.django_db
def test_cannot_write_invoice_without_order(env):
event, _ = env
with pytest.raises(Exception):
i = Invoice(order=None, event=event)
i.save()
@pytest.mark.django_db
def test_pdf_generation(env):
event, order = env
inv = generate_invoice(order)
cancellation = generate_cancellation(inv)
assert invoice_pdf_task(inv.pk)
assert invoice_pdf_task(cancellation.pk)
@pytest.mark.django_db
def test_pdf_generation_custom_text(env):
event, order = env
event.settings.set('invoice_introductory_text', 'introductory invoice text')
# set a really long additional text, to make the invoice span two pages
event.settings.set('invoice_additional_text', 'additional invoice text\n' * 100)
event.settings.set('show_date_to', False)
inv = generate_invoice(order)
assert invoice_pdf_task(inv.pk)
@pytest.mark.django_db
def test_pdf_preview_generation(env):
event, order = env
assert build_preview_invoice_pdf(event)
@pytest.mark.django_db
def test_invoice_numbers(env):
event, order = env