diff --git a/src/tests/plugins/test_ticketoutputpdf.py b/src/tests/plugins/test_ticketoutputpdf.py new file mode 100644 index 0000000000..891100ad5c --- /dev/null +++ b/src/tests/plugins/test_ticketoutputpdf.py @@ -0,0 +1,54 @@ +import json +from datetime import timedelta +from decimal import Decimal +from io import BytesIO + +import pytest +from django.utils.timezone import now +from PyPDF2 import PdfFileReader + +from pretix.base.models import ( + Event, Item, ItemVariation, Order, OrderPosition, Organizer, +) +from pretix.plugins.ticketoutputpdf.ticketoutput import PdfTicketOutput + + +@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(), live=True + ) + o1 = Order.objects.create( + code='FOOBAR', event=event, email='dummy@dummy.test', + status=Order.STATUS_PENDING, + datetime=now(), expires=now() + timedelta(days=10), + total=Decimal('13.37'), payment_provider='banktransfer' + ) + shirt = Item.objects.create(event=event, name='T-Shirt', default_price=12) + shirt_red = ItemVariation.objects.create(item=shirt, default_price=14, value="Red") + OrderPosition.objects.create( + order=o1, item=shirt, variation=shirt_red, + price=12, attendee_name=None, secret='1234' + ) + OrderPosition.objects.create( + order=o1, item=shirt, variation=shirt_red, + price=12, attendee_name=None, secret='5678' + ) + return event, o1 + + +@pytest.mark.django_db +def test_generate_pdf(env, mocker): + mocked = mocker.patch('reportlab.pdfgen.canvas.Canvas.drawString') + event, order = env + event.settings.set('ticketoutput_pdf_code_x', 30) + event.settings.set('ticketoutput_pdf_code_y', 50) + event.settings.set('ticketoutput_pdf_code_s', 2) + o = PdfTicketOutput(event) + fname, ftype, buf = o.generate(order) + assert ftype == 'application/pdf' + pdf = PdfFileReader(BytesIO(buf)) + assert pdf.numPages == 2 + assert mocked.called