Skip to content

Commit 759bdb1

Browse files
authored
Merge pull request #195 from amadeus4dev/transfer
Add Cars & Transfers APIs
2 parents b96d942 + 766ae96 commit 759bdb1

File tree

12 files changed

+235
-5
lines changed

12 files changed

+235
-5
lines changed

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,16 @@ amadeus.dutyOfCare.diseases.covid19Report.get({
542542
language: 'EN'
543543
});
544544

545+
//Cars & Transfers APIs
546+
// Transfer Search API: Search Transfer
547+
amadeus.shopping.transferOffers.post(JSON.stringify(body));
548+
549+
// Transfer Book API: Book a transfer based on the offer id
550+
amadeus.ordering.transferOrders.post(JSON.stringify(body),offerId='2094123123');
551+
552+
// Transfer Management API: Cancel a transfer based on the order id & confirmation number
553+
amadeus.ordering.transferOrder('XXX').transfers.cancellation.post(JSON.stringify({}), confirmNbr='12345');
554+
545555
```
546556
547557
## Development & Contributing

spec/amadeus/namespaces.test.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ describe('Namespaces', () => {
7272
expect(amadeus.shopping.availability).toBeDefined();
7373
expect(amadeus.shopping.availability.flightAvailabilities).toBeDefined();
7474

75+
expect(amadeus.shopping.transferOffers).toBeDefined();
76+
7577
expect(amadeus.booking.flightOrder).toBeDefined();
7678
expect(amadeus.booking.hotelBookings).toBeDefined();
7779

@@ -81,6 +83,10 @@ describe('Namespaces', () => {
8183
expect(amadeus.media).toBeDefined();
8284
expect(amadeus.media.files).toBeDefined();
8385

86+
expect(amadeus.ordering).toBeDefined();
87+
expect(amadeus.ordering.transferOrders).toBeDefined();
88+
expect(amadeus.ordering.transferOrder('XXX').transfers.cancellation).toBeDefined();
89+
8490
expect(amadeus.airport).toBeDefined();
8591
expect(amadeus.airport.directDestinations).toBeDefined();
8692
expect(amadeus.airport.predictions).toBeDefined();
@@ -165,6 +171,9 @@ describe('Namespaces', () => {
165171
expect(amadeus.shopping.flightOffers.pricing.post).toBeDefined();
166172
expect(amadeus.shopping.seatmaps.post).toBeDefined();
167173
expect(amadeus.booking.hotelBookings.post).toBeDefined();
174+
expect(amadeus.shopping.transferOffers.post).toBeDefined();
175+
expect(amadeus.ordering.transferOrders.post).toBeDefined();
176+
expect(amadeus.ordering.transferOrder('XXX').transfers.cancellation.post).toBeDefined();
168177
});
169178

170179
it('should define all expected .delete methods', () => {
@@ -537,5 +546,26 @@ describe('Namespaces', () => {
537546
.toHaveBeenCalledWith('/v1/airline/destinations', {});
538547
});
539548

549+
it('.amadeus.shopping.transferOffers.post', () => {
550+
amadeus.client.post = jest.fn();
551+
amadeus.shopping.transferOffers.post();
552+
expect(amadeus.client.post)
553+
.toHaveBeenCalledWith('/v1/shopping/transfer-offers', {});
554+
});
555+
556+
it('.amadeus.ordering.transferOrders.post', () => {
557+
amadeus.client.post = jest.fn();
558+
amadeus.ordering.transferOrders.post({}, '1234123123');
559+
expect(amadeus.client.post)
560+
.toHaveBeenCalledWith('/v1/ordering/transfer-orders?offerId=1234123123', {});
561+
});
562+
563+
it('.amadeus.ordering.transferOrders().transfers.cancellation.post', () => {
564+
amadeus.client.post = jest.fn();
565+
amadeus.ordering.transferOrder('XXX').transfers.cancellation.post({}, 12345);
566+
expect(amadeus.client.post)
567+
.toHaveBeenCalledWith('/v1/ordering/transfer-orders/XXX/transfers/cancellation?confirmNbr=12345', {});
568+
});
569+
540570
});
541571
});

src/amadeus.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Booking from './amadeus/namespaces/booking';
77
import Travel from './amadeus/namespaces/travel';
88
import EReputation from './amadeus/namespaces/e_reputation';
99
import Media from './amadeus/namespaces/media';
10+
import Ordering from './amadeus/namespaces/ordering';
1011
import Airport from './amadeus/namespaces/airport';
1112
import Safety from './amadeus/namespaces/safety';
1213
import Schedule from './amadeus/namespaces/schedule';
@@ -72,6 +73,7 @@ class Amadeus {
7273
this.travel = new Travel(this.client);
7374
this.eReputation = new EReputation(this.client);
7475
this.media = new Media(this.client);
76+
this.ordering = new Ordering(this.client);
7577
this.airport = new Airport(this.client);
7678
this.pagination = new Pagination(this.client);
7779
this.safety = new Safety(this.client);

src/amadeus/namespaces/ordering.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import TransferOrders from './ordering/transfer_orders';
2+
import TransferOrder from './ordering/transfer_order';
3+
4+
/**
5+
* A namespaced client for the
6+
* `/v1/ordering` endpoints
7+
*
8+
* Access via the {@link Amadeus} object
9+
*
10+
* ```js
11+
* let amadeus = new Amadeus();
12+
* amadeus.ordering;
13+
* ```
14+
*
15+
* @param {Client} client
16+
* @property {TransferOrders} transferOrders
17+
* @property {TransferOrder} transferOrder
18+
*/
19+
class Ordering {
20+
constructor(client) {
21+
this.client = client;
22+
this.transferOrders = new TransferOrders(client);
23+
this.transferOrder = (orderId) => new TransferOrder(client, orderId);
24+
}
25+
}
26+
27+
export default Ordering;
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import Transfers from './transfer_orders/transfers';
2+
3+
/**
4+
* A namespaced client for the
5+
* `/v1/ordering/transfer-orders/XXXXX` endpoints
6+
*
7+
* Access via the {@link Amadeus} object
8+
*
9+
* ```js
10+
* let amadeus = new Amadeus();
11+
* amadeus.ordering.transferOrder('XXX');
12+
* ```
13+
*
14+
* @param {Client} client
15+
* @param {string} orderId
16+
*/
17+
class TransferOrder {
18+
constructor(client, orderId) {
19+
this.client = client;
20+
this.orderId = orderId;
21+
this.transfers = new Transfers(client, orderId);
22+
}
23+
}
24+
25+
export default TransferOrder;
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/**
2+
* A namespaced client for the
3+
* `/v1/ordering/transfer-orders` endpoints
4+
*
5+
* Access via the {@link Amadeus} object
6+
*
7+
* ```js
8+
* let amadeus = new Amadeus();
9+
* amadeus.ordering.transferOrders;
10+
* ```
11+
*
12+
* @param {Client} client
13+
*/
14+
class TransferOrders {
15+
constructor(client) {
16+
this.client = client;
17+
18+
}
19+
20+
/**
21+
* To book the selected transfer-offer and create a transfer-order
22+
*
23+
* @return {Promise.<Response,ResponseError>} a Promise
24+
*
25+
* To book the transfer-offer(s) suggested by transferOffers and create a transfer-order
26+
*
27+
* ```js
28+
* amadeus.ordering.transferOrders.post(body, '2094123123');;
29+
* ```
30+
*/
31+
post(body, offerId) {
32+
return this.client.post(`/v1/ordering/transfer-orders?offerId=${offerId}`, body);
33+
}
34+
}
35+
36+
export default TransferOrders;
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import Cancellation from './transfers/cancellation';
2+
3+
/**
4+
* A namespaced client for the
5+
* `/v1/ordering/transfer-orders/XXXXX/transfers` endpoints
6+
*
7+
* Access via the {@link Amadeus} object
8+
*
9+
* ```js
10+
* let amadeus = new Amadeus();
11+
* amadeus.ordering.transferOrders('XXX').transfers;
12+
* ```
13+
*
14+
* @param {Client} client
15+
*/
16+
class Transfers {
17+
constructor(client, orderId) {
18+
this.client = client;
19+
this.orderId = orderId;
20+
this.cancellation = new Cancellation(client, orderId);
21+
}
22+
}
23+
24+
export default Transfers;
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/**
2+
* A namespaced client for the
3+
* `/v1/ordering/transfer-orders/XXX/transfers/cancellation` endpoints
4+
*
5+
* Access via the {@link Amadeus} object
6+
*
7+
* ```js
8+
* let amadeus = new Amadeus();
9+
* amadeus.ordering.transferOrder('XXX').transfers.cancellation.post(JSON.stringify({}), 12345);;
10+
* ```
11+
*
12+
* @param {Client} client
13+
*/
14+
class Cancellation {
15+
constructor(client, orderId) {
16+
this.client = client;
17+
this.orderId = orderId;
18+
}
19+
20+
/**
21+
* To cancel a transfer order based on its id
22+
* @return {Promise.<Response,ResponseError>} a Promise
23+
*
24+
* To cancel a transfer order with ID 'XXX' and confirmation number '12345'
25+
*
26+
* ```js
27+
* amadeus.ordering.transferOrder('XXX').transfers.cancellation.post(JSON.stringify({}), 12345);;
28+
* ```
29+
*/
30+
post(body, confirmNbr) {
31+
return this.client.post(
32+
`/v1/ordering/transfer-orders/${this.orderId}/transfers/cancellation?confirmNbr=${confirmNbr}`, body);
33+
}
34+
}
35+
36+
export default Cancellation;

src/amadeus/namespaces/shopping.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import HotelOffersSearch from './shopping/hotel_offers_search';
88
import Activities from './shopping/activities';
99
import Activity from './shopping/activity';
1010
import Availability from './shopping/availability';
11-
11+
import TransferOffers from './shopping/transfer_offers';
1212

1313
/**
1414
* A namespaced client for the
@@ -30,6 +30,7 @@ import Availability from './shopping/availability';
3030
* @property {HotelOfferSearch} hotelOffers
3131
* @property {HotelOffersSearch} hotelOffers
3232
* @property {Availability} availability
33+
* @property {TransferOffers} transferOffers
3334
*/
3435
class Shopping {
3536
constructor(client) {
@@ -42,6 +43,7 @@ class Shopping {
4243
this.hotelOffersSearch = new HotelOffersSearch(client);
4344
this.activities = new Activities(client);
4445
this.availability = new Availability(client);
46+
this.transferOffers = new TransferOffers(client);
4547
}
4648

4749
/**

src/amadeus/namespaces/shopping/hotel_offer_search.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* @param {Client} client
1313
* @property {number} offerId
1414
*/
15-
class hotelOfferSearch {
15+
class HotelOfferSearch {
1616
constructor(client, offerId) {
1717
this.client = client;
1818
this.offerId = offerId;
@@ -37,4 +37,4 @@ class hotelOfferSearch {
3737
}
3838
}
3939

40-
export default hotelOfferSearch;
40+
export default HotelOfferSearch;

0 commit comments

Comments
 (0)