@delicity/client-cart 1.2.11 → 1.2.12

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/README.md +1 -0
  2. package/coverage/clover.xml +71 -0
  3. package/coverage/coverage-final.json +3 -0
  4. package/coverage/lcov-report/base.css +224 -0
  5. package/coverage/lcov-report/block-navigation.js +87 -0
  6. package/coverage/lcov-report/classes/Cart.ts.html +340 -0
  7. package/coverage/lcov-report/classes/index.html +116 -0
  8. package/coverage/lcov-report/favicon.png +0 -0
  9. package/coverage/lcov-report/index.html +131 -0
  10. package/coverage/lcov-report/prettify.css +1 -0
  11. package/coverage/lcov-report/prettify.js +2 -0
  12. package/coverage/lcov-report/service/CartService.ts.html +238 -0
  13. package/coverage/lcov-report/service/index.html +116 -0
  14. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  15. package/coverage/lcov-report/sorter.js +196 -0
  16. package/coverage/lcov.info +129 -0
  17. package/jest.config.js +8 -0
  18. package/package.json +1 -1
  19. package/src/classes/Cart.ts +563 -0
  20. package/src/index.ts +3 -0
  21. package/src/service/CartService.ts +139 -0
  22. package/src/service/CategoryAvailabilityService.ts +121 -0
  23. package/src/service/DeliveryService.ts +17 -0
  24. package/src/service/HelperService.ts +9 -0
  25. package/src/test/availability.test.ts +346 -0
  26. package/src/test/class.test.ts +497 -0
  27. package/src/test/data/CartData.json +244 -0
  28. package/src/test/data/menu.json +5875 -0
  29. package/src/test/data/merchant.json +186 -0
  30. package/tsconfig.json +24 -0
  31. package/classes/Cart.d.ts +0 -129
  32. package/classes/Cart.d.ts.map +0 -1
  33. package/classes/Cart.js +0 -482
  34. package/classes/Cart.js.map +0 -1
  35. package/index.d.ts +0 -4
  36. package/index.d.ts.map +0 -1
  37. package/index.js +0 -20
  38. package/index.js.map +0 -1
  39. package/service/CartService.d.ts +0 -14
  40. package/service/CartService.d.ts.map +0 -1
  41. package/service/CartService.js +0 -130
  42. package/service/CartService.js.map +0 -1
  43. package/service/CategoryAvailabilityService.d.ts +0 -23
  44. package/service/CategoryAvailabilityService.d.ts.map +0 -1
  45. package/service/CategoryAvailabilityService.js +0 -103
  46. package/service/CategoryAvailabilityService.js.map +0 -1
  47. package/service/DeliveryService.d.ts +0 -4
  48. package/service/DeliveryService.d.ts.map +0 -1
  49. package/service/DeliveryService.js +0 -30
  50. package/service/DeliveryService.js.map +0 -1
  51. package/service/HelperService.d.ts +0 -2
  52. package/service/HelperService.d.ts.map +0 -1
  53. package/service/HelperService.js +0 -14
  54. package/service/HelperService.js.map +0 -1
@@ -0,0 +1,497 @@
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
+