@@ -17,7 +17,9 @@ jest.mock('*/cartridge/adyen/utils/lineItemHelper', () => ({
1717 isProductLineItem : jest . fn ( ( ) => false ) ,
1818} ) ) ;
1919
20- const { getLineItems } = require ( '*/cartridge/adyen/scripts/payments/adyenLevelTwoThreeData' ) ;
20+ const {
21+ getLineItems,
22+ } = require ( '*/cartridge/adyen/scripts/payments/adyenLevelTwoThreeData' ) ;
2123const AdyenHelper = require ( '*/cartridge/adyen/utils/adyenHelper' ) ;
2224
2325describe ( 'getLineItems (Enhanced Scheme Data)' , ( ) => {
@@ -26,7 +28,7 @@ describe('getLineItems (Enhanced Scheme Data)', () => {
2628 productID : 'SW1234567890X' ,
2729 quantityValue : 2 ,
2830 adjustedNetPrice : 100 ,
29- getAdjustedTax : 20 ,
31+ getAdjustedTax : 20 ,
3032 } ;
3133
3234 const createMockOrderOrBasket = ( customerData = { } ) => ( {
@@ -49,17 +51,21 @@ describe('getLineItems (Enhanced Scheme Data)', () => {
4951
5052 it ( 'should return enhanced line item fields with tax, description, and commodity code' , ( ) => {
5153 const result = getLineItems ( {
52- Order : createMockOrderOrBasket ( { registered : true , customerNo : 'cust-9999' } ) ,
54+ Order : createMockOrderOrBasket ( {
55+ registered : true ,
56+ customerNo : 'cust-9999' ,
57+ } ) ,
5358 } ) ;
5459
5560 expect ( result ) . toEqual ( {
56- 'enhancedSchemeData.totalTaxAmount' : 10 ,
61+ 'enhancedSchemeData.totalTaxAmount' : 20 ,
5762 'enhancedSchemeData.customerReference' : 'cust-9999' ,
58- 'enhancedSchemeData.itemDetailLine1.unitPrice' : '50' ,
59- 'enhancedSchemeData.itemDetailLine1.totalAmount' : 100 ,
63+ 'enhancedSchemeData.itemDetailLine1.unitPrice' : '50' ,
64+ 'enhancedSchemeData.itemDetailLine1.totalAmount' : 100 ,
6065 'enhancedSchemeData.itemDetailLine1.quantity' : 2 ,
6166 'enhancedSchemeData.itemDetailLine1.unitOfMeasure' : 'EAC' ,
62- 'enhancedSchemeData.itemDetailLine1.commodityCode' : 'mocked_comodity_code' ,
67+ 'enhancedSchemeData.itemDetailLine1.commodityCode' :
68+ 'mocked_comodity_code' ,
6369 'enhancedSchemeData.itemDetailLine1.description' : 'Super Widget' ,
6470 'enhancedSchemeData.itemDetailLine1.productCode' : 'SW1234567890' ,
6571 } ) ;
@@ -68,10 +74,15 @@ describe('getLineItems (Enhanced Scheme Data)', () => {
6874 it ( 'should truncate customerReference to 25 characters' , ( ) => {
6975 const longCustomerNo = 'very-long-customer-number-1234567890' ;
7076 const result = getLineItems ( {
71- Order : createMockOrderOrBasket ( { registered : true , customerNo : longCustomerNo } ) ,
77+ Order : createMockOrderOrBasket ( {
78+ registered : true ,
79+ customerNo : longCustomerNo ,
80+ } ) ,
7281 } ) ;
7382
74- expect ( result [ 'enhancedSchemeData.customerReference' ] . length ) . toBeLessThanOrEqual ( 25 ) ;
83+ expect (
84+ result [ 'enhancedSchemeData.customerReference' ] . length ,
85+ ) . toBeLessThanOrEqual ( 25 ) ;
7586 } ) ;
7687
7788 it ( 'should return null when no Order or Basket is passed' , ( ) => {
@@ -96,31 +107,36 @@ describe('getLineItems (Enhanced Scheme Data)', () => {
96107 toArray : ( ) => [ ] ,
97108 } ) ,
98109 getCustomer : ( ) => ( {
99- getID : ( ) => null
110+ getID : ( ) => null ,
100111 } ) ,
101112 getCustomerNo : ( ) => null ,
102113 } ,
103114 } ) ;
104115
105- expect ( result [ 'enhancedSchemeData.customerReference' ] ) . toBe ( 'no-unique-ref' ) ;
116+ expect ( result [ 'enhancedSchemeData.customerReference' ] ) . toBe (
117+ 'no-unique-ref' ,
118+ ) ;
106119 } ) ;
107120
108121 it ( 'should include discount amount when product has basePrice > adjustedPrice' , ( ) => {
109122 const lineItemHelper = require ( '*/cartridge/adyen/utils/lineItemHelper' ) ;
110123 lineItemHelper . isProductLineItem . mockReturnValueOnce ( true ) ;
111124
112125 AdyenHelper . getCurrencyValueForApi = jest . fn ( ( ) => ( {
113- divide : jest . fn ( ( ) => ( {
114- value : { toFixed : ( ) => '10' } ,
115- } ) ) ,
126+ value : { toFixed : ( ) => '20' } ,
116127 } ) ) ;
117128
129+ // qty=2, basePrice=60/unit (line=120), adjustedPrice=100 (line total).
130+ // Expected total line discount = 60*2 - 100 = 20.
118131 const discountedLineItem = {
119132 ...mockLineItem ,
120133 basePrice : {
121- value : 120 ,
122- subtract : jest . fn ( ( adjustedPrice ) => ( {
123- value : 20 ,
134+ value : 60 ,
135+ multiply : jest . fn ( ( ) => ( {
136+ value : 120 ,
137+ subtract : jest . fn ( ( ) => ( {
138+ value : 20 ,
139+ } ) ) ,
124140 } ) ) ,
125141 } ,
126142 adjustedPrice : {
@@ -145,8 +161,12 @@ describe('getLineItems (Enhanced Scheme Data)', () => {
145161 } ,
146162 } ) ;
147163
148- expect ( result [ 'enhancedSchemeData.itemDetailLine1.discountAmount' ] ) . toBe ( '10' ) ;
164+ // Total line discount (not per-unit). Adyen formula:
165+ // totalAmount = quantity * unitPrice - discountAmount => 100 = 2 * 60 - 20
166+ expect ( result [ 'enhancedSchemeData.itemDetailLine1.discountAmount' ] ) . toBe (
167+ '20' ,
168+ ) ;
169+ expect ( result [ 'enhancedSchemeData.itemDetailLine1.unitPrice' ] ) . toBe ( '60' ) ;
170+ expect ( result [ 'enhancedSchemeData.itemDetailLine1.totalAmount' ] ) . toBe ( 100 ) ;
149171 } ) ;
150-
151-
152172} ) ;
0 commit comments