@delicity/client-cart 1.2.13 → 1.2.15

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 (54) hide show
  1. package/classes/Cart.d.ts +134 -0
  2. package/classes/Cart.d.ts.map +1 -0
  3. package/classes/Cart.js +508 -0
  4. package/classes/Cart.js.map +1 -0
  5. package/index.d.ts +4 -0
  6. package/index.d.ts.map +1 -0
  7. package/index.js +20 -0
  8. package/index.js.map +1 -0
  9. package/package.json +5 -4
  10. package/service/CartService.d.ts +14 -0
  11. package/service/CartService.d.ts.map +1 -0
  12. package/service/CartService.js +130 -0
  13. package/service/CartService.js.map +1 -0
  14. package/service/CategoryAvailabilityService.d.ts +23 -0
  15. package/service/CategoryAvailabilityService.d.ts.map +1 -0
  16. package/service/CategoryAvailabilityService.js +103 -0
  17. package/service/CategoryAvailabilityService.js.map +1 -0
  18. package/service/DeliveryService.d.ts +4 -0
  19. package/service/DeliveryService.d.ts.map +1 -0
  20. package/service/DeliveryService.js +30 -0
  21. package/service/DeliveryService.js.map +1 -0
  22. package/service/HelperService.d.ts +2 -0
  23. package/service/HelperService.d.ts.map +1 -0
  24. package/service/HelperService.js +14 -0
  25. package/service/HelperService.js.map +1 -0
  26. package/README.md +0 -1
  27. package/coverage/clover.xml +0 -71
  28. package/coverage/coverage-final.json +0 -3
  29. package/coverage/lcov-report/base.css +0 -224
  30. package/coverage/lcov-report/block-navigation.js +0 -87
  31. package/coverage/lcov-report/classes/Cart.ts.html +0 -340
  32. package/coverage/lcov-report/classes/index.html +0 -116
  33. package/coverage/lcov-report/favicon.png +0 -0
  34. package/coverage/lcov-report/index.html +0 -131
  35. package/coverage/lcov-report/prettify.css +0 -1
  36. package/coverage/lcov-report/prettify.js +0 -2
  37. package/coverage/lcov-report/service/CartService.ts.html +0 -238
  38. package/coverage/lcov-report/service/index.html +0 -116
  39. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  40. package/coverage/lcov-report/sorter.js +0 -196
  41. package/coverage/lcov.info +0 -129
  42. package/jest.config.js +0 -8
  43. package/src/classes/Cart.ts +0 -563
  44. package/src/index.ts +0 -3
  45. package/src/service/CartService.ts +0 -139
  46. package/src/service/CategoryAvailabilityService.ts +0 -121
  47. package/src/service/DeliveryService.ts +0 -17
  48. package/src/service/HelperService.ts +0 -9
  49. package/src/test/availability.test.ts +0 -346
  50. package/src/test/class.test.ts +0 -497
  51. package/src/test/data/CartData.json +0 -244
  52. package/src/test/data/menu.json +0 -5875
  53. package/src/test/data/merchant.json +0 -186
  54. package/tsconfig.json +0 -24
