@darkpos/pricing 1.0.137 → 1.0.139

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.
@@ -2570,5 +2570,112 @@ describe('Item actions', () => {
2570
2570
  'City Tax': 3,
2571
2571
  });
2572
2572
  });
2573
+
2574
+ test('mergeWithParentItem adds price, name, and modifiers to parent', () => {
2575
+ const parentItem = {
2576
+ _id: 'parent-1',
2577
+ itemId: 'parent-1',
2578
+ name: 'Parent',
2579
+ price: 100,
2580
+ total: 100,
2581
+ quantity: 1,
2582
+ modifiers: [
2583
+ {
2584
+ _id: 'mod-parent',
2585
+ modifierId: 'mod-parent',
2586
+ },
2587
+ ],
2588
+ };
2589
+
2590
+ const order = {
2591
+ items: [parentItem],
2592
+ modifiers: [],
2593
+ };
2594
+
2595
+ const relatedItem = {
2596
+ itemId: 'child-1',
2597
+ name: 'Child',
2598
+ price: 25,
2599
+ modifiers: [
2600
+ {
2601
+ _id: 'tax',
2602
+ compute: { amount: 5, type: 'fixed', action: 'add' },
2603
+ },
2604
+ ],
2605
+ properties: {
2606
+ relatedItem: true,
2607
+ parentId: parentItem._id,
2608
+ parentItemId: parentItem.itemId,
2609
+ mergeWithParentItem: true,
2610
+ },
2611
+ };
2612
+
2613
+ const { updatedOrder } = pricingService.order.addItem({
2614
+ order,
2615
+ item: relatedItem,
2616
+ });
2617
+
2618
+ expect(updatedOrder.items.length).toBe(1);
2619
+
2620
+ expect(updatedOrder.items[0]._id).toBe('parent-1');
2621
+
2622
+ expect(updatedOrder.items[0].price).toBe(125);
2623
+ expect(updatedOrder.items[0].name).toBe('Parent - Child');
2624
+ expect(updatedOrder.items[0].modifiers.length).toBe(2);
2625
+ expect(updatedOrder.items[0].modifiers[0]._id).toBe('mod-parent');
2626
+ expect(updatedOrder.items[0].modifiers[1].modifierId).toBe('tax');
2627
+ });
2628
+
2629
+ test('mergeWithParentItem does not duplicate parent modifiers', () => {
2630
+ const parentItem = {
2631
+ _id: 'parent-2',
2632
+ itemId: 'parent-2',
2633
+ name: 'Parent',
2634
+ price: 100,
2635
+ total: 100,
2636
+ quantity: 1,
2637
+ modifiers: [
2638
+ {
2639
+ _id: 'mod-shared-parent',
2640
+ modifierId: 'mod-shared',
2641
+ },
2642
+ ],
2643
+ };
2644
+
2645
+ const order = {
2646
+ items: [parentItem],
2647
+ modifiers: [],
2648
+ };
2649
+
2650
+ const relatedItem = {
2651
+ itemId: 'child-2',
2652
+ name: 'Child',
2653
+ price: 10,
2654
+ modifiers: [
2655
+ {
2656
+ _id: 'mod-shared',
2657
+ compute: { amount: 2, type: 'fixed', action: 'add' },
2658
+ },
2659
+ ],
2660
+ properties: {
2661
+ relatedItem: true,
2662
+ parentId: parentItem._id,
2663
+ parentItemId: parentItem.itemId,
2664
+ mergeWithParentItem: true,
2665
+ },
2666
+ };
2667
+
2668
+ const { updatedOrder } = pricingService.order.addItem({
2669
+ order,
2670
+ item: relatedItem,
2671
+ });
2672
+
2673
+ expect(updatedOrder.items.length).toBe(1);
2674
+ expect(updatedOrder.items[0]._id).toBe('parent-2');
2675
+ expect(updatedOrder.items[0].price).toBe(110);
2676
+ expect(updatedOrder.items[0].name).toBe('Parent - Child');
2677
+ expect(updatedOrder.items[0].modifiers.length).toBe(1);
2678
+ expect(updatedOrder.items[0].modifiers[0].modifierId).toBe('mod-shared');
2679
+ });
2573
2680
  });
2574
2681
  });
@@ -18,6 +18,7 @@ describe('addItem function', () => {
18
18
 
19
19
  // Mock item to add
20
20
  const item = {
21
+ _id: 'abc',
21
22
  itemId: '123',
22
23
  quantity: 1,
23
24
  price: 100,