globalpayments-api 3.11.2 → 3.11.4
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.
- package/CHANGELOG.md +9 -1
- package/lib/src/Entities/Address.d.ts +1 -0
- package/lib/src/Entities/Address.js +1 -0
- package/lib/src/Entities/Address.js.map +1 -1
- package/lib/src/Entities/Enums/AcquisitionType.d.ts +2 -1
- package/lib/src/Entities/Enums/AcquisitionType.js +1 -0
- package/lib/src/Entities/Enums/AcquisitionType.js.map +1 -1
- package/lib/src/Entities/Errors.d.ts +7 -1
- package/lib/src/Entities/Errors.js +30 -1
- package/lib/src/Entities/Errors.js.map +1 -1
- package/lib/src/Entities/TransactionSummary.d.ts +5 -0
- package/lib/src/Entities/TransactionSummary.js +5 -0
- package/lib/src/Entities/TransactionSummary.js.map +1 -1
- package/lib/src/Terminals/Abstractions/IDeviceResponse.d.ts +48 -0
- package/lib/src/Terminals/Builders/TerminalAuthBuilder.d.ts +15 -0
- package/lib/src/Terminals/Builders/TerminalAuthBuilder.js +29 -2
- package/lib/src/Terminals/Builders/TerminalAuthBuilder.js.map +1 -1
- package/lib/src/Terminals/Builders/TerminalBuilder.d.ts +3 -3
- package/lib/src/Terminals/Builders/TerminalBuilder.js.map +1 -1
- package/lib/src/Terminals/Builders/TerminalManageBuilder.d.ts +3 -0
- package/lib/src/Terminals/Builders/TerminalManageBuilder.js +6 -0
- package/lib/src/Terminals/Builders/TerminalManageBuilder.js.map +1 -1
- package/lib/src/Terminals/UPA/Reponses/BatchReportResponse.d.ts +9 -1
- package/lib/src/Terminals/UPA/Reponses/BatchReportResponse.js +22 -2
- package/lib/src/Terminals/UPA/Reponses/BatchReportResponse.js.map +1 -1
- package/lib/src/Terminals/UPA/Reponses/SafReportResponse.js +9 -0
- package/lib/src/Terminals/UPA/Reponses/SafReportResponse.js.map +1 -1
- package/lib/src/Terminals/UPA/Reponses/TransactionResponse.d.ts +3 -0
- package/lib/src/Terminals/UPA/Reponses/TransactionResponse.js +30 -0
- package/lib/src/Terminals/UPA/Reponses/TransactionResponse.js.map +1 -1
- package/lib/src/Terminals/UPA/Reponses/UpaEODResponse.d.ts +21 -1
- package/lib/src/Terminals/UPA/Reponses/UpaEODResponse.js +29 -0
- package/lib/src/Terminals/UPA/Reponses/UpaEODResponse.js.map +1 -1
- package/lib/src/Terminals/UPA/Reponses/UpaSAFResponse.js +5 -7
- package/lib/src/Terminals/UPA/Reponses/UpaSAFResponse.js.map +1 -1
- package/lib/src/Terminals/UPA/UpaController.js +43 -7
- package/lib/src/Terminals/UPA/UpaController.js.map +1 -1
- package/lib/src/Terminals/UPA/UpaInterface.d.ts +1 -1
- package/lib/src/Terminals/UPA/UpaInterface.js +4 -2
- package/lib/src/Terminals/UPA/UpaInterface.js.map +1 -1
- package/lib/test/Unit/Terminals/Builders/TerminalBuilderParityTests.d.ts +17 -0
- package/lib/test/Unit/Terminals/Builders/TerminalBuilderParityTests.js +325 -0
- package/lib/test/Unit/Terminals/Builders/TerminalBuilderParityTests.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/BatchList.test.js +2 -3
- package/lib/test/Unit/Terminals/UPA/Responses/BatchList.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/BatchReportResponse.test.js +3 -3
- package/lib/test/Unit/Terminals/UPA/Responses/BatchReportResponse.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/OpenTabDetailsResponse.test.js +2 -2
- package/lib/test/Unit/Terminals/UPA/Responses/OpenTabDetailsResponse.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/SafReportResponse.test.js +2 -2
- package/lib/test/Unit/Terminals/UPA/Responses/SafReportResponse.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/Responses/UpaEODResponse.test.js +59 -0
- package/lib/test/Unit/Terminals/UPA/Responses/UpaEODResponse.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/Responses/UpaSAFResponse.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/UpaAdmin.test.js +195 -3
- package/lib/test/Unit/Terminals/UPA/UpaAdmin.test.js.map +1 -1
- package/lib/test/Unit/Terminals/UPA/UpaCredit.test.js +147 -31
- package/lib/test/Unit/Terminals/UPA/UpaCredit.test.js.map +1 -1
- package/lib/test/Unit/Terminals/UPA/UpaEMVParameterValidation.test.d.ts +7 -0
- package/lib/test/Unit/Terminals/UPA/UpaEMVParameterValidation.test.js +258 -0
- package/lib/test/Unit/Terminals/UPA/UpaEMVParameterValidation.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/UpaErrorResponse.test.d.ts +21 -0
- package/lib/test/Unit/Terminals/UPA/UpaErrorResponse.test.js +533 -0
- package/lib/test/Unit/Terminals/UPA/UpaErrorResponse.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/UpaHelpertest.js +1 -1
- package/lib/test/Unit/Terminals/UPA/UpaJiraStoryValidation.test.d.ts +26 -0
- package/lib/test/Unit/Terminals/UPA/UpaJiraStoryValidation.test.js +389 -0
- package/lib/test/Unit/Terminals/UPA/UpaJiraStoryValidation.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/UpaLanguageCode.test.d.ts +18 -0
- package/lib/test/Unit/Terminals/UPA/UpaLanguageCode.test.js +314 -0
- package/lib/test/Unit/Terminals/UPA/UpaLanguageCode.test.js.map +1 -0
- package/package.json +1 -1
- package/lib/test/Unit/Builders/AuthorizationBuilder/SupplementaryData.test.d.ts +0 -1
- package/lib/test/Unit/Builders/AuthorizationBuilder/SupplementaryData.test.js +0 -147
- package/lib/test/Unit/Builders/AuthorizationBuilder/SupplementaryData.test.js.map +0 -1
- package/lib/test/Unit/Terminals/UPA/Reponses/BatchList.test.js.map +0 -1
- package/lib/test/Unit/Terminals/UPA/Reponses/BatchReportResponse.test.js.map +0 -1
- package/lib/test/Unit/Terminals/UPA/Reponses/OpenTabDetailsResponse.test.js.map +0 -1
- package/lib/test/Unit/Terminals/UPA/Reponses/SafReportResponse.test.js.map +0 -1
- package/lib/test/Unit/Terminals/UPA/Reponses/UpaEODResponse.test.js +0 -108
- package/lib/test/Unit/Terminals/UPA/Reponses/UpaEODResponse.test.js.map +0 -1
- package/lib/test/Unit/Terminals/UPA/Reponses/UpaSAFResponse.test.js.map +0 -1
- package/lib/test/Unit/Terminals/UPA/UpaStory1Methods.test.d.ts +0 -1
- package/lib/test/Unit/Terminals/UPA/UpaStory1Methods.test.js +0 -250
- package/lib/test/Unit/Terminals/UPA/UpaStory1Methods.test.js.map +0 -1
- package/lib/test/Unit/Terminals/UPA/UpaStory2Methods.test.d.ts +0 -1
- package/lib/test/Unit/Terminals/UPA/UpaStory2Methods.test.js +0 -1277
- package/lib/test/Unit/Terminals/UPA/UpaStory2Methods.test.js.map +0 -1
- package/lib/test/Unit/Terminals/UPA/UpaStory3_4Methods.test.d.ts +0 -1
- package/lib/test/Unit/Terminals/UPA/UpaStory3_4Methods.test.js +0 -411
- package/lib/test/Unit/Terminals/UPA/UpaStory3_4Methods.test.js.map +0 -1
- /package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/BatchList.test.d.ts +0 -0
- /package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/BatchReportResponse.test.d.ts +0 -0
- /package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/OpenTabDetailsResponse.test.d.ts +0 -0
- /package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/SafReportResponse.test.d.ts +0 -0
- /package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/UpaEODResponse.test.d.ts +0 -0
- /package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/UpaSAFResponse.test.d.ts +0 -0
- /package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/UpaSAFResponse.test.js +0 -0
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* UPA JIRA Story Validation Test Suite
|
|
4
|
+
*
|
|
5
|
+
* Validates comprehensive UPA functionality for merchant transaction processing.
|
|
6
|
+
* Ensures all required fields and methods are implemented per JIRA story requirements:
|
|
7
|
+
* - clerkId (withClerkId method)
|
|
8
|
+
* - cardOnFileIndicator (proper mapping support)
|
|
9
|
+
* - cardBrandTransId (withCardBrandTransId method)
|
|
10
|
+
* - lineItemLeft/Right (withLineItem methods)
|
|
11
|
+
* - languageCode (complete implementation)
|
|
12
|
+
* - directMktShipMonth/Day (correct date handling)
|
|
13
|
+
* - merchantDecision (property and mapping)
|
|
14
|
+
* - acquisitionTypes (property and mapping)
|
|
15
|
+
* - baseAmount (separation from totalAmount)
|
|
16
|
+
* - preAuthAmount (proper decimal formatting)
|
|
17
|
+
* - Card-On-File (initial vs subsequent, multiple initiator types)
|
|
18
|
+
* - Lodging Data (full integration)
|
|
19
|
+
* - Processing Indicators (quickChip, checkLuhn, securityCode)
|
|
20
|
+
*
|
|
21
|
+
* Region: US
|
|
22
|
+
* Gateway: GP-API
|
|
23
|
+
* Environment: Sandbox
|
|
24
|
+
* Devices: UPA
|
|
25
|
+
* Payment Types: MC, VISA, Amex
|
|
26
|
+
*/
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
const src_1 = require("../../../../src");
|
|
29
|
+
const AcquisitionType_1 = require("../../../../src/Entities/Enums/AcquisitionType");
|
|
30
|
+
const UpaHelpertest_1 = require("./UpaHelpertest");
|
|
31
|
+
jest.setTimeout(240000);
|
|
32
|
+
// ===========================================================================
|
|
33
|
+
// JIRA Story Requirements – Field Validation
|
|
34
|
+
// ===========================================================================
|
|
35
|
+
describe("JIRA Story: UPA Transaction Processing – Field Validation", () => {
|
|
36
|
+
let device;
|
|
37
|
+
beforeEach(() => {
|
|
38
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
39
|
+
});
|
|
40
|
+
/**
|
|
41
|
+
* Requirement: clerkId
|
|
42
|
+
* Status: withClerkId() method should be available on builder
|
|
43
|
+
*/
|
|
44
|
+
test("[Requirement:clerkId] Builder has withClerkId method", async () => {
|
|
45
|
+
const builder = device.sale(10.0);
|
|
46
|
+
expect(builder).toHaveProperty("withClerkId");
|
|
47
|
+
expect(typeof builder.withClerkId).toBe("function");
|
|
48
|
+
// Should be chainable
|
|
49
|
+
const chained = builder.withClerkId(123);
|
|
50
|
+
expect(chained).toBeDefined();
|
|
51
|
+
expect(chained).toEqual(builder); // Returns self for chaining
|
|
52
|
+
});
|
|
53
|
+
/**
|
|
54
|
+
* Requirement: cardBrandTransId
|
|
55
|
+
* Status: withCardBrandTransId() method should exist and work
|
|
56
|
+
*/
|
|
57
|
+
test("[Requirement:cardBrandTransId] Builder has withCardBrandTransId method", async () => {
|
|
58
|
+
const builder = device.sale(10.0);
|
|
59
|
+
const transId = "ABC123XYZ";
|
|
60
|
+
expect(builder).toHaveProperty("withCardBrandTransId");
|
|
61
|
+
expect(typeof builder.withCardBrandTransId).toBe("function");
|
|
62
|
+
// Should be chainable and store value
|
|
63
|
+
const chained = builder.withCardBrandTransId(transId);
|
|
64
|
+
expect(chained).toBeDefined();
|
|
65
|
+
expect(chained).toEqual(builder);
|
|
66
|
+
expect(builder.cardBrandTransId).toBe(transId);
|
|
67
|
+
});
|
|
68
|
+
/**
|
|
69
|
+
* Requirement: lineItemLeft / lineItemRight
|
|
70
|
+
* Status: withLineItemLeft() and withLineItemRight() methods should exist
|
|
71
|
+
*/
|
|
72
|
+
test("[Requirement:lineItem] Builder has withLineItemLeft and withLineItemRight methods", async () => {
|
|
73
|
+
const builder = device.sale(10.0);
|
|
74
|
+
const leftText = "Item 1";
|
|
75
|
+
const rightText = "$10.00";
|
|
76
|
+
expect(builder).toHaveProperty("withLineItemLeft");
|
|
77
|
+
expect(builder).toHaveProperty("withLineItemRight");
|
|
78
|
+
builder.withLineItemLeft(leftText).withLineItemRight(rightText);
|
|
79
|
+
expect(builder.lineItemLeft).toBe(leftText);
|
|
80
|
+
expect(builder.lineItemRight).toBe(rightText);
|
|
81
|
+
});
|
|
82
|
+
/**
|
|
83
|
+
* Requirement: languageCode
|
|
84
|
+
* Status: Should be available via withLanguage method
|
|
85
|
+
*/
|
|
86
|
+
test("[Requirement:languageCode] Builder has withLanguage method", async () => {
|
|
87
|
+
const builder = device.sale(10.0);
|
|
88
|
+
const langCode = "en";
|
|
89
|
+
expect(builder).toHaveProperty("withLanguage");
|
|
90
|
+
expect(typeof builder.withLanguage).toBe("function");
|
|
91
|
+
builder.withLanguage(langCode);
|
|
92
|
+
expect(builder.language).toBe(langCode);
|
|
93
|
+
});
|
|
94
|
+
/**
|
|
95
|
+
* Requirement: merchantDecision
|
|
96
|
+
* Status: withMerchantDecision() method should exist
|
|
97
|
+
*/
|
|
98
|
+
test("[Requirement:merchantDecision] Builder has withMerchantDecision method", async () => {
|
|
99
|
+
const builder = device.sale(10.0);
|
|
100
|
+
const decision = "Approve";
|
|
101
|
+
expect(builder).toHaveProperty("withMerchantDecision");
|
|
102
|
+
expect(typeof builder.withMerchantDecision).toBe("function");
|
|
103
|
+
builder.withMerchantDecision(decision);
|
|
104
|
+
expect(builder.merchantDecision).toBe(decision);
|
|
105
|
+
});
|
|
106
|
+
/**
|
|
107
|
+
* Requirement: acquisitionTypes
|
|
108
|
+
* Status: withAcquisitionTypes() method should exist and accept array
|
|
109
|
+
*/
|
|
110
|
+
test("[Requirement:acquisitionTypes] Builder has withAcquisitionTypes method", async () => {
|
|
111
|
+
const builder = device.sale(10.0);
|
|
112
|
+
const types = [AcquisitionType_1.AcquisitionType.Contact, AcquisitionType_1.AcquisitionType.Contactless];
|
|
113
|
+
expect(builder).toHaveProperty("withAcquisitionTypes");
|
|
114
|
+
expect(typeof builder.withAcquisitionTypes).toBe("function");
|
|
115
|
+
builder.withAcquisitionTypes(types);
|
|
116
|
+
expect(builder.acquisitionTypes).toEqual(types);
|
|
117
|
+
});
|
|
118
|
+
/**
|
|
119
|
+
* Requirement: cardOnFileIndicator
|
|
120
|
+
* Status: Should support CardHolder ('C'), Merchant ('M')
|
|
121
|
+
* Note: R (Recurring) and I (Installment) may require additional enum values
|
|
122
|
+
*/
|
|
123
|
+
test("[Requirement:cardOnFileIndicator] Builder supports CardHolder and Merchant indicators", async () => {
|
|
124
|
+
const builderCH = device
|
|
125
|
+
.sale(10.0)
|
|
126
|
+
.withCardOnFileIndicator(src_1.StoredCredentialInitiator.CardHolder);
|
|
127
|
+
const builderM = device
|
|
128
|
+
.sale(10.0)
|
|
129
|
+
.withCardOnFileIndicator(src_1.StoredCredentialInitiator.Merchant);
|
|
130
|
+
expect(builderCH.cardOnFileIndicator).toBe(src_1.StoredCredentialInitiator.CardHolder);
|
|
131
|
+
expect(builderM.cardOnFileIndicator).toBe(src_1.StoredCredentialInitiator.Merchant);
|
|
132
|
+
});
|
|
133
|
+
/**
|
|
134
|
+
* Requirement: preAuthAmount
|
|
135
|
+
* Status: withPreAuthAmount() should exist and use proper formatting
|
|
136
|
+
*/
|
|
137
|
+
test("[Requirement:preAuthAmount] Builder has withPreAuthAmount with proper formatting", async () => {
|
|
138
|
+
const builder = device.authorize(15.0);
|
|
139
|
+
const preAuthAmt = 25.99;
|
|
140
|
+
expect(builder).toHaveProperty("withPreAuthAmount");
|
|
141
|
+
expect(typeof builder.withPreAuthAmount).toBe("function");
|
|
142
|
+
builder.withPreAuthAmount(preAuthAmt);
|
|
143
|
+
expect(builder.preAuthAmount).toBe(preAuthAmt);
|
|
144
|
+
});
|
|
145
|
+
/**
|
|
146
|
+
* Requirement: Processing Indicators
|
|
147
|
+
* Status: Builder should support quickChip, checkLuhn, securityCode
|
|
148
|
+
*/
|
|
149
|
+
test("[Requirement:processingIndicators] Builder supports processing indicator flags", async () => {
|
|
150
|
+
const builder = device.sale(10.0);
|
|
151
|
+
// These should be properties on the builder
|
|
152
|
+
expect(builder).toHaveProperty("isQuickChip");
|
|
153
|
+
expect(builder).toHaveProperty("hasCheckLuhn");
|
|
154
|
+
expect(builder).toHaveProperty("hasSecurityCode");
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
// ===========================================================================
|
|
158
|
+
// JIRA Story Requirements – Method Chaining
|
|
159
|
+
// ===========================================================================
|
|
160
|
+
describe("JIRA Story: UPA Transaction Processing – Method Chaining", () => {
|
|
161
|
+
let device;
|
|
162
|
+
beforeEach(() => {
|
|
163
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
164
|
+
});
|
|
165
|
+
/**
|
|
166
|
+
* All required methods should be chainable
|
|
167
|
+
*/
|
|
168
|
+
test("[MethodChaining] All required methods are chainable", () => {
|
|
169
|
+
const result = device
|
|
170
|
+
.sale(25.0)
|
|
171
|
+
.withClerkId(101)
|
|
172
|
+
.withCardOnFileIndicator(src_1.StoredCredentialInitiator.CardHolder)
|
|
173
|
+
.withCardBrandTransId("TransID123")
|
|
174
|
+
.withLineItemLeft("Item Description")
|
|
175
|
+
.withLineItemRight("$25.00")
|
|
176
|
+
.withLanguage("en")
|
|
177
|
+
.withMerchantDecision("Approve")
|
|
178
|
+
.withAcquisitionTypes([AcquisitionType_1.AcquisitionType.Contact])
|
|
179
|
+
.withPreAuthAmount(50.0);
|
|
180
|
+
// Verify all values are set
|
|
181
|
+
expect(result.amount).toBe(25.0);
|
|
182
|
+
expect(result.clerkId).toBe(101);
|
|
183
|
+
expect(result.cardOnFileIndicator).toBe(src_1.StoredCredentialInitiator.CardHolder);
|
|
184
|
+
expect(result.cardBrandTransId).toBe("TransID123");
|
|
185
|
+
expect(result.lineItemLeft).toBe("Item Description");
|
|
186
|
+
expect(result.lineItemRight).toBe("$25.00");
|
|
187
|
+
expect(result.language).toBe("en");
|
|
188
|
+
expect(result.merchantDecision).toBe("Approve");
|
|
189
|
+
expect(result.acquisitionTypes).toEqual([AcquisitionType_1.AcquisitionType.Contact]);
|
|
190
|
+
expect(result.preAuthAmount).toBe(50.0);
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
// ===========================================================================
|
|
194
|
+
// JIRA Story Requirements – Comprehensive Integration Test
|
|
195
|
+
// ===========================================================================
|
|
196
|
+
describe("JIRA Story: UPA Transaction Processing – Comprehensive Integration", () => {
|
|
197
|
+
let device;
|
|
198
|
+
beforeEach(() => {
|
|
199
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
200
|
+
});
|
|
201
|
+
/**
|
|
202
|
+
* Complete transaction with all fields
|
|
203
|
+
* This test demonstrates that a merchant can build a complete
|
|
204
|
+
* UPA transaction request using the SDK without manual code.
|
|
205
|
+
*/
|
|
206
|
+
test("[Integration:Complete] Sale with all JIRA story requirements", async () => {
|
|
207
|
+
// Build complete sale transaction matching JIRA requirements
|
|
208
|
+
const builder = device
|
|
209
|
+
.sale(99.99)
|
|
210
|
+
.withClerkId(42)
|
|
211
|
+
.withCardOnFileIndicator(src_1.StoredCredentialInitiator.CardHolder)
|
|
212
|
+
.withCardBrandTransId("BrandTxnId-2026-001")
|
|
213
|
+
.withLineItemLeft("Premium Widget")
|
|
214
|
+
.withLineItemRight("$99.99")
|
|
215
|
+
.withLanguage("en")
|
|
216
|
+
.withMerchantDecision("Approve")
|
|
217
|
+
.withAcquisitionTypes([
|
|
218
|
+
AcquisitionType_1.AcquisitionType.Contact,
|
|
219
|
+
AcquisitionType_1.AcquisitionType.Contactless,
|
|
220
|
+
])
|
|
221
|
+
.withPreAuthAmount(150.0)
|
|
222
|
+
.withInvoiceNumber("INV-2026-0001")
|
|
223
|
+
.withRequestMultiUseToken(true);
|
|
224
|
+
// Verify all properties are accessible (without execution)
|
|
225
|
+
const builderAsAny = builder;
|
|
226
|
+
expect(builderAsAny.amount).toBe(99.99);
|
|
227
|
+
expect(builderAsAny.clerkId).toBe(42);
|
|
228
|
+
expect(builderAsAny.cardOnFileIndicator).toBe(src_1.StoredCredentialInitiator.CardHolder);
|
|
229
|
+
expect(builderAsAny.cardBrandTransId).toBe("BrandTxnId-2026-001");
|
|
230
|
+
expect(builderAsAny.lineItemLeft).toBe("Premium Widget");
|
|
231
|
+
expect(builderAsAny.lineItemRight).toBe("$99.99");
|
|
232
|
+
expect(builderAsAny.language).toBe("en");
|
|
233
|
+
expect(builderAsAny.merchantDecision).toBe("Approve");
|
|
234
|
+
expect(builderAsAny.acquisitionTypes).toEqual([
|
|
235
|
+
AcquisitionType_1.AcquisitionType.Contact,
|
|
236
|
+
AcquisitionType_1.AcquisitionType.Contactless,
|
|
237
|
+
]);
|
|
238
|
+
expect(builderAsAny.preAuthAmount).toBe(150.0);
|
|
239
|
+
expect(builderAsAny.invoiceNumber).toBe("INV-2026-0001");
|
|
240
|
+
expect(builderAsAny.requestMultiUseToken).toBe(true);
|
|
241
|
+
});
|
|
242
|
+
/**
|
|
243
|
+
* Refund with cardOnFileIndicator - Merchant initiated
|
|
244
|
+
*/
|
|
245
|
+
test("[Integration:Refund] Refund with Merchant cardOnFileIndicator", async () => {
|
|
246
|
+
const builder = device
|
|
247
|
+
.refund(50.0)
|
|
248
|
+
.withTransactionId("OriginalTxnId123")
|
|
249
|
+
.withClerkId(101)
|
|
250
|
+
.withCardOnFileIndicator(src_1.StoredCredentialInitiator.Merchant)
|
|
251
|
+
.withLanguage("fr");
|
|
252
|
+
const builderAsAny = builder;
|
|
253
|
+
expect(builderAsAny.amount).toBe(50.0);
|
|
254
|
+
expect(builderAsAny.clerkId).toBe(101);
|
|
255
|
+
expect(builderAsAny.cardOnFileIndicator).toBe(src_1.StoredCredentialInitiator.Merchant);
|
|
256
|
+
expect(builderAsAny.language).toBe("fr");
|
|
257
|
+
});
|
|
258
|
+
/**
|
|
259
|
+
* Pre-Authorization with all fields
|
|
260
|
+
*/
|
|
261
|
+
test("[Integration:PreAuth] Pre-Auth with preAuthAmount and processing indicators", async () => {
|
|
262
|
+
const builder = device
|
|
263
|
+
.authorize(200.0)
|
|
264
|
+
.withClerkId(55)
|
|
265
|
+
.withCardBrandTransId("PreAuthBrandId")
|
|
266
|
+
.withLineItemLeft("Service Charge")
|
|
267
|
+
.withLineItemRight("$200.00")
|
|
268
|
+
.withPreAuthAmount(250.0)
|
|
269
|
+
.withLanguage("es");
|
|
270
|
+
const builderAsAny = builder;
|
|
271
|
+
expect(builderAsAny.amount).toBe(200.0);
|
|
272
|
+
expect(builderAsAny.clerkId).toBe(55);
|
|
273
|
+
expect(builderAsAny.cardBrandTransId).toBe("PreAuthBrandId");
|
|
274
|
+
expect(builderAsAny.lineItemLeft).toBe("Service Charge");
|
|
275
|
+
expect(builderAsAny.lineItemRight).toBe("$200.00");
|
|
276
|
+
expect(builderAsAny.preAuthAmount).toBe(250.0);
|
|
277
|
+
expect(builderAsAny.language).toBe("es");
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
// ===========================================================================
|
|
281
|
+
// JIRA Story Requirements – Value Mapping Validation
|
|
282
|
+
// ===========================================================================
|
|
283
|
+
describe("JIRA Story: UPA Transaction Processing – Value Mapping", () => {
|
|
284
|
+
let device;
|
|
285
|
+
beforeEach(() => {
|
|
286
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
287
|
+
});
|
|
288
|
+
/**
|
|
289
|
+
* Verify that cardOnFileIndicator values map correctly:
|
|
290
|
+
* CardHolder -> 'C', Merchant -> 'M'
|
|
291
|
+
*/
|
|
292
|
+
test("[Mapping:cardOnFileIndicator] Enum values map to correct UPA strings", () => {
|
|
293
|
+
// The enum itself stores the mapped values
|
|
294
|
+
expect(src_1.StoredCredentialInitiator.CardHolder).toBe("C");
|
|
295
|
+
expect(src_1.StoredCredentialInitiator.Merchant).toBe("M");
|
|
296
|
+
});
|
|
297
|
+
/**
|
|
298
|
+
* Verify acquisitionTypes can be joined for UPA format
|
|
299
|
+
*/
|
|
300
|
+
test("[Mapping:acquisitionTypes] Array joins correctly for UPA request", () => {
|
|
301
|
+
const types = [
|
|
302
|
+
AcquisitionType_1.AcquisitionType.Contact,
|
|
303
|
+
AcquisitionType_1.AcquisitionType.Contactless,
|
|
304
|
+
AcquisitionType_1.AcquisitionType.Swipe,
|
|
305
|
+
];
|
|
306
|
+
const joined = types.join("|");
|
|
307
|
+
expect(joined).toMatch(/Contact\|Contactless\|Swipe/);
|
|
308
|
+
});
|
|
309
|
+
/**
|
|
310
|
+
* Verify languageCode correct values
|
|
311
|
+
*/
|
|
312
|
+
test("[Mapping:languageCode] Supports standard ISO 639-1 language codes", () => {
|
|
313
|
+
const builder = device.sale(10.0);
|
|
314
|
+
const english = builder.withLanguage("en");
|
|
315
|
+
const french = device.sale(10.0).withLanguage("fr");
|
|
316
|
+
const spanish = device.sale(10.0).withLanguage("es");
|
|
317
|
+
expect(english.language).toBe("en");
|
|
318
|
+
expect(french.language).toBe("fr");
|
|
319
|
+
expect(spanish.language).toBe("es");
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
// ===========================================================================
|
|
323
|
+
// JIRA Story Requirements – Acceptance Conditions
|
|
324
|
+
// ===========================================================================
|
|
325
|
+
describe("JIRA Story: UPA Transaction Processing – Acceptance Criteria", () => {
|
|
326
|
+
/**
|
|
327
|
+
* Acceptance Criteria:
|
|
328
|
+
* Region: US
|
|
329
|
+
* Gateway: GP-API
|
|
330
|
+
* Environment: Sandbox
|
|
331
|
+
* Devices: UPA
|
|
332
|
+
* Payment Types: MC, VISA, Amex
|
|
333
|
+
* Credentials: Non-specific
|
|
334
|
+
*
|
|
335
|
+
* GIVEN: Node SDK is used
|
|
336
|
+
* WHEN: Tests run with all required fields
|
|
337
|
+
* THEN: Request goes through to UPA and transaction processes successfully
|
|
338
|
+
*/
|
|
339
|
+
test("[Acceptance:Criteria] All JIRA requirements are testable", () => {
|
|
340
|
+
// This test verifies the structure supports the acceptance criteria
|
|
341
|
+
const device = (0, UpaHelpertest_1.createTestDevice)();
|
|
342
|
+
// Verify device is properly configured
|
|
343
|
+
expect(device).toBeDefined();
|
|
344
|
+
expect(device).toHaveProperty("sale");
|
|
345
|
+
expect(device).toHaveProperty("authorize");
|
|
346
|
+
expect(device).toHaveProperty("refund");
|
|
347
|
+
// Verify all builder methods are available
|
|
348
|
+
const saleBuilder = device.sale(10.0);
|
|
349
|
+
const requiredMethods = [
|
|
350
|
+
"withClerkId",
|
|
351
|
+
"withCardOnFileIndicator",
|
|
352
|
+
"withCardBrandTransId",
|
|
353
|
+
"withLineItemLeft",
|
|
354
|
+
"withLineItemRight",
|
|
355
|
+
"withLanguage",
|
|
356
|
+
"withMerchantDecision",
|
|
357
|
+
"withAcquisitionTypes",
|
|
358
|
+
"withPreAuthAmount",
|
|
359
|
+
"execute",
|
|
360
|
+
];
|
|
361
|
+
for (const method of requiredMethods) {
|
|
362
|
+
expect(saleBuilder).toHaveProperty(method);
|
|
363
|
+
expect(typeof saleBuilder[method]).toBe("function");
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
/**
|
|
367
|
+
* Verify no manual code is needed - SDK handles everything
|
|
368
|
+
*/
|
|
369
|
+
test("[Acceptance:NoManualCode] SDK methods handle all required fields", () => {
|
|
370
|
+
const device = (0, UpaHelpertest_1.createTestDevice)();
|
|
371
|
+
// Developer can build complete request using only SDK methods
|
|
372
|
+
const builder = device
|
|
373
|
+
.sale(100.0)
|
|
374
|
+
.withClerkId(1)
|
|
375
|
+
.withCardOnFileIndicator(src_1.StoredCredentialInitiator.CardHolder)
|
|
376
|
+
.withCardBrandTransId("BRAND-001")
|
|
377
|
+
.withLineItemLeft("Test Item")
|
|
378
|
+
.withLineItemRight("$100.00")
|
|
379
|
+
.withLanguage("en")
|
|
380
|
+
.withMerchantDecision("Approve")
|
|
381
|
+
.withAcquisitionTypes([AcquisitionType_1.AcquisitionType.Contact])
|
|
382
|
+
.withPreAuthAmount(125.0);
|
|
383
|
+
// All fields should be set without manual property access
|
|
384
|
+
expect(builder.amount).toBe(100.0);
|
|
385
|
+
expect(builder.clerkId).toBe(1);
|
|
386
|
+
expect(builder.cardOnFileIndicator).toBe(src_1.StoredCredentialInitiator.CardHolder);
|
|
387
|
+
});
|
|
388
|
+
});
|
|
389
|
+
//# sourceMappingURL=UpaJiraStoryValidation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpaJiraStoryValidation.test.js","sourceRoot":"","sources":["../../../../../test/Unit/Terminals/UPA/UpaJiraStoryValidation.test.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;AAEH,yCAA8E;AAC9E,oFAAiF;AACjF,mDAAmD;AAEnD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAExB,8EAA8E;AAC9E,6CAA6C;AAC7C,8EAA8E;AAC9E,QAAQ,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACzE,IAAI,MAAwB,CAAC;IAE7B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAA,gCAAgB,GAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAElC,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpD,sBAAsB;QACtB,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B;IAChE,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,IAAI,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,WAAW,CAAC;QAE5B,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,OAAO,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7D,sCAAsC;QACtC,MAAM,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,CAAE,OAAe,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,IAAI,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACnG,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC;QAC1B,MAAM,SAAS,GAAG,QAAQ,CAAC;QAE3B,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QAEpD,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAChE,MAAM,CAAE,OAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,CAAE,OAAe,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,IAAI,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC;QAEtB,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErD,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC/B,MAAM,CAAE,OAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,IAAI,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,SAAS,CAAC;QAE3B,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,OAAO,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7D,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,CAAE,OAAe,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,IAAI,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,CAAC,iCAAe,CAAC,OAAO,EAAE,iCAAe,CAAC,WAAW,CAAC,CAAC;QAErE,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,OAAO,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7D,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,CAAE,OAAe,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH;;;;OAIG;IACH,IAAI,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;QACvG,MAAM,SAAS,GAAG,MAAM;aACrB,IAAI,CAAC,IAAI,CAAC;aACV,uBAAuB,CAAC,+BAAyB,CAAC,UAAU,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,MAAM;aACpB,IAAI,CAAC,IAAI,CAAC;aACV,uBAAuB,CAAC,+BAAyB,CAAC,QAAQ,CAAC,CAAC;QAE/D,MAAM,CAAE,SAAiB,CAAC,mBAAmB,CAAC,CAAC,IAAI,CACjD,+BAAyB,CAAC,UAAU,CACrC,CAAC;QACF,MAAM,CAAE,QAAgB,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAChD,+BAAyB,CAAC,QAAQ,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,IAAI,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAClG,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,KAAK,CAAC;QAEzB,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1D,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,CAAE,OAAe,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,IAAI,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAQ,CAAC;QAEzC,4CAA4C;QAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,4CAA4C;AAC5C,8EAA8E;AAC9E,QAAQ,CAAC,0DAA0D,EAAE,GAAG,EAAE;IACxE,IAAI,MAAwB,CAAC;IAE7B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAA,gCAAgB,GAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC/D,MAAM,MAAM,GAAG,MAAM;aAClB,IAAI,CAAC,IAAI,CAAC;aACV,WAAW,CAAC,GAAG,CAAC;aAChB,uBAAuB,CAAC,+BAAyB,CAAC,UAAU,CAAC;aAC7D,oBAAoB,CAAC,YAAY,CAAC;aAClC,gBAAgB,CAAC,kBAAkB,CAAC;aACpC,iBAAiB,CAAC,QAAQ,CAAC;aAC3B,YAAY,CAAC,IAAI,CAAC;aAClB,oBAAoB,CAAC,SAAS,CAAC;aAC/B,oBAAoB,CAAC,CAAC,iCAAe,CAAC,OAAO,CAAC,CAAC;aAC/C,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAE3B,4BAA4B;QAC5B,MAAM,CAAE,MAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAE,MAAc,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,CAAE,MAAc,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAC9C,+BAAyB,CAAC,UAAU,CACrC,CAAC;QACF,MAAM,CAAE,MAAc,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5D,MAAM,CAAE,MAAc,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC9D,MAAM,CAAE,MAAc,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,CAAE,MAAc,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAE,MAAc,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,CAAE,MAAc,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,iCAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5E,MAAM,CAAE,MAAc,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,2DAA2D;AAC3D,8EAA8E;AAC9E,QAAQ,CAAC,oEAAoE,EAAE,GAAG,EAAE;IAClF,IAAI,MAAwB,CAAC;IAE7B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAA,gCAAgB,GAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH;;;;OAIG;IACH,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC9E,6DAA6D;QAC7D,MAAM,OAAO,GAAG,MAAM;aACnB,IAAI,CAAC,KAAK,CAAC;aACX,WAAW,CAAC,EAAE,CAAC;aACf,uBAAuB,CAAC,+BAAyB,CAAC,UAAU,CAAC;aAC7D,oBAAoB,CAAC,qBAAqB,CAAC;aAC3C,gBAAgB,CAAC,gBAAgB,CAAC;aAClC,iBAAiB,CAAC,QAAQ,CAAC;aAC3B,YAAY,CAAC,IAAI,CAAC;aAClB,oBAAoB,CAAC,SAAS,CAAC;aAC/B,oBAAoB,CAAC;YACpB,iCAAe,CAAC,OAAO;YACvB,iCAAe,CAAC,WAAW;SAC5B,CAAC;aACD,iBAAiB,CAAC,KAAK,CAAC;aACxB,iBAAiB,CAAC,eAAe,CAAC;aAClC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAElC,2DAA2D;QAC3D,MAAM,YAAY,GAAG,OAAc,CAAC;QACpC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAC3C,+BAAyB,CAAC,UAAU,CACrC,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzD,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC;YAC5C,iCAAe,CAAC,OAAO;YACvB,iCAAe,CAAC,WAAW;SAC5B,CAAC,CAAC;QACH,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzD,MAAM,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,IAAI,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,OAAO,GAAG,MAAM;aACnB,MAAM,CAAC,IAAI,CAAC;aACZ,iBAAiB,CAAC,kBAAkB,CAAC;aACrC,WAAW,CAAC,GAAG,CAAC;aAChB,uBAAuB,CAAC,+BAAyB,CAAC,QAAQ,CAAC;aAC3D,YAAY,CAAC,IAAI,CAAC,CAAC;QAEtB,MAAM,YAAY,GAAG,OAAc,CAAC;QACpC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAC3C,+BAAyB,CAAC,QAAQ,CACnC,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,IAAI,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,OAAO,GAAG,MAAM;aACnB,SAAS,CAAC,KAAK,CAAC;aAChB,WAAW,CAAC,EAAE,CAAC;aACf,oBAAoB,CAAC,gBAAgB,CAAC;aACtC,gBAAgB,CAAC,gBAAgB,CAAC;aAClC,iBAAiB,CAAC,SAAS,CAAC;aAC5B,iBAAiB,CAAC,KAAK,CAAC;aACxB,YAAY,CAAC,IAAI,CAAC,CAAC;QAEtB,MAAM,YAAY,GAAG,OAAc,CAAC;QACpC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7D,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzD,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,qDAAqD;AACrD,8EAA8E;AAC9E,QAAQ,CAAC,wDAAwD,EAAE,GAAG,EAAE;IACtE,IAAI,MAAwB,CAAC;IAE7B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAA,gCAAgB,GAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,IAAI,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAChF,2CAA2C;QAC3C,MAAM,CAAC,+BAAyB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvD,MAAM,CAAC,+BAAyB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,IAAI,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC5E,MAAM,KAAK,GAAG;YACZ,iCAAe,CAAC,OAAO;YACvB,iCAAe,CAAC,WAAW;YAC3B,iCAAe,CAAC,KAAK;SACtB,CAAC;QACF,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE/B,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,IAAI,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC7E,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAElC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAQ,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAQ,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAQ,CAAC;QAE5D,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,kDAAkD;AAClD,8EAA8E;AAC9E,QAAQ,CAAC,8DAA8D,EAAE,GAAG,EAAE;IAC5E;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,0DAA0D,EAAE,GAAG,EAAE;QACpE,oEAAoE;QACpE,MAAM,MAAM,GAAG,IAAA,gCAAgB,GAAE,CAAC;QAElC,uCAAuC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAExC,2CAA2C;QAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,eAAe,GAAG;YACtB,aAAa;YACb,yBAAyB;YACzB,sBAAsB;YACtB,kBAAkB;YAClB,mBAAmB;YACnB,cAAc;YACd,sBAAsB;YACtB,sBAAsB;YACtB,mBAAmB;YACnB,SAAS;SACV,CAAC;QAEF,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE;YACpC,MAAM,CAAC,WAAW,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,CAAC,OAAQ,WAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC9D;IACH,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,IAAI,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC5E,MAAM,MAAM,GAAG,IAAA,gCAAgB,GAAE,CAAC;QAElC,8DAA8D;QAC9D,MAAM,OAAO,GAAG,MAAM;aACnB,IAAI,CAAC,KAAK,CAAC;aACX,WAAW,CAAC,CAAC,CAAC;aACd,uBAAuB,CAAC,+BAAyB,CAAC,UAAU,CAAC;aAC7D,oBAAoB,CAAC,WAAW,CAAC;aACjC,gBAAgB,CAAC,WAAW,CAAC;aAC7B,iBAAiB,CAAC,SAAS,CAAC;aAC5B,YAAY,CAAC,IAAI,CAAC;aAClB,oBAAoB,CAAC,SAAS,CAAC;aAC/B,oBAAoB,CAAC,CAAC,iCAAe,CAAC,OAAO,CAAC,CAAC;aAC/C,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAE5B,0DAA0D;QAC1D,MAAM,CAAE,OAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAE,OAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAE,OAAe,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAC/C,+BAAyB,CAAC,UAAU,CACrC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for UPA EMV command languageCode parameter support.
|
|
3
|
+
*
|
|
4
|
+
* Tests verify that all four EMV workflow commands correctly:
|
|
5
|
+
* 1. Accept optional languageCode parameter
|
|
6
|
+
* 2. Serialize languageCode to data.params when provided
|
|
7
|
+
* 3. Omit data.params node when languageCode is undefined/null
|
|
8
|
+
* 4. Return standard TransactionResponse
|
|
9
|
+
*
|
|
10
|
+
* Per UPA Integrators Guide 02.20.02.B:
|
|
11
|
+
* - ContinueEMVTransaction: Controls language for EMV/cardholder prompts
|
|
12
|
+
* - CompleteEMVTransaction: Controls language during transaction completion
|
|
13
|
+
* - RemoveCard: Controls language of "Remove Card" prompt
|
|
14
|
+
* - ContinueCardTransaction: Controls language for FI card transaction flow
|
|
15
|
+
*
|
|
16
|
+
* Supported ISO 639-1 language codes: "en", "fr", "es", etc.
|
|
17
|
+
*/
|
|
18
|
+
export {};
|