File tree Expand file tree Collapse file tree 4 files changed +93
-1
lines changed
Expand file tree Collapse file tree 4 files changed +93
-1
lines changed Original file line number Diff line number Diff line change 11import nock from 'nock'
22import { Client } from '../../Client'
33import {
4+ mockAddServicesRequest ,
45 mockCreateOrderRequest ,
56 mockOnHoldOrders ,
67 mockOrder ,
8+ mockServices ,
79} from './mockOrders'
810import { Orders } from './Orders'
911
@@ -168,4 +170,28 @@ describe('Orders', () => {
168170 1
169171 )
170172 } )
173+
174+ test ( 'should get available services for an order' , async ( ) => {
175+ nock ( / ( .* ) / )
176+ . get ( `/air/orders/${ mockOrder . id } /available_services` )
177+ . reply ( 200 , { data : mockServices } )
178+
179+ const response = await new Orders (
180+ new Client ( { token : 'mockToken' } )
181+ ) . getAvailableServices ( mockOrder . id )
182+
183+ expect ( response . data [ 0 ] . id ) . toBe ( mockServices [ 0 ] . id )
184+ } )
185+
186+ test ( 'should add services to an order' , async ( ) => {
187+ nock ( / ( .* ) / )
188+ . post ( `/air/orders/${ mockOrder . id } /services` )
189+ . reply ( 200 , { data : { ...mockOrder , services : mockServices } } )
190+
191+ const response = await new Orders (
192+ new Client ( { token : 'mockToken' } )
193+ ) . addServices ( mockOrder . id , mockAddServicesRequest )
194+
195+ expect ( response . data . services [ 0 ] . id ) . toBe ( mockServices [ 0 ] . id )
196+ } )
171197} )
Original file line number Diff line number Diff line change 11import { Resource } from '../../Resource'
22import {
3+ AddServices ,
34 CreateOrder ,
45 DuffelResponse ,
56 ListParamsOrders ,
67 Order ,
8+ OrderAvailableService ,
79 PaginationMeta ,
810 UpdateSingleOrder ,
911} from '../../types'
@@ -74,4 +76,32 @@ export class Orders extends Resource {
7476 data : { options } ,
7577 } )
7678 }
79+
80+ /**
81+ * Retrieves the available services for an order by its ID
82+ * @param {string } id - Duffel's unique identifier for the order
83+ */
84+ public getAvailableServices = async (
85+ id : string
86+ ) : Promise < DuffelResponse < OrderAvailableService [ ] > > =>
87+ this . request ( {
88+ method : 'GET' ,
89+ path : `${ this . path } /${ id } /available_services` ,
90+ } )
91+
92+ /**
93+ * Adds services for an order by its ID
94+ * @param {string } id - Duffel's unique identifier for the order
95+ * @param {Object.AddServices } options
96+ * @link https://duffel.com/docs/api/orders/create-order-services
97+ */
98+ public addServices = async (
99+ id : string ,
100+ options : AddServices
101+ ) : Promise < DuffelResponse < Order > > =>
102+ this . request ( {
103+ method : 'POST' ,
104+ path : `${ this . path } /${ id } /services` ,
105+ data : { options } ,
106+ } )
77107}
Original file line number Diff line number Diff line change 77 DuffelPassengerType ,
88 FlightsConditions ,
99 LoyaltyProgrammeAccount ,
10+ OfferAvailableService ,
1011 OfferAvailableServiceBaggageMetadata ,
1112 PassengerIdentityDocumentType ,
1213 PaymentType ,
@@ -561,3 +562,10 @@ export interface ListParamsOrders {
561562export interface UpdateSingleOrder {
562563 metadata : Order [ 'metadata' ]
563564}
565+
566+ export interface AddServices {
567+ payments : OrderPayment [ ]
568+ add_services : Pick < OrderService , 'id' | 'quantity' > [ ]
569+ }
570+
571+ export type OrderAvailableService = OfferAvailableService
Original file line number Diff line number Diff line change 1- import { CreateOrder , Order } from '../../types'
1+ import {
2+ AddServices ,
3+ CreateOrder ,
4+ Order ,
5+ OrderAvailableService ,
6+ } from '../../types'
27
38export const mockCreateOrderRequest : CreateOrder = {
49 type : 'instant' ,
@@ -568,3 +573,26 @@ export const mockOnHoldOrders: Order[] = [
568573 base_amount : '93.00' ,
569574 } ,
570575]
576+
577+ export const mockServices : OrderAvailableService [ ] = [
578+ {
579+ type : 'baggage' ,
580+ total_currency : 'GBP' ,
581+ total_amount : '15.00' ,
582+ segment_ids : [ 'seg_00009hj8USM7Ncg31cB456' ] ,
583+ passenger_ids : [ 'pas_00009hj8USM7Ncg31cBCLL' ] ,
584+ maximum_quantity : 1 ,
585+ id : 'aso_00009UhD4ongolulWd9123' ,
586+ } ,
587+ ]
588+
589+ export const mockAddServicesRequest : AddServices = {
590+ payments : [
591+ {
592+ type : 'balance' ,
593+ currency : 'GBP' ,
594+ amount : '30.20' ,
595+ } ,
596+ ] ,
597+ add_services : [ { id : 'aso_00009UhD4ongolulWd9123' , quantity : 1 } ] ,
598+ }
You can’t perform that action at this time.
0 commit comments