ti2-ventrata 1.0.5 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/index.js +21 -6
  2. package/index.test.js +20 -20
  3. package/package.json +1 -1
package/index.js CHANGED
@@ -37,6 +37,8 @@ const doMapCurry = mapObj => item => doMap(item, mapObj);
37
37
  const productMapIn = {
38
38
  productId: R.path(['id']),
39
39
  productName: R.path(['title']),
40
+ availableCurrencies: R.path(['availableCurrencies']),
41
+ defaultCurrency: R.path(['defaultCurrency']),
40
42
  options: e => R.pathOr(undefined, ['options'], e).map(option => doMap(option, optionMapIn, ['id', 'title'])),
41
43
  };
42
44
 
@@ -57,6 +59,7 @@ const availabilityMap = {
57
59
  dateTimeEnd: R.path(['localDateTimeEnd']),
58
60
  allDay: R.path(['allDay']),
59
61
  pricing: R.path(['pricing']),
62
+ unitPricing: R.path(['unitPricing']),
60
63
  offer: avail => (avail.offerCode ? doMap(avail, {
61
64
  offerId: R.path(['offerCode']),
62
65
  title: R.pathOr(undefined, ['offerTitle']),
@@ -81,8 +84,9 @@ const capitalize = sParam => {
81
84
  const unitMap = {
82
85
  unitId: R.path(['id']),
83
86
  unitName: R.path(['title']),
87
+ subtitle: R.path(['subtitle']),
84
88
  restrictions: R.path(['restrictions']),
85
- pricing: R.path(['pricing']),
89
+ pricing: root => R.path(['pricing'], root) || R.path(['pricingFrom'], root),
86
90
  };
87
91
 
88
92
  const itineraryMap = {
@@ -103,11 +107,13 @@ const itineraryMap = {
103
107
 
104
108
  const unitItemMap = {
105
109
  unitItemId: R.path(['uuid']),
110
+ unitId: R.path(['unitId']),
111
+ unitName: R.path(['unit', 'title']),
106
112
  supplierId: R.path(['supplierReference']),
107
113
  status: e => capitalize(R.path(['status'], e)),
108
114
  contact: R.path(['contact']),
109
115
  pricing: R.path(['pricing']),
110
- unit: unit => doMap(unit, unitMap),
116
+ unit: root => doMap(root.unit, unitMap),
111
117
  };
112
118
 
113
119
  const contactMapOut = {
@@ -123,11 +129,14 @@ const contactMapOut = {
123
129
 
124
130
  const bookingMap = {
125
131
  id: R.path(['id']),
132
+ orderId: R.path(['orderReference']),
133
+ bookingId: R.path(['supplierReference']),
126
134
  supplierId: R.path(['supplierReference']),
127
135
  status: e => capitalize(R.path(['status'], e)),
128
136
  productId: R.path(['product', 'id']),
129
137
  productName: R.path(['product', 'title']),
130
138
  optionId: R.path(['option', 'id']),
139
+ optionName: R.path(['option', 'title']),
131
140
  itinerary: ({ option: { itinerary } = {} }) =>
132
141
  (isNilOrEmptyArray(itinerary) ? undefined : itinerary.map(doMapCurry(itineraryMap))),
133
142
  duration: booking => doMap(booking, {
@@ -141,7 +150,7 @@ const bookingMap = {
141
150
  start: R.path(['availability', 'localDateTimeStart']),
142
151
  end: R.path(['availability', 'localDateTimeEnd']),
143
152
  allDay: R.path(['availability', 'allDay']),
144
- bookingDate: R.path(['hotel', 'utcCreatedAt']),
153
+ bookingDate: R.path(['utcCreatedAt']),
145
154
  holder: booking => doMap(R.path(['contact'], booking), contactMapOut),
146
155
  telephone: R.pathOr(undefined, ['contact', 'phoneNumber']),
147
156
  notes: R.pathOr(undefined, ['notes']),
@@ -210,7 +219,10 @@ class Plugin {
210
219
  if (Object.keys(extraFilters).length > 0) {
211
220
  products = products.filter(
212
221
  product => Object.entries(extraFilters).every(
213
- ([key, value]) => wildcardMatch(value, product[key]),
222
+ ([key, value]) => {
223
+ if (typeof value === 'string') return wildcardMatch(value, product[key]);
224
+ return true;
225
+ },
214
226
  ),
215
227
  );
216
228
  }
@@ -276,8 +288,9 @@ class Plugin {
276
288
  optionIds,
277
289
  occupancies,
278
290
  startDate,
279
- // endDate,
291
+ endDate,
280
292
  dateFormat,
293
+ currency,
281
294
  },
282
295
  }) {
283
296
  assert(this.jwtKey, 'JWT secret should be set');
@@ -294,7 +307,7 @@ class Plugin {
294
307
  assert(optionIds.every(Boolean), 'some invalid optionId(s)');
295
308
  assert(occupancies.every(Boolean), 'some invalid occupacies(s)');
296
309
  const localDateStart = moment(startDate, dateFormat).format('YYYY-MM-DD');
297
- const localDateEnd = moment(startDate, dateFormat).format('YYYY-MM-DD');
310
+ const localDateEnd = moment(endDate, dateFormat).format('YYYY-MM-DD');
298
311
  // obtain the rates
299
312
  const { quote } = await this.searchQuote({
300
313
  token,
@@ -320,6 +333,7 @@ class Plugin {
320
333
  optionId: optionIds[rateIx],
321
334
  localDateStart,
322
335
  localDateEnd,
336
+ currency,
323
337
  units: Object.entries(qtys).map(([id, quantity]) => ({
324
338
  id, quantity,
325
339
  })),
@@ -339,6 +353,7 @@ class Plugin {
339
353
  productId: productIds[availsIx],
340
354
  optionId: optionIds[availsIx],
341
355
  availabilityId: avail.id,
356
+ currency,
342
357
  unitItems: rates[availsIx].map(rate => ({ unitId: rate })),
343
358
  }), this.jwtKey),
344
359
  ...doMap(avail, availabilityMap),
package/index.test.js CHANGED
@@ -10,13 +10,13 @@ const app = new Plugin({
10
10
  jwtKey: process.env.ti2_ventrata_jwtKey,
11
11
  });
12
12
 
13
- const rnd = (arr) => arr[Math.floor(Math.random() * arr.length)];
13
+ const rnd = arr => arr[Math.floor(Math.random() * arr.length)];
14
14
 
15
15
  describe('search tests', () => {
16
16
  let products;
17
17
  let testProduct = {
18
18
  productName: 'Pub Crawl Tour',
19
- }
19
+ };
20
20
  const token = {
21
21
  apiKey: process.env.ti2_ventrata_apiKey,
22
22
  endpoint: process.env.ti2_ventrata_endpoint,
@@ -74,7 +74,7 @@ describe('search tests', () => {
74
74
  token,
75
75
  payload: {
76
76
  productId: testProduct.productId,
77
- }
77
+ },
78
78
  });
79
79
  expect(Array.isArray(retVal.products)).toBeTruthy();
80
80
  expect(retVal.products).toHaveLength(1);
@@ -181,7 +181,7 @@ describe('search tests', () => {
181
181
  phoneNumber: faker.phone.phoneNumber(),
182
182
  emailAddress: `salvador+tests_${faker.lorem.slug()}@tourconnect.com`,
183
183
  country: faker.address.countryCode(),
184
- locales:  ['en-US', 'en', 'es'],
184
+ locales: ['en-US', 'en', 'es'],
185
185
  },
186
186
  reference,
187
187
  },
@@ -189,9 +189,9 @@ describe('search tests', () => {
189
189
  expect(retVal.booking).toBeTruthy();
190
190
  ({ booking } = retVal);
191
191
  expect(booking).toBeTruthy();
192
- expect(R.path(['id'], booking)).toBeTruthy()
193
- expect(R.path(['supplierId'], booking)).toBeTruthy()
194
- expect(R.path(['cancellable'], booking)).toBeTruthy()
192
+ expect(R.path(['id'], booking)).toBeTruthy();
193
+ expect(R.path(['supplierId'], booking)).toBeTruthy();
194
+ expect(R.path(['cancellable'], booking)).toBeTruthy();
195
195
  // console.log({ booking });
196
196
  });
197
197
  it('should be able to cancel the booking', async () => {
@@ -200,13 +200,13 @@ describe('search tests', () => {
200
200
  payload: {
201
201
  bookingId: booking.id,
202
202
  reason: faker.lorem.paragraph(),
203
- }
203
+ },
204
204
  });
205
- ({ cancellation } = retVal);
205
+ const { cancellation } = retVal;
206
206
  expect(cancellation).toBeTruthy();
207
207
  expect(cancellation).toBeTruthy();
208
- expect(R.path(['id'], cancellation)).toBeTruthy()
209
- expect(R.path(['cancellable'], cancellation)).toBeFalsy()
208
+ expect(R.path(['id'], cancellation)).toBeTruthy();
209
+ expect(R.path(['cancellable'], cancellation)).toBeFalsy();
210
210
  });
211
211
  let bookings = [];
212
212
  it('it should be able to search bookings by id', async () => {
@@ -214,33 +214,33 @@ describe('search tests', () => {
214
214
  token,
215
215
  payload: {
216
216
  bookingId: booking.id,
217
- }
217
+ },
218
218
  });
219
219
  expect(Array.isArray(retVal.bookings)).toBeTruthy();
220
220
  ({ bookings } = retVal);
221
- expect(R.path([0, 'id'], bookings)).toBeTruthy()
221
+ expect(R.path([0, 'id'], bookings)).toBeTruthy();
222
222
  });
223
223
  it('it should be able to search bookings by reference', async () => {
224
224
  const retVal = await app.searchBooking({
225
225
  token,
226
226
  payload: {
227
227
  bookingId: reference,
228
- }
228
+ },
229
229
  });
230
230
  expect(Array.isArray(retVal.bookings)).toBeTruthy();
231
231
  ({ bookings } = retVal);
232
- expect(R.path([0, 'id'], bookings)).toBeTruthy()
232
+ expect(R.path([0, 'id'], bookings)).toBeTruthy();
233
233
  });
234
234
  it('it should be able to search bookings by supplierId', async () => {
235
235
  const retVal = await app.searchBooking({
236
236
  token,
237
237
  payload: {
238
238
  bookingId: booking.supplierId,
239
- }
239
+ },
240
240
  });
241
241
  expect(Array.isArray(retVal.bookings)).toBeTruthy();
242
242
  ({ bookings } = retVal);
243
- expect(R.path([0, 'id'], bookings)).toBeTruthy()
243
+ expect(R.path([0, 'id'], bookings)).toBeTruthy();
244
244
  });
245
245
  it('it should be able to search bookings by travelDate', async () => {
246
246
  const retVal = await app.searchBooking({
@@ -249,11 +249,11 @@ describe('search tests', () => {
249
249
  travelDateStart: moment().add(6, 'M').format(dateFormat),
250
250
  travelDateEnd: moment().add(6, 'M').add(2, 'd').format(dateFormat),
251
251
  dateFormat,
252
- }
252
+ },
253
253
  });
254
254
  expect(Array.isArray(retVal.bookings)).toBeTruthy();
255
255
  ({ bookings } = retVal);
256
- expect(R.path([0, 'id'], bookings)).toBeTruthy()
256
+ expect(R.path([0, 'id'], bookings)).toBeTruthy();
257
257
  });
258
- });
258
+ });
259
259
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ti2-ventrata",
3
- "version": "1.0.5",
3
+ "version": "1.0.8",
4
4
  "description": "Ventrata's TI2 Plugin",
5
5
  "main": "index.js",
6
6
  "scripts": {