From 487092df57134ed2236ad1758a9674f845d345cc Mon Sep 17 00:00:00 2001 From: Anthony Roux Date: Thu, 10 Sep 2020 19:04:00 +0200 Subject: [PATCH] Add support for On-Demand Flight Status API (#86) --- README.md | 8 +++++ spec/amadeus/namespaces.test.js | 12 +++++++ src/amadeus.js | 5 ++- src/amadeus/namespaces/schedule.js | 25 +++++++++++++ src/amadeus/namespaces/schedule/flights.js | 42 ++++++++++++++++++++++ 5 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 src/amadeus/namespaces/schedule.js create mode 100644 src/amadeus/namespaces/schedule/flights.js diff --git a/README.md b/README.md index 40a1cd3..f4f1be3 100644 --- a/README.md +++ b/README.md @@ -447,6 +447,14 @@ amadeus.safety.safetyRatedLocations.bySquare.get({ }) // What is the safety information of a location based on it's Id? amadeus.safety.safetyRatedLocation('Q930400801').get() + +// On-Demand Flight Status +// What's the current status of my flight? +amadeus.schedule.flights.get({ + carrierCode: 'AZ', + flightNumber: '319', + scheduledDepartureDate: '2021-03-13' +}) ``` ## Development & Contributing diff --git a/spec/amadeus/namespaces.test.js b/spec/amadeus/namespaces.test.js index d6c9c0c..5615029 100644 --- a/spec/amadeus/namespaces.test.js +++ b/spec/amadeus/namespaces.test.js @@ -28,6 +28,9 @@ describe('Namespaces', () => { expect(amadeus.referenceData.airlines).toBeDefined(); expect(amadeus.referenceData.recommendedLocations).toBeDefined(); + expect(amadeus.schedule).toBeDefined(); + expect(amadeus.schedule.flights).toBeDefined(); + expect(amadeus.travel).toBeDefined(); expect(amadeus.travel.analytics).toBeDefined(); expect(amadeus.travel.analytics.airTraffic).toBeDefined(); @@ -106,6 +109,8 @@ describe('Namespaces', () => { expect(amadeus.booking.flightOrder('XXX').get).toBeDefined(); + expect(amadeus.schedule.flights.get).toBeDefined(); + expect(amadeus.eReputation.hotelSentiments.get).toBeDefined(); expect(amadeus.media.files.generatedPhotos.get).toBeDefined(); @@ -193,6 +198,13 @@ describe('Namespaces', () => { .toHaveBeenCalledWith('/v1/reference-data/airlines', {}); }); + it('.amadeus.schedule.flights.get', () => { + amadeus.client.get = jest.fn(); + amadeus.schedule.flights.get(); + expect(amadeus.client.get) + .toHaveBeenCalledWith('/v2/schedule/flights', {}); + }); + it('.amadeus.travel.analytics.airTraffic.traveled.get', () => { amadeus.client.get = jest.fn(); amadeus.travel.analytics.airTraffic.traveled.get(); diff --git a/src/amadeus.js b/src/amadeus.js index 9151eb3..e4ae78e 100644 --- a/src/amadeus.js +++ b/src/amadeus.js @@ -8,7 +8,9 @@ import Travel from './amadeus/namespaces/travel'; import EReputation from './amadeus/namespaces/e_reputation'; import Media from './amadeus/namespaces/media'; import Airport from './amadeus/namespaces/airport'; -import Safety from './amadeus/namespaces/safety'; +import Safety from './amadeus/namespaces/safety'; +import Schedule from './amadeus/namespaces/schedule'; + /** * The Amadeus client library for accessing the travel APIs. @@ -69,6 +71,7 @@ class Amadeus { this.airport = new Airport(this.client); this.pagination = new Pagination(this.client); this.safety = new Safety(this.client); + this.schedule = new Schedule(this.client); } /** diff --git a/src/amadeus/namespaces/schedule.js b/src/amadeus/namespaces/schedule.js new file mode 100644 index 0000000..43a164b --- /dev/null +++ b/src/amadeus/namespaces/schedule.js @@ -0,0 +1,25 @@ +import Flights from './schedule/flights'; + +/** + * A namespaced client for the + * `/v2/schedule` endpoints + * + * Access via the {Amadeus} object + * + * ```js + * let amadeus = new Amadeus(); + * amadeus.schedule.flights; + * ``` + * + * @param {Client} client + * @property {Flights} flights + * @protected + */ +class Schedule { + constructor(client) { + this.client = client; + this.flights = new Flights(client); + } +} + +export default Schedule; diff --git a/src/amadeus/namespaces/schedule/flights.js b/src/amadeus/namespaces/schedule/flights.js new file mode 100644 index 0000000..a6422dd --- /dev/null +++ b/src/amadeus/namespaces/schedule/flights.js @@ -0,0 +1,42 @@ +/** + * A namespaced client for the + * `/v2/schedule/flights` endpoints + * + * Access via the {@link Amadeus} object + * + * ```js + * let amadeus = new Amadeus(); + * amadeus.schedule.flights; + * ``` + * + * @param {Client} client + */ +class Flights { + constructor(client) { + this.client = client; + } + + /** + * Provides real-time flight schedule data including up-to-date departure and arrival times, + * terminal and gate information, flight duration and real-time delay status + * + * @param {Object} params + * @param {Double} params.carrierCode 2 to 3-character IATA carrier code - required + * @param {Double} params.flightNumber 1 to 4-digit number of the flight. e.g. 4537 - required + * @param {Double} params.scheduledDepartureDate scheduled departure date of the flight, local to the departure airport - required + * @return {Promise.} a Promise + * What's the current status of my flight? + * ```js + * amadeus.schedule.flights.get({ + * carrierCode: 'AZ', + * flightNumber: '319', + * scheduledDepartureDate: '2021-03-13' + * }); + * ``` + */ + get(params = {}) { + return this.client.get('/v2/schedule/flights', params); + } +} + +export default Flights;