Skip to content
This repository was archived by the owner on Sep 12, 2024. It is now read-only.

Commit dd76731

Browse files
authored
Merge pull request #45 from duffelhq/order-handle-null-seat-details
Handle null seat details for passengers in an `Order`
2 parents 7393dbc + eca8f04 commit dd76731

File tree

3 files changed

+34
-11
lines changed

3 files changed

+34
-11
lines changed

duffel_api/models/order.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ def __init__(self, json):
125125
if key == "baggages":
126126
value = [OrderSliceSegmentPassengerBaggage(v) for v in value]
127127
elif key == "seat":
128-
value = OrderSliceSegmentPassengerSeat(value)
128+
if value is not None:
129+
value = OrderSliceSegmentPassengerSeat(value)
129130
elif key == "cabin_class":
130131
if value not in OrderSliceSegmentPassenger.allowed_cabin_classes:
131132
raise OrderSliceSegmentPassenger.InvalidCabinClass(value)

tests/fixtures/get-orders.json

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -236,14 +236,7 @@
236236
"cabin_class": "economy",
237237
"cabin_class_marketing_name": "Economy Basic",
238238
"passenger_id": "passenger_0",
239-
"seat": {
240-
"designator": "14B",
241-
"disclosures": [
242-
"Do not seat children in exit row seats",
243-
"Do not seat passengers with special needs in exit row seats"
244-
],
245-
"name": "Exit row seat"
246-
}
239+
"seat": null
247240
}
248241
]
249242
}

tests/test_orders.py

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,30 @@ def test_get_order_by_id(requests_mock):
1111
with fixture("get-order-by-id", url, requests_mock.get, 200) as client:
1212
order = client.orders.get("id")
1313
assert order.id == "ord_00009hthhsUZ8W4LxQgkjo"
14+
assert not order.live_mode
15+
assert len(order.passengers) == 1
1416
assert order.synced_at == datetime.datetime(2020, 4, 11, 15, 48, 11)
1517
assert len(order.slices) == 1
16-
assert len(order.passengers) == 1
17-
assert not order.live_mode
1818
slice = order.slices[0]
1919
assert slice.origin_type == "airport"
20+
assert len(order.slices[0].segments) == 1
21+
assert len(order.slices[0].segments[0].passengers) == 1
22+
passenger = order.slices[0].segments[0].passengers[0]
23+
assert len(passenger.baggages) == 1
24+
assert passenger.baggages[0].quantity == 1
25+
assert passenger.baggages[0].type == "checked"
26+
assert passenger.cabin_class == "economy"
27+
assert passenger.cabin_class_marketing_name == "Economy Basic"
28+
assert passenger.passenger_id == "passenger_0"
29+
assert passenger.seat is not None
30+
assert passenger.seat.designator == "14B"
31+
assert len(passenger.seat.disclosures) == 2
32+
assert passenger.seat.disclosures[0] == "Do not seat children in exit row seats"
33+
assert (
34+
passenger.seat.disclosures[1]
35+
== "Do not seat passengers with special needs in exit row seats"
36+
)
37+
assert passenger.seat.name == "Exit row seat"
2038

2139

2240
def test_get_orders(requests_mock):
@@ -37,6 +55,17 @@ def test_get_orders(requests_mock):
3755
assert len(orders) == 1
3856
order = orders[0]
3957
assert order.id == "ord_00009hthhsUZ8W4LxQgkjo"
58+
assert len(order.slices) == 1
59+
assert len(order.slices[0].segments) == 1
60+
assert len(order.slices[0].segments[0].passengers) == 1
61+
passenger = order.slices[0].segments[0].passengers[0]
62+
assert len(passenger.baggages) == 1
63+
assert passenger.baggages[0].quantity == 1
64+
assert passenger.baggages[0].type == "checked"
65+
assert passenger.cabin_class == "economy"
66+
assert passenger.cabin_class_marketing_name == "Economy Basic"
67+
assert passenger.passenger_id == "passenger_0"
68+
assert passenger.seat is None
4069
assert order.synced_at == datetime.datetime(2020, 4, 11, 15, 48, 11)
4170

4271

0 commit comments

Comments
 (0)