mirror of
https://github.com/pretix/pretix.git
synced 2026-08-28 13:34:40 +00:00
Add tests for invoicing
This commit is contained in:
committed by
Raphael Michel
parent
bac9960d0c
commit
5ea35aa76f
@@ -5,9 +5,13 @@ import pytest
|
|||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
|
|
||||||
from pretix.base.models import (
|
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
|
@pytest.fixture
|
||||||
@@ -28,12 +32,22 @@ def env():
|
|||||||
ticket = Item.objects.create(event=event, name='Early-bird ticket',
|
ticket = Item.objects.create(event=event, name='Early-bird ticket',
|
||||||
category=None, default_price=23,
|
category=None, default_price=23,
|
||||||
admission=True)
|
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(
|
OrderPosition.objects.create(
|
||||||
order=o,
|
order=o,
|
||||||
item=ticket,
|
item=ticket,
|
||||||
variation=None,
|
variation=None,
|
||||||
price=Decimal("23.00"),
|
price=Decimal("23.00"),
|
||||||
)
|
)
|
||||||
|
OrderPosition.objects.create(
|
||||||
|
order=o,
|
||||||
|
item=t_shirt,
|
||||||
|
variation=variation,
|
||||||
|
price=Decimal("42.00"),
|
||||||
|
)
|
||||||
return event, o
|
return event, o
|
||||||
|
|
||||||
|
|
||||||
@@ -80,11 +94,16 @@ def test_address_vat_id(env):
|
|||||||
def test_positions(env):
|
def test_positions(env):
|
||||||
event, order = env
|
event, order = env
|
||||||
inv = generate_invoice(order)
|
inv = generate_invoice(order)
|
||||||
assert inv.lines.count() == 2
|
assert inv.lines.count() == 3
|
||||||
first = inv.lines.first()
|
first = inv.lines.first()
|
||||||
assert 'Early-bird' in first.description
|
assert 'Early-bird' in first.description
|
||||||
assert first.gross_value == Decimal('23.00')
|
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()
|
last = inv.lines.last()
|
||||||
assert 'Payment' in last.description
|
assert 'Payment' in last.description
|
||||||
assert last.gross_value == order.payment_fee
|
assert last.gross_value == order.payment_fee
|
||||||
@@ -93,6 +112,60 @@ def test_positions(env):
|
|||||||
assert inv.invoice_to == ""
|
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
|
@pytest.mark.django_db
|
||||||
def test_invoice_numbers(env):
|
def test_invoice_numbers(env):
|
||||||
event, order = env
|
event, order = env
|
||||||
|
|||||||
Reference in New Issue
Block a user