mts-booking-library 1.3.2 → 1.3.4

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.
File without changes
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ // import { MTSEnvs } from "../config";
3
+ // import { ServiceBooking } from "../booking/serviceBooking";
4
+ // import { CreateServiceCartRequest, ServiceCart } from "../types/services/ServiceCart";
5
+ // import { Service, ServiceTripsResponse } from "../types/services/Service";
6
+ // import { GetBuyerPassengersDetailsResponse } from "../types/common/Person";
7
+ // import { GetPaymentInformationFromGatewayResponse, GetSellerGatewaysResponse, PaymentMethods } from "../types/common/Payment";
8
+ // import { useTestState } from "../mtsStorage";
9
+ // import { SubscriptionBooking } from "../booking/subscriptionBooking";
10
+ // // Load .env file
11
+ // require('dotenv').config();
12
+ // // How to run the test: npm run test -- SubscriptionBooking.test.ts
13
+ // describe("SubscriptionBooking", () => {
14
+ // const timeOut = 120000;
15
+ // const sub_key = process.env.OCP_SUB_KEY_MTS;
16
+ // const access_token = process.env.ACCESS_TOKEN;
17
+ // const sellerId = 8; // ATV
18
+ // // Define localStorage for local testing
19
+ // if (typeof localStorage === "undefined" || localStorage === null) {
20
+ // var LocalStorage = require("node-localstorage").LocalStorage;
21
+ // global.localStorage = new LocalStorage("./scratch");
22
+ // }
23
+ // test("search_tpl", async () => {
24
+ // const booking = new SubscriptionBooking(MTSEnvs.TEST, sub_key!, true, SubscriptionBooking.Languages.EN, access_token, sellerId);
25
+ // // First, get the departures and destinations
26
+ // const departures = await booking.getSubscriptionsDepartures() as string[];
27
+ // expect(departures.length).toBeGreaterThan(0);
28
+ // expect(departures).toContain("BARDOLINO AUTOSTAZIONE");
29
+ // const selectedDeparture = "BARDOLINO AUTOSTAZIONE";
30
+ // const destinations = await booking.getSubscriptionsDestinations(selectedDeparture) as string[];
31
+ // expect(destinations.length).toBeGreaterThan(0);
32
+ // expect(destinations).toContain("GARDA AUTOSTAZIONE");
33
+ // const selectedDestination = "GARDA AUTOSTAZIONE";
34
+ // // Then get the validity types
35
+ // const validityTypes = await booking.getSubscriptionsValidityTypes(selectedDeparture, selectedDestination) as SubscriptionBooking.ValidityTypes[];
36
+ // expect(validityTypes.length).toBeGreaterThan(0);
37
+ // for (const validityType of validityTypes) {
38
+ // // Check that all returned validity types are valid
39
+ // expect(Object.values(SubscriptionBooking.ValidityTypes).includes(validityType)).toBe(true);
40
+ // }
41
+ // }, timeOut);
42
+ // const createCart = async (booking: ServiceBooking): Promise<ServiceCart> => {
43
+ // const servicesResponse = await booking.getServices(ServiceBooking.Currencies.EUR);
44
+ // const services = servicesResponse as Service[];
45
+ // // Build create cart request
46
+ // let tariffsMatrix = services[0].tariffsMatrix;
47
+ // tariffsMatrix[0][0].quantity = 1;
48
+ // const createServiceCartRequest: CreateServiceCartRequest = {
49
+ // currency: ServiceBooking.Currencies.EUR,
50
+ // service: {
51
+ // serviceId: services[0].id,
52
+ // tariffsMatrix: tariffsMatrix
53
+ // }
54
+ // };
55
+ // // Create cart
56
+ // const cart = await booking.createServiceCart(createServiceCartRequest) as ServiceCart;
57
+ // return cart;
58
+ // }
59
+ // test("create_service_cart", async () => {
60
+ // const booking = new ServiceBooking(MTSEnvs.TEST, sub_key!, true, ServiceBooking.Languages.EN);
61
+ // const cart = await createCart(booking);
62
+ // // Check that the cartId was saved to the local storage
63
+ // expect(useTestState().getState().cartId).toBe(cart.id);
64
+ // expect(booking.cartId).toBe(cart.id);
65
+ // // Test the booking status (we test only the Buyer and passenger data, as it will always be required)
66
+ // expect(booking.bookingStepsToStatus.get(ServiceBooking.BookingSteps.BUYER_PASSENGERS)).toStrictEqual([ true, false, true ]);
67
+ // expect(booking.bookingStepsToStatus.get(ServiceBooking.BookingSteps.ISSUE)).toStrictEqual([ false, false, true ]);
68
+ // // Test booking due date
69
+ // expect(booking.bookingDueDate?.toISOString()).toBe(new Date(cart.bookingDueDate).toISOString());
70
+ // // Test expired tickets
71
+ // expect(cart.hasIssuedTickets).toBe(false);
72
+ // // Test seller data
73
+ // expect(booking.getSellerId()).toBe(cart.sellerId);
74
+ // expect(cart.sellerPrivacyUrl.length).toBeGreaterThan(0);
75
+ // expect(cart.sellerTermsUrl.length).toBeGreaterThan(0);
76
+ // // Now try to get the cart
77
+ // const newBooking = await ServiceBooking.createBooking(MTSEnvs.TEST, sub_key!, true, ServiceBooking.Languages.EN);
78
+ // expect(newBooking.cartId).toBe(cart.id);
79
+ // expect(newBooking.getCart()?.id).toBe(cart.id)
80
+ // expect(newBooking.getSellerId()).toBe(cart.sellerId);
81
+ // // Finally try to delete the cart
82
+ // await booking.deleteCart();
83
+ // expect(booking.getCart()).toBe(undefined);
84
+ // expect(useTestState().getState().cartId).toBe(undefined);
85
+ // }, timeOut);
86
+ // test("get_edit_buyer_data", async () => {
87
+ // const booking = new ServiceBooking(MTSEnvs.TEST, sub_key!, true, ServiceBooking.Languages.EN);
88
+ // const cart = await createCart(booking);
89
+ // // First, try to get the buyer data
90
+ // let buyerDataResponse = await booking.getBuyerPassengersDetails();
91
+ // expect((buyerDataResponse as GetBuyerPassengersDetailsResponse).passengers.length).toBe(0);
92
+ // let buyer = (buyerDataResponse as GetBuyerPassengersDetailsResponse).buyer;
93
+ // expect(buyer).toBe(null);
94
+ // // Now try to edit the buyer data
95
+ // buyer = {
96
+ // id: 0,
97
+ // name: "TestName",
98
+ // lastName: "TestSurname",
99
+ // email: "testBookingLib@infos.it",
100
+ // phoneNumber: "+391234567890"
101
+ // }
102
+ // await booking.updateBuyerPassengersDetails(buyer);
103
+ // // Finally, get the buyer data again and check that the data was updated
104
+ // buyerDataResponse = await booking.getBuyerPassengersDetails();
105
+ // const updatedBuyer = (buyerDataResponse as GetBuyerPassengersDetailsResponse).buyer;
106
+ // expect(updatedBuyer.id).toBeGreaterThan(0);
107
+ // expect(updatedBuyer.name).toBe(buyer.name);
108
+ // expect(updatedBuyer.lastName).toBe(buyer.lastName);
109
+ // expect(updatedBuyer.email).toBe(buyer.email);
110
+ // expect(updatedBuyer.phoneNumber).toBe(buyer.phoneNumber);
111
+ // // Finally try to delete the cart
112
+ // await booking.deleteCart();
113
+ // expect(booking.getCart()).toBe(undefined);
114
+ // expect(useTestState().getState().cartId).toBe(undefined);
115
+ // }, timeOut);
116
+ // test("get_gateway_info", async () => {
117
+ // const booking = new ServiceBooking(MTSEnvs.TEST, sub_key!, true, ServiceBooking.Languages.EN);
118
+ // const cart = await createCart(booking);
119
+ // booking.updateSellerId(cart.sellerId);
120
+ // // First, try to get the buyer data
121
+ // let buyerDataResponse = await booking.getBuyerPassengersDetails();
122
+ // expect((buyerDataResponse as GetBuyerPassengersDetailsResponse).passengers.length).toBe(0);
123
+ // let buyer = (buyerDataResponse as GetBuyerPassengersDetailsResponse).buyer;
124
+ // expect(buyer).toBe(null);
125
+ // // Now try to edit the buyer data
126
+ // buyer = {
127
+ // id: 0,
128
+ // name: "TestName",
129
+ // lastName: "TestSurname",
130
+ // email: "testBookingLib@infos.it",
131
+ // phoneNumber: "+391234567890"
132
+ // }
133
+ // await booking.updateBuyerPassengersDetails(buyer);
134
+ // // Try to get the gateways
135
+ // const gateways = await booking.getSellerGateways() as GetSellerGatewaysResponse;
136
+ // if (!gateways.payPalGatewayDTO && !gateways.cardGatewayDTO) {
137
+ // throw new Error("No gateways found");
138
+ // }
139
+ // const gateway = gateways.payPalGatewayDTO ? gateways.payPalGatewayDTO : gateways.cardGatewayDTO;
140
+ // expect(gateway?.id).toBeGreaterThan(0);
141
+ // // Now try to get the info
142
+ // const gatewayInfo = await booking.getPaymentInformationFromGateway(gateway?.id ?? 0) as GetPaymentInformationFromGatewayResponse;
143
+ // // Finally try to delete the cart
144
+ // await booking.deleteCart();
145
+ // expect(booking.getCart()).toBe(undefined);
146
+ // expect(useTestState().getState().cartId).toBe(undefined);
147
+ // }, timeOut);
148
+ // });
@@ -133,11 +133,12 @@ var JourneyBooking = /** @class */ (function (_super) {
133
133
  switch (_a.label) {
134
134
  case 0: return [4 /*yield*/, this.fetchCart(cartId).then(function (cart) {
135
135
  if (cart) {
136
- var cartDate = new Date(cart.bookingDueDate);
137
- if (cartDate > new Date() && !cart.hasIssuedTickets) {
136
+ var cartDueDate = new Date();
137
+ cartDueDate.setSeconds(cartDueDate.getSeconds() + cart.bookingDueDateRemainingSeconds);
138
+ if (cartDueDate > new Date() && !cart.hasIssuedTickets) {
138
139
  _this.cart = cart;
139
140
  _this.cartId = cart.id;
140
- _this.bookingDueDate = cartDate; // See Booking class
141
+ _this.bookingDueDate = cartDueDate; // See Booking class
141
142
  // Update the sellerId. This is particularly important in Linkavel
142
143
  _this.updateSellerId(cart.sellerId);
143
144
  // Fill the booking process status
@@ -273,7 +274,9 @@ var JourneyBooking = /** @class */ (function (_super) {
273
274
  _this.getStorage().getState().updateCartId(response.cart.id);
274
275
  // Fill the booking process status
275
276
  _this.bookingStepsToStatus = (0, processBookingSteps_1.processBookingSteps)(response.cart.stepsToStatus);
276
- _this.bookingDueDate = new Date(response.cart.bookingDueDate);
277
+ var cartDueDate = new Date();
278
+ cartDueDate.setSeconds(cartDueDate.getSeconds() + response.cart.bookingDueDateRemainingSeconds);
279
+ _this.bookingDueDate = cartDueDate;
277
280
  // Update the sellerId. This is particularly important in Linkavel
278
281
  _this.updateSellerId(response.cart.sellerId);
279
282
  return response.cart;
@@ -133,11 +133,12 @@ var ServiceBooking = /** @class */ (function (_super) {
133
133
  switch (_a.label) {
134
134
  case 0: return [4 /*yield*/, this.fetchCart(cartId).then(function (cart) {
135
135
  if (cart) {
136
- var cartDate = new Date(cart.bookingDueDate);
137
- if (cartDate > new Date() && !cart.hasIssuedTickets) {
136
+ var cartDueDate = new Date();
137
+ cartDueDate.setSeconds(cartDueDate.getSeconds() + cart.bookingDueDateRemainingSeconds);
138
+ if (cartDueDate > new Date() && !cart.hasIssuedTickets) {
138
139
  _this.cart = cart;
139
140
  _this.cartId = cart.id;
140
- _this.bookingDueDate = cartDate; // See Booking class
141
+ _this.bookingDueDate = cartDueDate; // See Booking class
141
142
  // Update the sellerId. This is particularly important in Linkavel
142
143
  _this.updateSellerId(cart.sellerId);
143
144
  // Fill the booking process status
@@ -274,7 +275,9 @@ var ServiceBooking = /** @class */ (function (_super) {
274
275
  _this.getStorage().getState().updateCartId(response.cart.id);
275
276
  // Fill the booking process status
276
277
  _this.bookingStepsToStatus = (0, processBookingSteps_1.processBookingSteps)(response.cart.stepsToStatus);
277
- _this.bookingDueDate = new Date(response.cart.bookingDueDate);
278
+ var cartDueDate = new Date();
279
+ cartDueDate.setSeconds(cartDueDate.getSeconds() + response.cart.bookingDueDateRemainingSeconds);
280
+ _this.bookingDueDate = cartDueDate;
278
281
  // Update the sellerId. This is particularly important in Linkavel
279
282
  _this.updateSellerId(response.cart.sellerId);
280
283
  return response.cart;
@@ -133,11 +133,12 @@ var SubscriptionBooking = /** @class */ (function (_super) {
133
133
  switch (_a.label) {
134
134
  case 0: return [4 /*yield*/, this.fetchCart(cartId).then(function (cart) {
135
135
  if (cart) {
136
- var cartDate = new Date(cart.bookingDueDate);
137
- if (cartDate > new Date() && !cart.hasIssuedTickets) {
136
+ var cartDueDate = new Date();
137
+ cartDueDate.setSeconds(cartDueDate.getSeconds() + cart.bookingDueDateRemainingSeconds);
138
+ if (cartDueDate > new Date() && !cart.hasIssuedTickets) {
138
139
  _this.cart = cart;
139
140
  _this.cartId = cart.id;
140
- _this.bookingDueDate = cartDate; // See Booking class
141
+ _this.bookingDueDate = cartDueDate; // See Booking class
141
142
  // Update the sellerId. This is particularly important in Linkavel
142
143
  _this.updateSellerId(cart.sellerId);
143
144
  // Fill the booking process status
@@ -328,7 +329,9 @@ var SubscriptionBooking = /** @class */ (function (_super) {
328
329
  _this.getStorage().getState().updateCartId(response.cart.id);
329
330
  // Fill the booking process status
330
331
  _this.bookingStepsToStatus = (0, processBookingSteps_1.processBookingSteps)(response.cart.stepsToStatus);
331
- _this.bookingDueDate = new Date(response.cart.bookingDueDate);
332
+ var cartDueDate = new Date();
333
+ cartDueDate.setSeconds(cartDueDate.getSeconds() + response.cart.bookingDueDateRemainingSeconds);
334
+ _this.bookingDueDate = cartDueDate;
332
335
  // Update the sellerId. This is particularly important in Linkavel
333
336
  _this.updateSellerId(response.cart.sellerId);
334
337
  return response.cart;
@@ -133,11 +133,12 @@ var TplBooking = /** @class */ (function (_super) {
133
133
  switch (_a.label) {
134
134
  case 0: return [4 /*yield*/, this.fetchCart(cartId).then(function (cart) {
135
135
  if (cart) {
136
- var cartDate = new Date(cart.bookingDueDate);
137
- if (cartDate > new Date() && !cart.hasIssuedTickets) {
136
+ var cartDueDate = new Date();
137
+ cartDueDate.setSeconds(cartDueDate.getSeconds() + cart.bookingDueDateRemainingSeconds);
138
+ if (cartDueDate > new Date() && !cart.hasIssuedTickets) {
138
139
  _this.cart = cart;
139
140
  _this.cartId = cart.id;
140
- _this.bookingDueDate = cartDate; // See Booking class
141
+ _this.bookingDueDate = cartDueDate; // See Booking class
141
142
  // Update the sellerId. This is particularly important in Linkavel
142
143
  _this.updateSellerId(cart.sellerId);
143
144
  // Fill the booking process status
@@ -307,7 +308,9 @@ var TplBooking = /** @class */ (function (_super) {
307
308
  _this.getStorage().getState().updateCartId(response.cart.id);
308
309
  // Fill the booking process status
309
310
  _this.bookingStepsToStatus = (0, processBookingSteps_1.processBookingSteps)(response.cart.stepsToStatus);
310
- _this.bookingDueDate = new Date(response.cart.bookingDueDate);
311
+ var cartDueDate = new Date();
312
+ cartDueDate.setSeconds(cartDueDate.getSeconds() + response.cart.bookingDueDateRemainingSeconds);
313
+ _this.bookingDueDate = cartDueDate;
311
314
  // Update the sellerId. This is particularly important in Linkavel
312
315
  _this.updateSellerId(response.cart.sellerId);
313
316
  return response.cart;
@@ -21,6 +21,7 @@ import { Extra } from "./Extra";
21
21
  * - The second tells whether the section is completed.
22
22
  * - The third tells whether the section is required.
23
23
  * @property {Booking.Currencies} currency The currency of the cart. See {@link Booking.Currencies}
24
+ * @property {number} bookingDueDateRemainingSeconds The number of seconds remaining before the cart expires. This should be equivalent `bookingDueDate`
24
25
  * @property {string} bookingDueDate The date and time when the cart expires
25
26
  * @property {Reduction[]} reductions The list of reductions applied to the cart
26
27
  * @property {Extra[]} extras The list of extras services of the cart
@@ -42,6 +43,7 @@ export type Cart = {
42
43
  stepsToStatus: Map<string, boolean[]>;
43
44
  currency: Booking.Currencies;
44
45
  bookingDueDate: string;
46
+ bookingDueDateRemainingSeconds: number;
45
47
  reductions: Reduction[];
46
48
  extras: Extra[];
47
49
  sellingMethod: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mts-booking-library",
3
- "version": "1.3.2",
3
+ "version": "1.3.4",
4
4
  "description": "Library for using MyTicketSolution Booking API",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -17,7 +17,7 @@
17
17
  "@types/jest": "^29.5.12",
18
18
  "jest": "^29.7.0",
19
19
  "ts-jest": "^29.1.2",
20
- "typescript": "^5.4.3"
20
+ "typescript": "^5.4.4"
21
21
  },
22
22
  "files": [
23
23
  "lib/**/*"