Skip to content

Commit 34921e4

Browse files
codedsuniamareebjamal
authored andcommitted
feat: add job to delete ticket holders with no order id (#6662)
1 parent 7fc1b57 commit 34921e4

File tree

4 files changed

+64
-2
lines changed

4 files changed

+64
-2
lines changed

app/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@
4141
from app.api.helpers.auth import AuthManager, is_token_blacklisted
4242
from app.api.helpers.scheduled_jobs import send_after_event_mail, send_event_fee_notification, \
4343
send_event_fee_notification_followup, change_session_state_on_event_completion, \
44-
expire_pending_tickets, send_monthly_event_invoice, event_invoices_mark_due
44+
expire_pending_tickets, send_monthly_event_invoice, event_invoices_mark_due, \
45+
delete_ticket_holders_no_order_id
4546
from app.models.event import Event
4647
from app.models.role_invite import RoleInvite
4748
from app.views.healthcheck import health_check_celery, health_check_db, health_check_migrations, check_migrations
@@ -274,6 +275,7 @@ def update_sent_state(sender=None, headers=None, **kwargs):
274275
scheduler.add_job(expire_pending_tickets, 'cron', minute=45)
275276
scheduler.add_job(send_monthly_event_invoice, 'cron', day=1, month='1-12')
276277
scheduler.add_job(event_invoices_mark_due, 'cron', hour=5)
278+
scheduler.add_job(delete_ticket_holders_no_order_id, 'cron', minute=5)
277279
scheduler.start()
278280

279281

app/api/helpers/scheduled_jobs.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from app.models.session import Session
2222
from app.models.ticket import Ticket
2323
from app.models.ticket_fee import TicketFees, get_fee
24+
from app.models.ticket_holder import TicketHolder
2425

2526
from app.settings import get_settings
2627

@@ -155,6 +156,16 @@ def expire_pending_tickets():
155156
db.session.commit()
156157

157158

159+
def delete_ticket_holders_no_order_id():
160+
from app import current_app as app
161+
with app.app_context():
162+
order_expiry_time = get_settings()['order_expiry_time']
163+
TicketHolder.query.filter(TicketHolder.order_id == None, TicketHolder.deleted_at.is_(None),
164+
TicketHolder.created_at + datetime.timedelta(minutes=order_expiry_time)
165+
< datetime.datetime.utcnow()).delete(synchronize_session=False)
166+
db.session.commit()
167+
168+
158169
def event_invoices_mark_due():
159170
from app import current_app as app
160171
with app.app_context():

app/factories/attendee.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import app.factories.common as common
44
from app.factories.event import EventFactoryBasic
5+
from app.factories.ticket import TicketFactory
6+
from app.factories.order import OrderFactory
57
from app.models.ticket_holder import db, TicketHolder
68

79

@@ -11,6 +13,8 @@ class Meta:
1113
sqlalchemy_session = db.session
1214

1315
event = factory.RelatedFactory(EventFactoryBasic)
16+
ticket = factory.RelatedFactory(TicketFactory)
17+
order = factory.RelatedFactory(OrderFactory)
1418
firstname = common.string_
1519
lastname = common.string_
1620
email = common.email_
@@ -22,3 +26,6 @@ class Meta:
2226
pdf_url = common.url_
2327
event_id = 1
2428
ticket_id = None
29+
order_id = None
30+
created_at = common.date_
31+
modified_at = common.date_

tests/all/integration/api/helpers/test_scheduled_jobs.py

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
from app import current_app as app, db
44
from app.factories.event_invoice import EventInvoiceFactory
5+
from app.factories.attendee import AttendeeFactory
56
from app.models.event_invoice import EventInvoice
6-
from app.api.helpers.scheduled_jobs import event_invoices_mark_due
7+
from app.models.ticket_holder import TicketHolder
8+
from app.api.helpers.scheduled_jobs import event_invoices_mark_due, delete_ticket_holders_no_order_id
79

810
from tests.all.integration.utils import OpenEventTestCase
911

@@ -29,3 +31,43 @@ def test_event_invoices_mark_due(self):
2931

3032
self.assertEqual(status_new, "due")
3133
self.assertNotEqual(status_paid, "due")
34+
35+
def test_delete_ticket_holders_with_no_order_id(self):
36+
"""Method to test deleting ticket holders with no order id after expiry time"""
37+
38+
with app.test_request_context():
39+
attendee = AttendeeFactory()
40+
db.session.commit()
41+
attendee_id = attendee.id
42+
delete_ticket_holders_no_order_id()
43+
ticket_holder = TicketHolder.query.get(attendee_id)
44+
self.assertIs(ticket_holder, None)
45+
46+
def test_delete_ticket_holder_created_currently(self):
47+
"""Method to test not deleting ticket holders with no order id but created within expiry time"""
48+
49+
with app.test_request_context():
50+
attendee = AttendeeFactory(created_at=datetime.datetime.utcnow(),
51+
modified_at=datetime.datetime.utcnow())
52+
53+
db.session.commit()
54+
attendee_id = attendee.id
55+
delete_ticket_holders_no_order_id()
56+
ticket_holder = TicketHolder.query.get(attendee_id)
57+
self.assertIsNot(ticket_holder, None)
58+
59+
def test_delete_ticket_holder_with_valid_order_id(self):
60+
"""Method to test not deleting ticket holders with order id after expiry time"""
61+
62+
with app.test_request_context():
63+
attendee = AttendeeFactory(order_id=1, ticket_id=1,
64+
created_at=datetime.datetime.utcnow() -
65+
datetime.timedelta(minutes=15),
66+
modified_at=datetime.datetime.utcnow() -
67+
datetime.timedelta(minutes=15))
68+
69+
db.session.commit()
70+
attendee_id = attendee.id
71+
delete_ticket_holders_no_order_id()
72+
ticket_holder = TicketHolder.query.get(attendee_id)
73+
self.assertIsNot(ticket_holder, None)

0 commit comments

Comments
 (0)