Skip to content

Commit 78362cf

Browse files
authored
Merge pull request #628 from Travelport-Ukraine/TC-3472
TC-3472 / New option added for availabilty request
2 parents b69cefe + ef4e139 commit 78362cf

File tree

9 files changed

+571
-368
lines changed

9 files changed

+571
-368
lines changed

docs/Air.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ Low Fare Shop functionality combines air availability and a fare quote request t
4848
| maxSolutions | `number` | Maximum number of solutions. <i>Optional.</i> |.
4949
| permittedCarriers | `Array<String>` | Array of carriers' codes. <i>Optional. Can not be used when `preferredCarriers` is set</i> |
5050
| preferredCarriers | `Array<String>` | Array of carriers' codes. <i>Optional. Can not be used when `permittedCarriers` is set</i> |
51-
| allowDirectAccess | `Boolean` | When passed, first carrier is taken from the carriers list and the search is done in carrier specific display.
51+
| allowDirectAccess | `Boolean` | When passed, first carrier is taken from the carriers list and the search is done in carrier specific display. <i>Optional.</i> |
52+
| returnFirstAvailableOnly | `Boolean` | When passed, next days availability is returned if available. <i>Optional.</i> |
5253
| preferredConnectionPoints | `Array<String>` | Array of IATA codes. <i>Optional.</i> |
5354
| prohibitedConnectionPoints | `Array<String>` | Array of IATA codes. <i>Optional.</i> |
5455
| permittedConnectionPoints | `Array<String>` | Array of IATA codes. <i>Optional.</i> |

package-lock.json

Lines changed: 524 additions & 364 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "uapi-json",
3-
"version": "1.14.11",
3+
"version": "1.15.0",
44
"description": "Travelport Universal API",
55
"main": "src/",
66
"files": [

src/Services/Air/AirErrors.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ Object.assign(AirValidationError, createErrorsList({
3939
PlatingCarrierInvalid: 'Plating Carrier Invalid',
4040
SearchIdMissing: 'SearchId is missing',
4141
VersionMissing: 'Version is missing in request',
42+
ReturnFirstAvailableOnlyInvalid: 'Invalid value provided for returnFirstAvailableOnly',
4243
AllowDirectAccessInvalid: 'Invalid value provided for allowDirectAccess',
4344
AllowDirectAccessCarriersNotSpecified: 'Carriers not specified for carrier specific display',
4445
EMDItemNumberMissing: 'Missing EMD number. See data.',

src/Services/Air/AirValidator.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ module.exports = {
88
validators.passengers,
99
validators.legs,
1010
validators.carriers,
11-
validators.allowDirectAccess
11+
validators.allowDirectAccess,
12+
validators.returnFirstAvailableOnly
1213
),
1314
transform(
1415
transformers.convertPassengersObjectToArray

src/Services/Air/templates/AIR_AVAILABILTIY_REQUEST.handlebars.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ module.exports = `
2222
<com:CityOrAirport Code="{{to}}" PreferCity="true"/>
2323
</air:SearchDestination>
2424
<air:SearchDepTime PreferredTime="{{departureDate}}"/>
25-
<air:AirLegModifiers {{#if ../allowDirectAccess}}AllowDirectAccess="true"{{/if}}>
25+
<air:AirLegModifiers
26+
{{#if ../allowDirectAccess}}AllowDirectAccess="true"{{/if}}
27+
{{#if ../returnFirstAvailableOnly}}ReturnFirstAvailableOnly="true"{{/if}}
28+
>
2629
{{#*inline "connectionPoint"}}
2730
<com:ConnectionPoint>
2831
<com:CityOrAirport Code="{{connection}}" />

src/Services/Air/validators/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ const platingCarrier = require('./platingCarrier');
2020
const searchId = require('./search-id');
2121
const version = require('./version');
2222
const allowDirectAccess = require('./allow-direct-access');
23+
const returnFirstAvailableOnly = require('./return-first-available-only');
2324
const emdNumber = require('./emd-number');
2425
const carriers = require('./carriers');
2526

@@ -29,6 +30,7 @@ module.exports = {
2930
pricingSolutionXml,
3031
paramsIsObject,
3132
allowDirectAccess,
33+
returnFirstAvailableOnly,
3234
fop,
3335
fopCreditCard,
3436
pnr,
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const { AirValidationError } = require('../AirErrors');
2+
3+
module.exports = (params) => {
4+
const { returnFirstAvailableOnly } = params;
5+
if (returnFirstAvailableOnly !== undefined && (typeof returnFirstAvailableOnly) !== 'boolean') {
6+
throw new AirValidationError.ReturnFirstAvailableOnlyInvalid(params);
7+
}
8+
};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
const { expect } = require('chai');
2+
const { AirValidationError } = require('../../../src/Services/Air/AirErrors');
3+
const validate = require('../../../src/Services/Air/validators/return-first-available-only');
4+
5+
describe('#Air#validators#return-first-available-only', () => {
6+
it('should throw when returnFirstAvailableOnly invalid type', () => {
7+
const params = { returnFirstAvailableOnly: 'NOT_BOOLEAN' };
8+
try {
9+
validate(params);
10+
throw new Error('PASSED');
11+
} catch (err) {
12+
expect(err).to.be.an.instanceOf(AirValidationError.ReturnFirstAvailableOnlyInvalid);
13+
}
14+
});
15+
it('should not throw when no returnFirstAvailableOnly provided', () => {
16+
const params = {};
17+
validate(params);
18+
});
19+
it('should not throw when returnFirstAvailableOnly is false', () => {
20+
const params = { returnFirstAvailableOnly: false };
21+
validate(params);
22+
});
23+
it('should not throw when returnFirstAvailableOnly is true', () => {
24+
const params = { returnFirstAvailableOnly: true };
25+
validate(params);
26+
});
27+
});

0 commit comments

Comments
 (0)