mts-booking-library 1.3.2 → 1.3.4

Sign up to get free protection for your applications and to get access to all the features.
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/**/*"