@@ -1,497 +0,0 @@
1
- // @ts-nocheck
2
- import {beforeAll, describe, expect, test} from '@jest/globals';
3
- import {Cart} from "../classes/Cart";
4
- import {ICart, ICartModifier, ICartModifierGroup, IClientConfig, OrderModesEnum} from "@delicity/client-types";
5
- import axios from "axios";
6
- import {DateTime} from "luxon";
7
-
8
-
9
- const instance = axios.create({
10
- baseURL: 'http://localhost:3333',
11
- timeout: 15000
12
- });
13
-
14
- let merchant:any = null;
15
- let menu:any = null;
16
-
17
- let config:IClientConfig = {
18
- apiUrl: 'http://localhost:3333',
19
- axiosClient: instance
20
- }
21
-
22
-
23
- describe('Cart class', () => {
24
-
25
- beforeAll(async () => {
26
- merchant = await import('./data/merchant.json');
27
- menu = await import('./data/menu.json');
28
- });
29
-
30
-
31
- test('Add to cart mandatory check', () => {
32
- const cart = new Cart(config, merchant, menu, OrderModesEnum.DELIVERY, null);
33
-
34
- const item = menu.items[0];
35
- expect(() => cart.addToCart(item, [], 1)).toThrowError('mandatory_field_missing');
36
- const modifierGroups = menu.modifierGroups.filter((m:any) => item.children.includes(m.uid));
37
- const modifiers = menu.modifiers.filter((m:any) => modifierGroups[0].itemIds.includes(m.uid));
38
- const modifierGroup: ICartModifierGroup = {
39
- item: modifierGroups[0],
40
- modifiers: [
41
- {
42
- item: modifiers[0],
43
- quantity: 1,
44
- price: 0
45
- } as ICartModifier
46
- ]
47
- }
48
- cart.addToCart(item, [modifierGroup], 1);
49
- });
50
-
51
-
52
- test('Add to cart available check', () => {
53
- const cart = new Cart(config, merchant, menu, OrderModesEnum.DELIVERY, null);
54
- const item = menu.items[0];
55
- const modifierGroups = menu.modifierGroups.filter((m:any) => item.children.includes(m.uid));
56
- const modifiers = menu.modifiers.filter((m:any) => modifierGroups[0].itemIds.includes(m.uid));
57
- const modifierGroup: ICartModifierGroup = {
58
- item: modifierGroups[0],
59
- modifiers: [
60
- {
61
- item: modifiers[0],
62
- quantity: 1,
63
- price: 0
64
- } as ICartModifier
65
- ]
66
- }
67
- expect(() => cart.addToCart(item, [modifierGroup], 1)).not.toThrowError('item_not_available');
68
- });
69
-
70
-
71
- test('Add to cart not available check', () => {
72
- const updatedMenu = JSON.parse(JSON.stringify(menu));
73
- // @ts-ignore
74
- updatedMenu.items = updatedMenu.items.map(i => {
75
- i.unavailable = true
76
- return i;
77
- });
78
-
79
- const cart = new Cart(config, merchant, updatedMenu, OrderModesEnum.DELIVERY, null);
80
-
81
- const item = menu.items[0];
82
- const modifierGroups = menu.modifierGroups.filter((m:any) => item.children.includes(m.uid));
83
- const modifiers = menu.modifiers.filter((m:any) => modifierGroups[0].itemIds.includes(m.uid));
84
- const modifierGroup: ICartModifierGroup = {
85
- item: modifierGroups[0],
86
- modifiers: [
87
- {
88
- item: modifiers[0],
89
- quantity: 1,
90
- price: 0
91
- } as ICartModifier
92
- ]
93
- }
94
- expect(() => cart.addToCart(item, [modifierGroup], 1)).toThrowError('item_not_available');
95
- });
96
-
97
-
98
- test('Check cart quantities & prices', () => {
99
- let cart:Cart = new Cart(config, merchant, menu, OrderModesEnum.DELIVERY, null);
100
- const item = menu.items[0];
101
- item.unavailable = false;
102
- const modifierGroups = menu.modifierGroups.filter((m:any) => item.children.includes(m.uid));
103
- const modifiers = menu.modifiers.filter((m:any) => modifierGroups[0].itemIds.includes(m.uid));
104
- const modifierGroup: ICartModifierGroup = {
105
- item: modifierGroups[0],
106
- modifiers: [
107
- {
108
- item: modifiers[0],
109
- quantity: 1,
110
- price: 0
111
- } as ICartModifier
112
- ]
113
- }
114
-
115
- expect(cart.getItems().length).toBe(0);
116
- expect(cart.getTotalItems()).toBe(0);
117
- expect(cart.getTotalItemPrice()).toBe(0);
118
-
119
- cart = cart.addToCart(item, [modifierGroup], 2);
120
- expect(cart.getItems().length).toBe(1);
121
- expect(cart.getTotalItems()).toBe(2);
122
- expect(cart.getTotalItemPrice()).toBe(655*2);
123
- });
124
-
125
-
126
-
127
- test('Check cart remove', () => {
128
- let cart:Cart = new Cart(config, merchant, menu, OrderModesEnum.DELIVERY, null);
129
-
130
- const item = menu.items[0];
131
- item.unavailable = false;
132
- const modifierGroups = menu.modifierGroups.filter((m:any) => item.children.includes(m.uid));
133
- const modifiers = menu.modifiers.filter((m:any) => modifierGroups[0].itemIds.includes(m.uid));
134
- const modifierGroup: ICartModifierGroup = {
135
- item: modifierGroups[0],
136
- modifiers: [
137
- {
138
- item: modifiers[0],
139
- quantity: 1,
140
- price: 0
141
- } as ICartModifier
142
- ]
143
- }
144
-
145
- cart = cart.addToCart(item, [modifierGroup], 2);
146
- expect(cart.getItems().length).toBe(1);
147
- expect(cart.getTotalItems()).toBe(2);
148
- expect(cart.getTotalItemPrice()).toBe(655*2);
149
-
150
- cart = cart.removeFromCart(cart.getItems()[0]);
151
- expect(cart.getItems().length).toBe(0);
152
- expect(cart.getTotalItems()).toBe(0);
153
- expect(cart.getTotalItemPrice()).toBe(0);
154
- });
155
-
156
- test('Check Wallet payment method', async () => {
157
- let cart: Cart = new Cart(config, merchant, menu, OrderModesEnum.PICKUP, null);
158
-
159
- const item = menu.items[0];
160
- item.unavailable = false;
161
- const modifierGroups = menu.modifierGroups.filter((m: any) => item.children.includes(m.uid));
162
- const modifiers = menu.modifiers.filter((m: any) => modifierGroups[0].itemIds.includes(m.uid));
163
- const modifierGroup: ICartModifierGroup = {
164
- item: modifierGroups[0],
165
- modifiers: [
166
- {
167
- item: modifiers[0],
168
- quantity: 1,
169
- price: 0
170
- } as ICartModifier
171
- ]
172
- }
173
-
174
- cart = cart.addToCart(item, [modifierGroup], 2);
175
- //cart = await cart.synchronize();
176
-
177
-
178
- expect(cart.getItems().length).toBe(1);
179
- expect(cart.getTotalItems()).toBe(2);
180
- expect(cart.getTotalItemPrice()).toBe(655*2);
181
-
182
- expect(cart.getPaymentMethods()).toHaveLength(0);
183
- expect(cart.paymentMethodWallet('apple_pay'));
184
- expect(cart.getPaymentMethods()).toHaveLength(1);
185
- expect(cart.getPaymentMethodTotalAmount()).toEqual(cart.getTotalPrice());
186
-
187
- cart = cart.addToCart(item, [modifierGroup], 2);
188
- expect(cart.getTotalItems()).toBe(4);
189
- expect(cart.paymentMethodWallet('google_pay'));
190
- expect(cart.getPaymentMethods()).toHaveLength(1);
191
- expect(cart.getPaymentMethodTotalAmount()).toEqual(cart.getTotalPrice());
192
-
193
- cart = cart.updateCart(cart.getItems()[0], [modifierGroup], 10);
194
- expect(cart.getTotalItems()).toBe(10);
195
- expect(cart.paymentMethodWallet('apple_pay'));
196
- expect(cart.getPaymentMethodTotalAmount()).toEqual(cart.getTotalPrice());
197
- });
198
-
199
- test('Check Payment method', async () => {
200
- let cart:Cart = new Cart(config, merchant, menu, OrderModesEnum.PICKUP, null);
201
-
202
- const item = menu.items[0];
203
- item.unavailable = false;
204
- const modifierGroups = menu.modifierGroups.filter((m:any) => item.children.includes(m.uid));
205
- const modifiers = menu.modifiers.filter((m:any) => modifierGroups[0].itemIds.includes(m.uid));
206
- const modifierGroup: ICartModifierGroup = {
207
- item: modifierGroups[0],
208
- modifiers: [
209
- {
210
- item: modifiers[0],
211
- quantity: 1,
212
- price: 0
213
- } as ICartModifier
214
- ]
215
- }
216
-
217
- cart = cart.addToCart(item, [modifierGroup], 2);
218
- // cart = await cart.synchronize();
219
-
220
- expect(cart.getItems().length).toBe(1);
221
- expect(cart.getTotalItems()).toBe(2);
222
- expect(cart.getTotalItemPrice()).toBe(655*2);
223
-
224
- expect(cart.getPaymentMethods()).toHaveLength(0);
225
-
226
- cart.paymentMethodCard('card_token', 'xxxxx', 'visa', 'last4', 'expiration');
227
- expect(cart.getPaymentMethodTotalAmount()).toEqual(cart.getTotalPrice());
228
- expect(cart.getPaymentMethods()).toHaveLength(1);
229
-
230
- cart.paymentMethodCard('payment_method_id', 'xxxxx', 'visa', 'last4', 'expiration');
231
- expect(cart.getPaymentMethodTotalAmount()).toEqual(cart.getTotalPrice());
232
- expect(cart.getPaymentMethods()).toHaveLength(1);
233
-
234
- cart.paymentMethodCard('payment_method_id', 'xxxxx', 'visa', 'last4', 'expiration', cart.getTotalPrice()/2);
235
- cart.paymentMethodCard('card_token', 'xxxxx', 'visa', 'last4', 'expiration', cart.getTotalPrice()/2);
236
- expect(cart.getPaymentMethods()).toHaveLength(2);
237
-
238
- cart.paymentMethodCard('payment_method_id', 'xxxxx', 'visa', 'last4', 'expiration', cart.getTotalPrice()/2);
239
- expect(cart.getPaymentMethods()).toHaveLength(1);
240
-
241
-
242
- cart.paymentMethodCard('payment_method_id', 'xxxxx', 'visa', 'last4', 'expiration', cart.getTotalPrice());
243
- expect(cart.getPaymentMethods()).toHaveLength(1);
244
-
245
- cart = cart.addToCart(item, [modifierGroup], 4);
246
-
247
-
248
- expect(cart.getPaymentMethods()).toHaveLength(1);
249
- expect(cart.getPaymentMethodTotalAmount()).toEqual(cart.getTotalPrice());
250
- });
251
-
252
-
253
-
254
-
255
- test('Add same product twice', () => {
256
- let cart:Cart = new Cart(config, merchant, menu, OrderModesEnum.DELIVERY, null);
257
-
258
- const item = menu.items[0];
259
- item.unavailable = false;
260
- const modifierGroups = menu.modifierGroups.filter((m:any) => item.children.includes(m.uid));
261
- const modifiers = menu.modifiers.filter((m:any) => modifierGroups[0].itemIds.includes(m.uid));
262
-
263
- const modifierGroup1: ICartModifierGroup = {
264
- item: modifierGroups[0],
265
- modifiers: [
266
- {
267
- item: modifiers[0],
268
- quantity: 1,
269
- price: 0
270
- } as ICartModifier
271
- ]
272
- }
273
- const modifierGroup2: ICartModifierGroup = {
274
- item: modifierGroups[0],
275
- modifiers: [
276
- {
277
- item: modifiers[1],
278
- quantity: 1,
279
- price: 0
280
- } as ICartModifier
281
- ]
282
- }
283
-
284
- expect(cart.getItems().length).toBe(0);
285
-
286
- cart = cart.addToCart(item, [modifierGroup1], 1);
287
- expect(cart.getItems().length).toBe(1);
288
- expect(cart.getTotalItems()).toBe(1);
289
-
290
- cart = cart.addToCart(item, [modifierGroup2], 2);
291
- expect(cart.getItems().length).toBe(2);
292
- expect(cart.getTotalItems()).toBe(3);
293
-
294
- cart = cart.addToCart(item, [modifierGroup1], 2);
295
- expect(cart.getItems().length).toBe(2);
296
- expect(cart.getTotalItems()).toBe(5);
297
-
298
- cart = cart.addToCart(item, [modifierGroup1], 1, "Avec un commentaire !");
299
- expect(cart.getItems().length).toBe(3);
300
- expect(cart.getTotalItems()).toBe(6);
301
-
302
- cart = cart.addToCart(item, [modifierGroup1], 1, "Avec un commentaire !");
303
- expect(cart.getItems().length).toBe(3);
304
- expect(cart.getTotalItems()).toBe(7);
305
-
306
- });
307
-
308
-
309
-
310
-
311
- test('Get delivery infos', async () => {
312
- let cart:Cart = new Cart(config, merchant, menu, OrderModesEnum.DELIVERY, null);
313
-
314
- await cart.setAddress({
315
- "uuid": "be665722-ab07-42b3-9d31-457635773b78",
316
- "addressName": null,
317
- "addressShort": "20 Rue de France",
318
- "address": "20 Rue de France",
319
- "city": "Nice",
320
- "zip": "06000",
321
- "additional_informations": null,
322
- "countryCode": "FR",
323
- "precise": true,
324
- "position": {
325
- "type": "Point",
326
- "coordinates": [
327
- 7.2627684,
328
- 43.6964599
329
- ]
330
- }
331
- })
332
-
333
-
334
-
335
-
336
- expect(cart.getDeliveryInfos()).not.toBeUndefined();
337
- expect(cart.getDeliveryInfos()?.price).toBeGreaterThan(0);
338
- expect(cart.getDeliveryInfos()?.distance).toBeGreaterThan(0);
339
- expect(cart.getDeliveryInfos()?.duration).toBeGreaterThan(0);
340
- });
341
-
342
-
343
- test('Cart reload data', async () => {
344
- let cart:Cart = new Cart(config, merchant, menu, OrderModesEnum.DELIVERY, null);
345
-
346
- // @ts-ignore
347
- const data: ICart = (await import('./data/CartData.json')).default;
348
- cart.setCart(data);
349
- expect(cart.getItems().length).toBe(3);
350
- expect(cart.getTotalItems()).toBe(7);
351
- expect(data.items[0].item.name).toBe('Iced Caramel Macchiato');
352
- });
353
-
354
-
355
- test('Validate Cart integrity: Update Cart items when load', async () => {
356
- let cart:Cart = new Cart(config, merchant, menu, OrderModesEnum.DELIVERY, null);
357
- // @ts-ignore
358
- const data: ICart = JSON.parse(JSON.stringify((await import('./data/CartData.json')).default));
359
- data.items[0].item.name = 'TestName';
360
- cart.setCart(data);
361
- expect(cart.getItems()[0].item.name).toBe('Iced Caramel Macchiato');
362
- });
363
-
364
-
365
- test('Validate Cart integrity: Remove unavailable Cart items when load', async () => {
366
- let cart:Cart = new Cart(config, merchant, menu, OrderModesEnum.DELIVERY, null);
367
-
368
- // @ts-ignore
369
- const data: ICart = JSON.parse(JSON.stringify((await import('./data/CartData.json')).default));
370
- data.items[0].item.id = 9999;
371
- console.log(data.items.map(i => i.item.id));
372
-
373
- cart.setCart(data);
374
- expect(cart.getItems().length).toBe(2);
375
- expect(cart.getTotalItems()).toBe(4);
376
- });
377
-
378
- test('Validate Cart integrity: Remove not existing Cart items when load', async () => {
379
- const updatedMenu = JSON.parse(JSON.stringify(menu));
380
- // @ts-ignore
381
- updatedMenu.items = updatedMenu.items.map(i => {
382
- i.unavailable = true
383
- return i;
384
- });
385
- let cart:Cart = new Cart(config, merchant, updatedMenu, OrderModesEnum.DELIVERY, null);
386
-
387
- // @ts-ignore
388
- const data: ICart = JSON.parse(JSON.stringify((await import('./data/CartData.json')).default));
389
- cart.setCart(data);
390
- expect(cart.getItems().length).toBe(0);
391
- expect(cart.getTotalItems()).toBe(0);
392
- });
393
-
394
- test('Validate Cart integrity: Remove from cart element with not good date', async () => {
395
- const updatedMenu = JSON.parse(JSON.stringify(menu));
396
- const categoryId = updatedMenu.categories.findIndex(c => c.id === 16);
397
- updatedMenu.categories[categoryId].availability = {
398
- type: "one_date",
399
- slots: [{id: 0, day: 3, start: "00:00", end: "23:59"}],
400
- startDate: "2024-02-14",
401
- endDate: "2024-02-14",
402
- weekNumber: 7,
403
- weekYear: 2024
404
- }
405
- let cart:Cart = new Cart(config, merchant, updatedMenu, OrderModesEnum.DELIVERY, DateTime.fromFormat('2024-01-01', 'yyyy-LL-dd').toISO());
406
-
407
- // @ts-ignore
408
- const data: ICart = JSON.parse(JSON.stringify((await import('./data/CartData.json')).default));
409
- cart.setCart(data);
410
- expect(cart.getItems().length).toBe(0);
411
- expect(cart.getTotalItems()).toBe(0);
412
- });
413
-
414
- test('Validate Cart integrity: NOT Remove from cart element with good date', async () => {
415
- const updatedMenu = JSON.parse(JSON.stringify(menu));
416
- const categoryId = updatedMenu.categories.findIndex(c => c.id === 16);
417
- updatedMenu.categories[categoryId].availability = {
418
- type: "one_date",
419
- slots: [{id: 0, day: 3, start: "00:00", end: "23:59"}],
420
- startDate: "2024-02-14",
421
- endDate: "2024-02-14",
422
- weekNumber: 7,
423
- weekYear: 2024
424
- }
425
- let cart:Cart = new Cart(config, merchant, updatedMenu, OrderModesEnum.DELIVERY, null);
426
- // @ts-ignore
427
- const data: ICart = JSON.parse(JSON.stringify((await import('./data/CartData.json')).default));
428
- data.when = DateTime.fromFormat('2024-02-14 12:00', 'yyyy-LL-dd HH:mm').toISO();
429
- cart.setCart(data);
430
- expect(cart.getItems().length).toBe(3);
431
- expect(cart.getTotalItems()).toBe(7);
432
- });
433
-
434
-
435
- test('Syncronize with db', async () => {
436
- let cart:Cart = new Cart(config, merchant, menu, OrderModesEnum.DELIVERY, null);
437
-
438
- //await expect(() => cart.synchronize()).rejects.toThrowError('no_delivery_address')
439
-
440
- await cart.setAddress({
441
- "uuid": "61df52c4-064b-4387-b184-16b7914a332e",
442
- "addressName": null,
443
- "addressShort": "20 Rue de France",
444
- "address": "20 Rue de France",
445
- "city": "Nice",
446
- "zip": "06000",
447
- "additional_informations": null,
448
- "countryCode": "FR",
449
- "precise": true,
450
- "position": {
451
- "type": "Point",
452
- "coordinates": [
453
- 7.2627684,
454
- 43.6964599
455
- ]
456
- }
457
- })
458
-
459
- expect(cart.getDeliveryInfos()).not.toBeUndefined();
460
-
461
- const item = menu.items[0];
462
- item.unavailable = false;
463
- const modifierGroups = menu.modifierGroups.filter((m:any) => item.children.includes(m.uid));
464
- const modifiers = menu.modifiers.filter((m:any) => modifierGroups[0].itemIds.includes(m.uid));
465
-
466
- const modifierGroup1: ICartModifierGroup = {
467
- item: modifierGroups[0],
468
- modifiers: [
469
- {
470
- item: modifiers[0],
471
- quantity: 1,
472
- price: 0
473
- },
474
- {
475
- item: modifiers[1],
476
- quantity: 1,
477
- price: 0
478
- }
479
- ] as ICartModifier[]
480
- }
481
- cart = cart.addToCart(item, [modifierGroup1], 1);
482
- expect(cart.getItems().length).toBe(1);
483
- expect(cart.getTotalItems()).toBe(1);
484
- // await cart.synchronize();
485
- // expect(cart.getCart().prices).toBeDefined()
486
- expect(cart.getPreparationDurationBetween()).toBeDefined()
487
- expect(cart.getDiscounts()).toHaveLength(0);
488
- await cart.addDiscountCoupon('PRODUIT10');
489
- expect(cart.getDiscounts()).toHaveLength(1);
490
- await cart.removeDiscount(cart.getDiscounts()[0].id);
491
- expect(cart.getDiscounts()).toHaveLength(0);
492
-
493
-
494
- });
495
-
496
- });
497
-