From 689a0ade93024f0474f50e1cf792eb9c0cbf78ed Mon Sep 17 00:00:00 2001 From: Matthew Plumeridge Date: Mon, 22 Nov 2021 16:40:17 +0000 Subject: [PATCH 1/2] feat(booking): create test for offer passenger data --- src/booking/Offers/OfferTypes.ts | 26 ++++++++++++++++++++++++++ src/booking/Offers/Offers.spec.ts | 15 +++++++++++++++ src/booking/Offers/mockOffer.ts | 8 ++++++++ src/booking/Orders/Orders.spec.ts | 15 +++++++++++++++ src/booking/Orders/OrdersTypes.ts | 6 ++++++ src/booking/Orders/mockOrders.ts | 6 ++++++ 6 files changed, 76 insertions(+) diff --git a/src/booking/Offers/OfferTypes.ts b/src/booking/Offers/OfferTypes.ts index e8053f2b..cf5502bd 100644 --- a/src/booking/Offers/OfferTypes.ts +++ b/src/booking/Offers/OfferTypes.ts @@ -1,6 +1,7 @@ import { CabinClass, FlightsConditions, + LoyaltyProgrammeAccount, PassengerIdentityDocumentType, Place, PlaceType, @@ -244,6 +245,31 @@ export interface OfferPassenger { */ type?: 'adult' + /** + * The passenger's family name. Only `space`, `-`, `'`, and letters from the `ASCII`, `Latin-1 Supplement` and `Latin + * Extended-A` (with the exceptions of `Æ`, `æ`, `IJ`, `ij`, `Œ`, `œ`, `Þ`, , and `ð`) Unicode charts are accepted. All + * other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 + * characters. + * + * This is only required if you're also including **Loyalty Programme Accounts**. + */ + family_name?: string + + /** + * The passenger's given name. Only `space`, `-`, `'`, and letters from the `ASCII`, `Latin-1 Supplement` and `Latin + * Extended-A` (with the exceptions of `Æ`, `æ`, `IJ`, `ij`, `Œ`, `œ`, `Þ`, , and `ð`) Unicode charts are accepted. All + * other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 + * characters. + * + * This is only required if you're also including **Loyalty Programme Accounts**. + */ + given_name?: string + + /** + * The **Loyalty Programme Accounts** for this passenger. + */ + loyalty_programme_accounts?: LoyaltyProgrammeAccount[] + /** * The identifier for the passenger, unique within this Offer Request and across all Offer Requests. * This ID will be generated by Duffel unless you had optionally provided one. diff --git a/src/booking/Offers/Offers.spec.ts b/src/booking/Offers/Offers.spec.ts index dc3aab76..6c8c80df 100644 --- a/src/booking/Offers/Offers.spec.ts +++ b/src/booking/Offers/Offers.spec.ts @@ -94,4 +94,19 @@ describe('offers', () => { }) expect(response.data?.id).toBe('pas_00009hj8USM7Ncg31cBCL') }) + + test('should get offer passenger with loyalty programme details', async () => { + nock(/(.*)/) + .get(`/air/offers/${mockOffer.id}`) + .reply(200, { data: mockOffer }) + + const response = await new Offers(new Client({ token: 'mockToken' })).get( + mockOffer.id + ) + + expect(response.data.passengers[0].id).toBe('pas_00009hj8USM7Ncg31cBCL') + expect(response.data.passengers[0].loyalty_programme_accounts).toHaveLength( + 1 + ) + }) }) diff --git a/src/booking/Offers/mockOffer.ts b/src/booking/Offers/mockOffer.ts index 0f51f5bd..44f4abcc 100644 --- a/src/booking/Offers/mockOffer.ts +++ b/src/booking/Offers/mockOffer.ts @@ -145,6 +145,14 @@ export const mockOffer: Offer = { type: 'adult', id: 'pas_00009hj8USM7Ncg31cBCL', age: 14, + given_name: 'Carol', + family_name: 'Danvers', + loyalty_programme_accounts: [ + { + account_number: '12901014', + airline_iata_code: 'BA', + }, + ], }, ], passenger_identity_documents_required: false, diff --git a/src/booking/Orders/Orders.spec.ts b/src/booking/Orders/Orders.spec.ts index d1913ca9..0033bfe6 100644 --- a/src/booking/Orders/Orders.spec.ts +++ b/src/booking/Orders/Orders.spec.ts @@ -153,4 +153,19 @@ describe('Orders', () => { ).update(mockOrder.id, { metadata }) expect(response.data?.id).toBe(mockOrder.id) }) + + test('should get order passenger with loyalty programme details', async () => { + nock(/(.*)/) + .get(`/air/orders/${mockOrder.id}`) + .reply(200, { data: mockOrder }) + + const response = await new Orders(new Client({ token: 'mockToken' })).get( + mockOrder.id + ) + + expect(response.data.passengers[0].id).toBe('pas_00009hj8USM7Ncg31cBCL') + expect(response.data.passengers[0].loyalty_programme_accounts).toHaveLength( + 1 + ) + }) }) diff --git a/src/booking/Orders/OrdersTypes.ts b/src/booking/Orders/OrdersTypes.ts index c2d82409..880a0cd7 100644 --- a/src/booking/Orders/OrdersTypes.ts +++ b/src/booking/Orders/OrdersTypes.ts @@ -6,6 +6,7 @@ import { DuffelPassengerTitle, DuffelPassengerType, FlightsConditions, + LoyaltyProgrammeAccount, OfferAvailableServiceBaggageMetadata, PassengerIdentityDocumentType, PaymentType, @@ -159,6 +160,11 @@ export interface OrderPassenger { * @return "adult", "child", or "infant_without_seat" */ infant_passenger_id?: string | null + + /** + * The **Loyalty Programme Accounts** for this passenger. + */ + loyalty_programme_accounts?: LoyaltyProgrammeAccount[] } export interface OrderPassengerIdentityDocument { diff --git a/src/booking/Orders/mockOrders.ts b/src/booking/Orders/mockOrders.ts index e42bb0df..1d8a6bbb 100644 --- a/src/booking/Orders/mockOrders.ts +++ b/src/booking/Orders/mockOrders.ts @@ -206,6 +206,12 @@ export const mockOrder: Order = { gender: 'f', family_name: 'Earhart', born_on: '1987-07-24', + loyalty_programme_accounts: [ + { + airline_iata_code: 'BA', + account_number: '12901014', + }, + ], }, ], owner: { From b6e351ad6393faac1de3cee251da74a24f5dc388 Mon Sep 17 00:00:00 2001 From: Matthew Plumeridge Date: Mon, 22 Nov 2021 16:41:56 +0000 Subject: [PATCH 2/2] fix(orders): fix test passenger id --- src/booking/Orders/Orders.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/booking/Orders/Orders.spec.ts b/src/booking/Orders/Orders.spec.ts index 0033bfe6..10191c3b 100644 --- a/src/booking/Orders/Orders.spec.ts +++ b/src/booking/Orders/Orders.spec.ts @@ -163,7 +163,7 @@ describe('Orders', () => { mockOrder.id ) - expect(response.data.passengers[0].id).toBe('pas_00009hj8USM7Ncg31cBCL') + expect(response.data.passengers[0].id).toBe('pas_00009hj8USM7Ncg31cBCLL') expect(response.data.passengers[0].loyalty_programme_accounts).toHaveLength( 1 )