Skip to content

Commit 94329d5

Browse files
committed
tests
1 parent d8a1638 commit 94329d5

File tree

12 files changed

+314
-14
lines changed

12 files changed

+314
-14
lines changed

backend/association_membership/handlers/pretix/api.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ def run_request(
3232
if qs:
3333
url = f"{url}?" + "&".join([f"{key}={value}" for key, value in qs.items()])
3434

35-
response = getattr(requests, method)(url, headers=headers)
36-
response.raise_for_status()
37-
return response
35+
return getattr(requests, method)(url, headers=headers)
3836

3937
def _request(self, endpoint: str, **kwargs):
4038
url = f"{self.base_url}/{endpoint}/"
41-
return self.run_request(url, **kwargs)
39+
response = self.run_request(url, **kwargs)
40+
response.raise_for_status()
41+
return response
4242

4343
def get_order_data(self, order_code: str) -> dict:
4444
response = self._request(f"orders/{order_code}")

backend/organizers/tests/factories.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ class Meta:
99
model = Organizer
1010

1111
name = factory.Faker("word")
12-
slug = factory.Faker("text")
12+
slug = factory.Faker("word")

backend/visa/admin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def response_post_save_change(self, request, obj):
110110

111111
class InvitationLetterAssetInline(admin.TabularInline):
112112
fields = (
113-
"handle",
113+
"identifier",
114114
"image",
115115
)
116116
model = InvitationLetterAsset
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 5.1.4 on 2024-12-20 23:40
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('visa', '0006_invitationletterdocument_name_and_more'),
10+
]
11+
12+
operations = [
13+
migrations.RenameField(
14+
model_name='invitationletterasset',
15+
old_name='handle',
16+
new_name='identifier',
17+
),
18+
]

backend/visa/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ class InvitationLetterAsset(TimeStampedModel):
208208
related_name="assets",
209209
verbose_name=_("invitation letter organizer config"),
210210
)
211-
handle = models.CharField(_("handle"), max_length=100)
211+
identifier = models.CharField(_("identifier"), max_length=100)
212212
image = models.ImageField(
213213
_("image"),
214214
upload_to="invitation_letters_assets/",
@@ -218,4 +218,4 @@ class InvitationLetterAsset(TimeStampedModel):
218218
)
219219

220220
def __str__(self):
221-
return f"Asset: {self.handle}"
221+
return f"Asset: {self.identifier}"

backend/visa/tasks.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ def process_invitation_letter_request(*, invitation_letter_request_id: int):
8383

8484
pretix_ticket = download_pretix_ticket(invitation_letter_request)
8585
merger.append(pretix_ticket)
86+
merger.compress_identical_objects(remove_identicals=True, remove_orphans=True)
8687

8788
with tempfile.NamedTemporaryFile() as invitation_letter_file:
8889
merger.write(invitation_letter_file)
@@ -163,13 +164,16 @@ def download_pretix_ticket(invitation_letter_request):
163164
ticket_url = attendee_ticket["downloads"][0]["url"]
164165

165166
attempts = 0
166-
while attempts < 3:
167+
168+
while True:
167169
attempts += 1
168170

169171
response = pretix_api.run_request(ticket_url)
170-
if response.status_code == 409:
172+
if response.status_code == 409 and attempts <= 3:
171173
time.sleep(2 * attempts)
172-
else:
173-
response.raise_for_status()
174+
continue
175+
176+
response.raise_for_status()
177+
break
174178

175179
return io.BytesIO(response.content)

backend/visa/templatetags/invitation_letter_asset.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55

66

77
@register.simple_tag(takes_context=True)
8-
def invitation_letter_asset(context, asset_handle: str, **kwargs):
8+
def invitation_letter_asset(context, identifier: str, **kwargs):
99
config = context["config"]
1010
assets = config.assets.all()
1111
matching_asset = next(
12-
(asset for asset in assets if asset.handle == asset_handle), None
12+
(asset for asset in assets if asset.identifier == identifier), None
1313
)
1414

1515
width = kwargs.get("width", None)

backend/visa/tests/__init__.py

Whitespace-only changes.

backend/visa/tests/factories.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
from pathlib import Path
2+
from users.tests.factories import UserFactory
3+
from conferences.tests.factories import ConferenceFactory
4+
from organizers.tests.factories import OrganizerFactory
5+
from visa.models import (
6+
InvitationLetterAsset,
7+
InvitationLetterDocument,
8+
InvitationLetterRequest,
9+
InvitationLetterOrganizerConfig,
10+
)
11+
import factory
12+
import factory.fuzzy
13+
from factory.django import DjangoModelFactory
14+
15+
16+
class InvitationLetterRequestFactory(DjangoModelFactory):
17+
conference = factory.SubFactory(ConferenceFactory)
18+
requester = factory.SubFactory(UserFactory)
19+
date_of_birth = factory.Faker("date")
20+
full_name = factory.Faker("name")
21+
nationality = factory.Faker("country")
22+
address = factory.Faker("address")
23+
passport_number = factory.Faker("ssn")
24+
embassy_name = factory.Faker("company")
25+
26+
class Meta:
27+
model = InvitationLetterRequest
28+
29+
30+
class InvitationLetterOrganizerConfigFactory(DjangoModelFactory):
31+
organizer = factory.SubFactory(OrganizerFactory)
32+
33+
class Meta:
34+
model = InvitationLetterOrganizerConfig
35+
36+
37+
class InvitationLetterDocumentFactory(DjangoModelFactory):
38+
invitation_letter_organizer_config = factory.SubFactory(
39+
InvitationLetterOrganizerConfigFactory
40+
)
41+
document = factory.django.FileField(
42+
from_path=Path(__file__).parent / "fixtures" / "sample-pdf.pdf"
43+
)
44+
45+
class Meta:
46+
model = InvitationLetterDocument
47+
48+
49+
class InvitationLetterAssetFactory(DjangoModelFactory):
50+
invitation_letter_organizer_config = factory.SubFactory(
51+
InvitationLetterOrganizerConfigFactory
52+
)
53+
identifier = factory.Faker("md5")
54+
image = factory.django.ImageField()
55+
56+
class Meta:
57+
model = InvitationLetterAsset
12.8 KB
Binary file not shown.

0 commit comments

Comments
 (0)