Skip to content

Commit 790847f

Browse files
committed
tests
1 parent 617fd6f commit 790847f

File tree

1 file changed

+123
-2
lines changed

1 file changed

+123
-2
lines changed

backend/visa/tests/test_tasks.py

Lines changed: 123 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
from uuid import uuid4
22
import requests
3-
from visa.models import InvitationLetterRequestStatus
3+
from grants.tests.factories import GrantFactory
4+
from grants.models import Grant
5+
from visa.models import (
6+
InvitationLetterDocumentInclusionPolicy,
7+
InvitationLetterRequestStatus,
8+
)
49
import pytest
510
from django.test import override_settings
611
from visa.tasks import (
@@ -18,8 +23,35 @@
1823
pytestmark = pytest.mark.django_db
1924

2025

26+
@pytest.fixture()
27+
def mock_ticket_present(requests_mock):
28+
def _mock_ticket_present(request):
29+
requests_mock.get(
30+
"https://example.com/ticket.pdf",
31+
content=open("visa/tests/fixtures/sample-ticket.pdf", "rb").read(),
32+
)
33+
requests_mock.get(
34+
f"https://pretix/api/organizers/base-pretix-organizer-id/events/base-pretix-event-id/tickets/attendee-tickets/?attendee_email={request.requester.email}",
35+
json=[
36+
{
37+
"item": {
38+
"admission": False,
39+
}
40+
},
41+
{
42+
"item": {
43+
"admission": True,
44+
},
45+
"downloads": [{"url": "https://example.com/ticket.pdf"}],
46+
},
47+
],
48+
)
49+
50+
return _mock_ticket_present
51+
52+
2153
@override_settings(PRETIX_API="https://pretix/api/")
22-
def test_process_invitation_letter_request(requests_mock):
54+
def test_process_invitation_letter_request(requests_mock, mock_ticket_present):
2355
config = InvitationLetterConferenceConfigFactory()
2456
InvitationLetterAssetFactory(
2557
invitation_letter_conference_config=config, identifier="test"
@@ -48,6 +80,7 @@ def test_process_invitation_letter_request(requests_mock):
4880
request = InvitationLetterRequestFactory(
4981
conference=config.conference, nationality="Italian"
5082
)
83+
mock_ticket_present(request)
5184

5285
requests_mock.get(
5386
"https://example.com/ticket.pdf",
@@ -85,6 +118,94 @@ def test_process_invitation_letter_request(requests_mock):
85118
assert output.pages[3].extract_text() == "Thisisasampleticket pdf"
86119

87120

121+
@pytest.mark.parametrize(
122+
"grant_approved_type",
123+
[None, Grant.ApprovedType.ticket_only, Grant.ApprovedType.ticket_travel],
124+
)
125+
@override_settings(PRETIX_API="https://pretix/api/")
126+
def test_process_invitation_letter_request_skips_docs_with_no_accommodation(
127+
mock_ticket_present, grant_approved_type
128+
):
129+
config = InvitationLetterConferenceConfigFactory()
130+
InvitationLetterDocumentFactory(
131+
invitation_letter_conference_config=config,
132+
document=None,
133+
dynamic_document={
134+
"header": {"content": "header", "margin": "0", "align": "top-left"},
135+
"footer": {"content": "footer", "margin": "0", "align": "bottom-left"},
136+
"page_layout": {"margin": "0"},
137+
"pages": [
138+
{"content": "accommodation details"},
139+
],
140+
},
141+
inclusion_policy=InvitationLetterDocumentInclusionPolicy.GRANT_ACCOMMODATION,
142+
)
143+
144+
request = InvitationLetterRequestFactory(
145+
conference=config.conference, nationality="Italian"
146+
)
147+
mock_ticket_present(request)
148+
149+
if grant_approved_type:
150+
GrantFactory(
151+
conference=config.conference,
152+
user=request.requester,
153+
approved_type=grant_approved_type,
154+
)
155+
156+
process_invitation_letter_request(invitation_letter_request_id=request.id)
157+
158+
request.refresh_from_db()
159+
160+
assert request.status == InvitationLetterRequestStatus.PROCESSED
161+
162+
output = PdfReader(request.invitation_letter.open())
163+
assert output.get_num_pages() == 1
164+
assert output.pages[0].extract_text() == "Thisisasampleticket pdf"
165+
166+
167+
@override_settings(PRETIX_API="https://pretix/api/")
168+
def test_process_invitation_letter_request_with_doc_only_for_accommodation(
169+
mock_ticket_present,
170+
):
171+
config = InvitationLetterConferenceConfigFactory()
172+
InvitationLetterDocumentFactory(
173+
invitation_letter_conference_config=config,
174+
document=None,
175+
dynamic_document={
176+
"header": {"content": "header", "margin": "0", "align": "top-left"},
177+
"footer": {"content": "footer", "margin": "0", "align": "bottom-left"},
178+
"page_layout": {"margin": "0"},
179+
"pages": [
180+
{"content": "accommodation details"},
181+
],
182+
},
183+
inclusion_policy=InvitationLetterDocumentInclusionPolicy.GRANT_ACCOMMODATION,
184+
)
185+
186+
request = InvitationLetterRequestFactory(
187+
conference=config.conference, nationality="Italian"
188+
)
189+
mock_ticket_present(request)
190+
191+
GrantFactory(
192+
conference=config.conference,
193+
user=request.requester,
194+
approved_type=Grant.ApprovedType.ticket_travel_accommodation,
195+
)
196+
197+
process_invitation_letter_request(invitation_letter_request_id=request.id)
198+
199+
request.refresh_from_db()
200+
201+
assert request.status == InvitationLetterRequestStatus.PROCESSED
202+
203+
output = PdfReader(request.invitation_letter.open())
204+
assert output.get_num_pages() == 2
205+
assert output.pages[0].extract_text() == "accommodation details \nheader\nfooter"
206+
assert output.pages[1].extract_text() == "Thisisasampleticket pdf"
207+
208+
88209
@override_settings(PRETIX_API="https://pretix/api/")
89210
def test_process_invitation_letter_request_handles_generating_ticket_pdfs(
90211
requests_mock, mocker

0 commit comments

Comments
 (0)