Skip to content

Commit

Permalink
master CTD-2090 added additional fields to ticket
Browse files Browse the repository at this point in the history
  • Loading branch information
tom committed May 20, 2022
1 parent 175e8ce commit 7df6095
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 12 deletions.
15 changes: 10 additions & 5 deletions livestyled/models/ticket.py
Expand Up @@ -54,7 +54,8 @@ def __init__(
ticket_auth=None,
event_date=None,
currency=None,
external_card_ref=None
external_card_ref=None,
additional_fields=None
):
self.id = id
self.external_ticket_id = external_ticket_id
Expand Down Expand Up @@ -161,6 +162,7 @@ def __init__(
self.currency = Currency(**currency)
else:
self.currency = None
self.additional_fields = additional_fields

@classmethod
def placeholder(
Expand Down Expand Up @@ -212,7 +214,8 @@ def placeholder(
venue=None,
event=None,
currency=None,
external_card_ref=None
external_card_ref=None,
additional_fields=None,
)

@classmethod
Expand Down Expand Up @@ -259,7 +262,8 @@ def create_new(
venue: Venue or str or int or None = None,
event: Event or str or int or None = None,
currency: Currency or None = None,
external_card_ref=None
external_card_ref=None,
additional_fields=None,
):
ticket = Ticket(
id=None,
Expand Down Expand Up @@ -306,7 +310,8 @@ def create_new(
venue=venue,
event=event,
currency=currency,
external_card_ref=external_card_ref
external_card_ref=external_card_ref,
additional_fields=additional_fields
)
if isinstance(user, (str, int)):
user = User.placeholder(id=user)
Expand Down Expand Up @@ -374,7 +379,7 @@ def diff(self, other):
'client_email', 'price', 'status', 'can_share', 'sharer_email', 'redeemed_at', 'redeemer_id', 'share_code',
'redeemer_email', 'parent_ticket', 'shared_at', 'legal_long_text', 'legal_short_text', 'map_url',
'map_image_url', 'ticket_integration', 'entrance', 'row', 'section', 'price_code', 'external_customer_ref',
'venue', 'event', 'event_date', 'currency', 'external_card_ref'
'venue', 'event', 'event_date', 'currency', 'external_card_ref', 'additional_fields'
)
for field in fields:
if getattr(self, field) != getattr(other, field):
Expand Down
12 changes: 10 additions & 2 deletions livestyled/schemas/tests/fixtures/example_ticket.json
Expand Up @@ -38,5 +38,13 @@
"canShare": false,
"app": "/v4/apps/27"
},
"eventDate": "/v4/event_dates/249881"
}
"eventDate": "/v4/event_dates/249881",
"additionalFields": [
{
"name": "name",
"value": "value",
"dataType": "string",
"sort": 0
}
]
}
100 changes: 95 additions & 5 deletions livestyled/schemas/tests/test_ticket.py
@@ -1,5 +1,7 @@
from datetime import datetime, timedelta, timezone
import json
import os
from typing import Dict

from livestyled.schemas.ticket import TicketSchema

Expand Down Expand Up @@ -77,7 +79,15 @@ def test_deserialize_ticket():
'external_movement_id': None,
'currency': 2,
'external_card_ref': None,
'legacy_external_event_id': None
'legacy_external_event_id': None,
'additional_fields': [
{
'name': 'name',
'value': 'value',
'data_type': 'string',
'sort': 0
}
],
}


Expand Down Expand Up @@ -132,7 +142,8 @@ def test_deserialize_ticket_shared():
'external_movement_id': None,
'currency': 2,
'external_card_ref': None,
'legacy_external_event_id': None
'legacy_external_event_id': None,
'additional_fields': None,
}


Expand Down Expand Up @@ -187,7 +198,8 @@ def test_deserialize_ticket_shared_redeemed():
'external_movement_id': None,
'currency': 2,
'external_card_ref': None,
'legacy_external_event_id': None
'legacy_external_event_id': None,
'additional_fields': None
}


Expand Down Expand Up @@ -256,7 +268,8 @@ def test_deserialize_ticket_with_event_and_venue():
'external_movement_id': None,
'currency': 1,
'external_card_ref': None,
'legacy_external_event_id': None
'legacy_external_event_id': None,
'additional_fields': None,
}


Expand Down Expand Up @@ -318,5 +331,82 @@ def test_serialize_ticket():
'externalMovementId': None,
'currency': None,
'externalCardRef': None,
'externalEventId': None
'externalEventId': None,
'additionalFields': None,
}


def test_ticket_diff():
ticket = get_ticket()
ticket2 = get_ticket({
'additionalFields': [
{
'name': 'name',
'value': 'value2',
'dataType': 'string',
'sort': 0
}
]
})
diff = ticket.diff(ticket2)
assert 'additional_fields' in diff


def get_ticket(data: Dict or None = None):
default_ticket = {
'id': 0,
'externalTicketId': '4343',
'seat': '',
'qrCodeUrl': '',
'sessionDate': '2022-05-20T09:30:20+00:00',
'title': '',
'legacyExternalEventId': '',
'externalEventId': '',
'barcode': '',
'sectorName': '',
'venueName': '',
'venueRoom': '',
'clientName': '',
'premium': False,
'clientEmail': '',
'price': 0,
'status': '',
'canShare': False,
'sharerEmail': '',
'redeemedAt': '2022-05-20T09:30:20+00:00',
'createdAt': '2022-05-20T09:30:20+00:00',
'updatedAt': '2022-05-20T09:30:20+00:00',
'shareCode': '',
'redeemerEmail': '',
'parentTicket': None,
'sharedAt': '2022-05-20T09:30:20+00:00',
'legalLongText': '',
'legalShortText': '',
'mapUrl': '',
'mapImageUrl': '',
'ticketIntegration': None,
'entrance': '',
'row': '',
'section': '',
'priceCode': '',
'externalCustomerRef': '',
'venue': None,
'event': None,
'currency': None,
'externalCardRef': '',
'user': None,
'additionalFields': [
{
'name': 'name',
'value': 'value',
'dataType': 'string',
'sort': 0
}
],
}

if data:
default_ticket = {**default_ticket, **data}

ticket = TicketSchema().loads(json.dumps(default_ticket))
return TicketSchema().Meta.model(**ticket)
12 changes: 12 additions & 0 deletions livestyled/schemas/ticket.py
Expand Up @@ -26,6 +26,16 @@ class Meta:
id = fields.Int()


class AdditionalFields(Schema):
class Meta:
unknown = EXCLUDE

name = fields.String(required=True)
value = fields.String(required=True)
data_type = fields.String(data_key='dataType', required=True)
sort = fields.Int(required=True)


class TicketSchema(Schema):
class Meta:
unknown = EXCLUDE
Expand Down Expand Up @@ -86,3 +96,5 @@ class Meta:
venue = RelatedResourceLinkField(schema=VenueSchema, required=False, missing=None)
currency = RelatedResourceLinkField(schema=CurrencySchema, required=False, missing=None)
external_card_ref = fields.String(data_key='externalCardRef', required=False, missing=None)
additional_fields = fields.Nested(AdditionalFields, data_key='additionalFields', allow_none=True, missing=None,
many=True)

0 comments on commit 7df6095

Please sign in to comment.