Skip to content

Commit 4d69543

Browse files
committed
Ticket validity checking
Duration and leeway are used when determining if a ticket is valid. Refs KK-912
1 parent 3e8d816 commit 4d69543

4 files changed

Lines changed: 23 additions & 13 deletions

File tree

events/tests/snapshots/snap_test_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1522,7 +1522,7 @@
15221522
"data": {
15231523
"verifyTicket": {
15241524
"eventName": "Record card my. Sure sister return.",
1525-
"occurrenceTime": "2020-12-13T00:00:00+00:00",
1525+
"occurrenceTime": "2020-12-12T00:00:00+00:00",
15261526
"validity": True,
15271527
"venueName": "Remember stay public high concern glass person.",
15281528
}

events/tests/test_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2588,7 +2588,7 @@ def test_event_ticket_system_password_not_own_child(guardian_api_client):
25882588

25892589
# NOTE: api_client is for anonymous users
25902590
def test_verify_valid_ticket(api_client, snapshot):
2591-
upcoming_occurrence = OccurrenceFactory(time=timezone.now() + timedelta(days=1))
2591+
upcoming_occurrence = OccurrenceFactory(time=timezone.now())
25922592
valid_enrolment = EnrolmentFactory(occurrence=upcoming_occurrence)
25932593
executed = api_client.execute(
25942594
VERIFY_TICKET_QUERY, variables={"referenceId": valid_enrolment.reference_id}

events/tests/test_ticket_service.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime
1+
from datetime import timedelta
22

33
import pytest
44
from django.utils import timezone
@@ -16,17 +16,20 @@
1616
@pytest.mark.parametrize(
1717
"occurrence_time, expected",
1818
[
19-
(datetime(2020, 11, 11, 12, tzinfo=timezone.now().tzinfo), True), # Present
20-
(datetime(2020, 11, 11, 13, tzinfo=timezone.now().tzinfo), True), # +1h
21-
(datetime(2020, 11, 11, 11, tzinfo=timezone.now().tzinfo), True), # -1h
22-
(datetime(2020, 11, 13, 12, tzinfo=timezone.now().tzinfo), True), # +1d
23-
(datetime(2020, 11, 10, 12, tzinfo=timezone.now().tzinfo), False), # -1d
19+
(timedelta(minutes=16), False), # Starts in 16 minutes
20+
(timedelta(minutes=15), True), # Starts in 15 minutes
21+
(timedelta(minutes=0), True), # Starts now
22+
(timedelta(minutes=-30), True), # Ended 15 minutes ago
23+
(timedelta(minutes=-31), False), # Ended 16 minutes ago
2424
],
2525
)
2626
@pytest.mark.django_db
27-
def test_check_ticket_validity(project, occurrence_time, expected):
27+
def test_check_ticket_validity(project, occurrence_time, expected, settings):
2828
"""Tickets are show valid for the whole day on the occurrence day."""
29-
occurrence = OccurrenceFactory(time=occurrence_time)
29+
settings.KUKKUU_ENROLLED_OCCURRENCE_IN_PAST_LEEWAY = 15
30+
occurrence = OccurrenceFactory(
31+
time=timezone.now() + occurrence_time, event__duration=15
32+
)
3033
expected_enrolment = EnrolmentFactory(occurrence=occurrence)
3134
enrolment, validity = check_ticket_validity(expected_enrolment.reference_id)
3235
assert enrolment == expected_enrolment

events/ticket_service.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
from datetime import timedelta
12
from typing import Tuple
23

4+
from django.conf import settings
35
from django.utils import timezone
46

57
from events.models import Enrolment
@@ -14,11 +16,16 @@ def check_ticket_validity(enrolment_reference_id: str) -> Tuple[Enrolment, bool]
1416

1517
enrolment_id = Enrolment.decode_reference_id(enrolment_reference_id)
1618
try:
17-
enrolment = Enrolment.objects.get(pk=enrolment_id)
19+
enrolment = Enrolment.objects.with_end_time().get(pk=enrolment_id)
1820
except (Enrolment.DoesNotExist):
1921
raise EnrolmentReferenceIdDoesNotExist(
2022
"The decoded reference id does not match to any of the existing enrolments"
2123
)
22-
23-
valid = enrolment.occurrence.time.date() >= timezone.localdate()
24+
start = enrolment.occurrence.time - timedelta(
25+
minutes=settings.KUKKUU_ENROLLED_OCCURRENCE_IN_PAST_LEEWAY
26+
)
27+
end = enrolment.end_time + timedelta(
28+
minutes=settings.KUKKUU_ENROLLED_OCCURRENCE_IN_PAST_LEEWAY
29+
)
30+
valid = start <= timezone.now() <= end
2431
return enrolment, valid

0 commit comments

Comments
 (0)