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.
Files changed (98) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/lib/src/Entities/Address.d.ts +1 -0
  3. package/lib/src/Entities/Address.js +1 -0
  4. package/lib/src/Entities/Address.js.map +1 -1
  5. package/lib/src/Entities/Enums/AcquisitionType.d.ts +2 -1
  6. package/lib/src/Entities/Enums/AcquisitionType.js +1 -0
  7. package/lib/src/Entities/Enums/AcquisitionType.js.map +1 -1
  8. package/lib/src/Entities/Errors.d.ts +7 -1
  9. package/lib/src/Entities/Errors.js +30 -1
  10. package/lib/src/Entities/Errors.js.map +1 -1
  11. package/lib/src/Entities/TransactionSummary.d.ts +5 -0
  12. package/lib/src/Entities/TransactionSummary.js +5 -0
  13. package/lib/src/Entities/TransactionSummary.js.map +1 -1
  14. package/lib/src/Terminals/Abstractions/IDeviceResponse.d.ts +48 -0
  15. package/lib/src/Terminals/Builders/TerminalAuthBuilder.d.ts +15 -0
  16. package/lib/src/Terminals/Builders/TerminalAuthBuilder.js +29 -2
  17. package/lib/src/Terminals/Builders/TerminalAuthBuilder.js.map +1 -1
  18. package/lib/src/Terminals/Builders/TerminalBuilder.d.ts +3 -3
  19. package/lib/src/Terminals/Builders/TerminalBuilder.js.map +1 -1
  20. package/lib/src/Terminals/Builders/TerminalManageBuilder.d.ts +3 -0
  21. package/lib/src/Terminals/Builders/TerminalManageBuilder.js +6 -0
  22. package/lib/src/Terminals/Builders/TerminalManageBuilder.js.map +1 -1
  23. package/lib/src/Terminals/UPA/Reponses/BatchReportResponse.d.ts +9 -1
  24. package/lib/src/Terminals/UPA/Reponses/BatchReportResponse.js +22 -2
  25. package/lib/src/Terminals/UPA/Reponses/BatchReportResponse.js.map +1 -1
  26. package/lib/src/Terminals/UPA/Reponses/SafReportResponse.js +9 -0
  27. package/lib/src/Terminals/UPA/Reponses/SafReportResponse.js.map +1 -1
  28. package/lib/src/Terminals/UPA/Reponses/TransactionResponse.d.ts +3 -0
  29. package/lib/src/Terminals/UPA/Reponses/TransactionResponse.js +30 -0
  30. package/lib/src/Terminals/UPA/Reponses/TransactionResponse.js.map +1 -1
  31. package/lib/src/Terminals/UPA/Reponses/UpaEODResponse.d.ts +21 -1
  32. package/lib/src/Terminals/UPA/Reponses/UpaEODResponse.js +29 -0
  33. package/lib/src/Terminals/UPA/Reponses/UpaEODResponse.js.map +1 -1
  34. package/lib/src/Terminals/UPA/Reponses/UpaSAFResponse.js +5 -7
  35. package/lib/src/Terminals/UPA/Reponses/UpaSAFResponse.js.map +1 -1
  36. package/lib/src/Terminals/UPA/UpaController.js +43 -7
  37. package/lib/src/Terminals/UPA/UpaController.js.map +1 -1
  38. package/lib/src/Terminals/UPA/UpaInterface.d.ts +1 -1
  39. package/lib/src/Terminals/UPA/UpaInterface.js +4 -2
  40. package/lib/src/Terminals/UPA/UpaInterface.js.map +1 -1
  41. package/lib/test/Unit/Terminals/Builders/TerminalBuilderParityTests.d.ts +17 -0
  42. package/lib/test/Unit/Terminals/Builders/TerminalBuilderParityTests.js +325 -0
  43. package/lib/test/Unit/Terminals/Builders/TerminalBuilderParityTests.js.map +1 -0
  44. package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/BatchList.test.js +2 -3
  45. package/lib/test/Unit/Terminals/UPA/Responses/BatchList.test.js.map +1 -0
  46. package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/BatchReportResponse.test.js +3 -3
  47. package/lib/test/Unit/Terminals/UPA/Responses/BatchReportResponse.test.js.map +1 -0
  48. package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/OpenTabDetailsResponse.test.js +2 -2
  49. package/lib/test/Unit/Terminals/UPA/Responses/OpenTabDetailsResponse.test.js.map +1 -0
  50. package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/SafReportResponse.test.js +2 -2
  51. package/lib/test/Unit/Terminals/UPA/Responses/SafReportResponse.test.js.map +1 -0
  52. package/lib/test/Unit/Terminals/UPA/Responses/UpaEODResponse.test.js +59 -0
  53. package/lib/test/Unit/Terminals/UPA/Responses/UpaEODResponse.test.js.map +1 -0
  54. package/lib/test/Unit/Terminals/UPA/Responses/UpaSAFResponse.test.js.map +1 -0
  55. package/lib/test/Unit/Terminals/UPA/UpaAdmin.test.js +195 -3
  56. package/lib/test/Unit/Terminals/UPA/UpaAdmin.test.js.map +1 -1
  57. package/lib/test/Unit/Terminals/UPA/UpaCredit.test.js +147 -31
  58. package/lib/test/Unit/Terminals/UPA/UpaCredit.test.js.map +1 -1
  59. package/lib/test/Unit/Terminals/UPA/UpaEMVParameterValidation.test.d.ts +7 -0
  60. package/lib/test/Unit/Terminals/UPA/UpaEMVParameterValidation.test.js +258 -0
  61. package/lib/test/Unit/Terminals/UPA/UpaEMVParameterValidation.test.js.map +1 -0
  62. package/lib/test/Unit/Terminals/UPA/UpaErrorResponse.test.d.ts +21 -0
  63. package/lib/test/Unit/Terminals/UPA/UpaErrorResponse.test.js +533 -0
  64. package/lib/test/Unit/Terminals/UPA/UpaErrorResponse.test.js.map +1 -0
  65. package/lib/test/Unit/Terminals/UPA/UpaHelpertest.js +1 -1
  66. package/lib/test/Unit/Terminals/UPA/UpaJiraStoryValidation.test.d.ts +26 -0
  67. package/lib/test/Unit/Terminals/UPA/UpaJiraStoryValidation.test.js +389 -0
  68. package/lib/test/Unit/Terminals/UPA/UpaJiraStoryValidation.test.js.map +1 -0
  69. package/lib/test/Unit/Terminals/UPA/UpaLanguageCode.test.d.ts +18 -0
  70. package/lib/test/Unit/Terminals/UPA/UpaLanguageCode.test.js +314 -0
  71. package/lib/test/Unit/Terminals/UPA/UpaLanguageCode.test.js.map +1 -0
  72. package/package.json +1 -1
  73. package/lib/test/Unit/Builders/AuthorizationBuilder/SupplementaryData.test.d.ts +0 -1
  74. package/lib/test/Unit/Builders/AuthorizationBuilder/SupplementaryData.test.js +0 -147
  75. package/lib/test/Unit/Builders/AuthorizationBuilder/SupplementaryData.test.js.map +0 -1
  76. package/lib/test/Unit/Terminals/UPA/Reponses/BatchList.test.js.map +0 -1
  77. package/lib/test/Unit/Terminals/UPA/Reponses/BatchReportResponse.test.js.map +0 -1
  78. package/lib/test/Unit/Terminals/UPA/Reponses/OpenTabDetailsResponse.test.js.map +0 -1
  79. package/lib/test/Unit/Terminals/UPA/Reponses/SafReportResponse.test.js.map +0 -1
  80. package/lib/test/Unit/Terminals/UPA/Reponses/UpaEODResponse.test.js +0 -108
  81. package/lib/test/Unit/Terminals/UPA/Reponses/UpaEODResponse.test.js.map +0 -1
  82. package/lib/test/Unit/Terminals/UPA/Reponses/UpaSAFResponse.test.js.map +0 -1
  83. package/lib/test/Unit/Terminals/UPA/UpaStory1Methods.test.d.ts +0 -1
  84. package/lib/test/Unit/Terminals/UPA/UpaStory1Methods.test.js +0 -250
  85. package/lib/test/Unit/Terminals/UPA/UpaStory1Methods.test.js.map +0 -1
  86. package/lib/test/Unit/Terminals/UPA/UpaStory2Methods.test.d.ts +0 -1
  87. package/lib/test/Unit/Terminals/UPA/UpaStory2Methods.test.js +0 -1277
  88. package/lib/test/Unit/Terminals/UPA/UpaStory2Methods.test.js.map +0 -1
  89. package/lib/test/Unit/Terminals/UPA/UpaStory3_4Methods.test.d.ts +0 -1
  90. package/lib/test/Unit/Terminals/UPA/UpaStory3_4Methods.test.js +0 -411
  91. package/lib/test/Unit/Terminals/UPA/UpaStory3_4Methods.test.js.map +0 -1
  92. /package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/BatchList.test.d.ts +0 -0
  93. /package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/BatchReportResponse.test.d.ts +0 -0
  94. /package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/OpenTabDetailsResponse.test.d.ts +0 -0
  95. /package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/SafReportResponse.test.d.ts +0 -0
  96. /package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/UpaEODResponse.test.d.ts +0 -0
  97. /package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/UpaSAFResponse.test.d.ts +0 -0
  98. /package/lib/test/Unit/Terminals/UPA/{Reponses → Responses}/UpaSAFResponse.test.js +0 -0
@@ -0,0 +1,533 @@
1
+ "use strict";
2
+ /**
3
+ * Unit tests for UPA error response properties (AH-1362)
4
+ *
5
+ * Test Cases:
6
+ * TC-01: Sale Transaction Error - Full UPA Error Properties Returned
7
+ * TC-02: Void Transaction Error - Full UPA Error Properties Returned
8
+ * TC-03: Refund Transaction Error - Full UPA Error Properties Returned
9
+ * TC-04: Cross-Card Error Parity (MC, VISA, Amex, Discover)
10
+ * TC-07: Happy Path Regression - Sale / Void / Refund Still Work
11
+ *
12
+ * Story Summary:
13
+ * As a merchant using the NodeJS SDK, I want to receive all the response properties
14
+ * in an error, so that I can properly troubleshoot without support.
15
+ *
16
+ * Acceptance Criteria:
17
+ * AC1: Error Mapping Completeness - All UPA error response properties mapped
18
+ * AC2: Error Propagation to Integrator - All properties accessible in error/exception
19
+ * AC4: No Regression - Happy-path flows unaffected
20
+ * AC5: Research-First Gate - Document if already complete
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ const src_1 = require("../../../../src");
24
+ const TransactionResponse_1 = require("../../../../src/Terminals/UPA/Reponses/TransactionResponse");
25
+ const UpaHelpertest_1 = require("./UpaHelpertest");
26
+ jest.setTimeout(240000);
27
+ function sleep(delayMs) {
28
+ return new Promise((resolve) => setTimeout(resolve, delayMs));
29
+ }
30
+ async function settleDevice(delayMs = 8000) {
31
+ if (UpaHelpertest_1.useLiveMic) {
32
+ await sleep(delayMs);
33
+ }
34
+ }
35
+ afterEach(async () => {
36
+ await settleDevice();
37
+ });
38
+ // ===========================================================================
39
+ // TC-01: Sale Transaction Error - Full UPA Error Properties Returned
40
+ // ===========================================================================
41
+ (0, UpaHelpertest_1.describeUpaLive)("TC-01: Sale Transaction Error - Full UPA Error Properties Returned", () => {
42
+ let device;
43
+ beforeEach(() => {
44
+ device = (0, UpaHelpertest_1.createTestDevice)();
45
+ });
46
+ async function expectSaleError(expectedErrorCode, executeSale) {
47
+ let caughtError;
48
+ try {
49
+ await executeSale();
50
+ }
51
+ catch (error) {
52
+ caughtError = error;
53
+ }
54
+ if (!caughtError) {
55
+ throw new Error(`Expected ${expectedErrorCode} from the UPA Sale request.`);
56
+ }
57
+ const gatewayError = caughtError;
58
+ expect(gatewayError).toBeInstanceOf(src_1.GatewayError);
59
+ expect(gatewayError.errorCode).toBeDefined();
60
+ expect(gatewayError.errorCode.trim()).toBe(expectedErrorCode);
61
+ expect(gatewayError.errorMessage).toBeTruthy();
62
+ expect(gatewayError.rawResponse).toBeDefined();
63
+ }
64
+ test("[AH-1362:TC-01] sale() error response includes all UPA error properties (VISA)", async () => {
65
+ /**
66
+ * Scenario: UPA returns an error during a Sale transaction with VISA
67
+ * Pre-condition: Trigger a known failure condition (e.g., declined card)
68
+ * Expected: Error object contains all fields returned by UPA
69
+ */
70
+ let caughtError;
71
+ let successfulResponse;
72
+ try {
73
+ successfulResponse = (await device
74
+ .sale(10.0)
75
+ .withEcrId("123")
76
+ .execute());
77
+ }
78
+ catch (error) {
79
+ caughtError = error;
80
+ }
81
+ if (!caughtError) {
82
+ throw new Error("Expected a UPA sale error, but received " +
83
+ `status=${successfulResponse?.status}, ` +
84
+ `deviceResponseCode=${successfulResponse?.deviceResponseCode}, ` +
85
+ `responseCode=${successfulResponse?.responseCode}, ` +
86
+ `responseText=${successfulResponse?.responseText}.`);
87
+ }
88
+ {
89
+ const error = caughtError;
90
+ // Verify error is a GatewayError with all properties
91
+ expect(error).toBeInstanceOf(src_1.GatewayError);
92
+ // Check for all UPA error properties mapped in error object
93
+ // Device-level error properties
94
+ expect(error).toHaveProperty("deviceResponseCode");
95
+ expect(error).toHaveProperty("deviceResponseMessage");
96
+ // Issuer/Host-level error properties (when available)
97
+ if (error.responseCode !== undefined) {
98
+ expect(error).toHaveProperty("responseCode");
99
+ }
100
+ if (error.responseMessage !== undefined) {
101
+ expect(error).toHaveProperty("responseMessage");
102
+ }
103
+ // Issuer response properties (when available)
104
+ if (error.issuerResponseCode !== undefined) {
105
+ expect(error).toHaveProperty("issuerResponseCode");
106
+ }
107
+ if (error.issuerResponseMessage !== undefined) {
108
+ expect(error).toHaveProperty("issuerResponseMessage");
109
+ }
110
+ // Verify error message contains meaningful information
111
+ expect(error.message).toBeTruthy();
112
+ expect(error.message.length).toBeGreaterThan(0);
113
+ console.log("✓ TC-01 PASSED: Sale error includes all UPA properties");
114
+ console.log(" Device Response Code:", error.deviceResponseCode);
115
+ console.log(" Device Response Message:", error.deviceResponseMessage);
116
+ console.log(" Response Code:", error.responseCode);
117
+ console.log(" Response Message:", error.responseMessage);
118
+ console.log(" Issuer Response Code:", error.issuerResponseCode);
119
+ console.log(" Issuer Response Message:", error.issuerResponseMessage);
120
+ }
121
+ });
122
+ test("sale() returns ERR011 for an invalid direct-market invoice number length", async () => {
123
+ await expectSaleError("ERR011", () => device
124
+ .sale(10.0)
125
+ .withEcrId("123")
126
+ .withInvoiceNumber("5".repeat(25))
127
+ .withShippingDate(new Date(2026, 7, 3))
128
+ .execute());
129
+ });
130
+ test(" sale() returns ERR010 for an directMktShipMonth-INVALID TYPE", async () => {
131
+ await expectSaleError("ERR010", () => device
132
+ .sale(10.0)
133
+ .withEcrId("123")
134
+ .withInvoiceNumber("MKT-001")
135
+ .withShippingDate(new Date("invalid"))
136
+ .execute());
137
+ });
138
+ });
139
+ // ===========================================================================
140
+ // TC-02: Void Transaction Error - Full UPA Error Properties Returned
141
+ // ===========================================================================
142
+ (0, UpaHelpertest_1.describeUpaLive)("TC-02: Void Transaction Error - Full UPA Error Properties Returned", () => {
143
+ let device;
144
+ beforeEach(() => {
145
+ device = (0, UpaHelpertest_1.createTestDevice)();
146
+ });
147
+ async function expectVoidError(expectedErrorCode, executeVoid) {
148
+ let caughtError;
149
+ try {
150
+ await executeVoid();
151
+ }
152
+ catch (error) {
153
+ caughtError = error;
154
+ }
155
+ if (!caughtError) {
156
+ throw new Error(`Expected ${expectedErrorCode} from the UPA Void request.`);
157
+ }
158
+ const gatewayError = caughtError;
159
+ expect(gatewayError).toBeInstanceOf(src_1.GatewayError);
160
+ expect(gatewayError.errorCode.trim()).toBe(expectedErrorCode);
161
+ expect(gatewayError.errorMessage).toBeTruthy();
162
+ expect(gatewayError.rawResponse).toBeDefined();
163
+ console.log("TC-02 Void error:", {
164
+ errorCode: gatewayError.errorCode,
165
+ errorMessage: gatewayError.errorMessage,
166
+ responseCode: gatewayError.responseCode,
167
+ responseText: gatewayError.responseText,
168
+ rawResponse: gatewayError.rawResponse,
169
+ });
170
+ }
171
+ test("[AH-1362:TC-02.1] void() returns HOST001 for a nonexistent reference number", async () => {
172
+ /**
173
+ * Scenario: UPA returns an error during a Void transaction
174
+ * Pre-condition: Attempt to void a transaction that triggers UPA error
175
+ * Expected: All UPA error response properties accessible in error
176
+ */
177
+ const nonexistentReferenceNumber = "02455"; // invalid length
178
+ await expectVoidError("HOST001", () => device
179
+ .void()
180
+ .withTransactionId(nonexistentReferenceNumber)
181
+ .withEcrId("123")
182
+ .execute());
183
+ });
184
+ test("[AH-1362:TC-02.2] void() returns VOID004 when both identifiers are supplied", async () => {
185
+ await expectVoidError("VOID004", () => device
186
+ .void()
187
+ .withTransactionId("9999999999999999")
188
+ .withTerminalRefNumber("9999")
189
+ .withEcrId("123")
190
+ .execute());
191
+ });
192
+ test("[AH-1362:TC-02.2] void() returns ERR013 missing EcrID mandatory field", async () => {
193
+ await expectVoidError("ERR004", () => device
194
+ .void()
195
+ .withTransactionId("9999999999999999")
196
+ .withTerminalRefNumber("9999")
197
+ .execute());
198
+ });
199
+ });
200
+ // ===========================================================================
201
+ // TC-03: Refund Transaction Error - Full UPA Error Properties Returned
202
+ // ===========================================================================
203
+ (0, UpaHelpertest_1.describeUpaLive)("TC-03: Refund Transaction Error - Full UPA Error Properties Returned", () => {
204
+ let device;
205
+ beforeEach(() => {
206
+ device = (0, UpaHelpertest_1.createTestDevice)();
207
+ });
208
+ async function expectRefundError(expectedErrorCode, executeRefund) {
209
+ let caughtError;
210
+ try {
211
+ await executeRefund();
212
+ }
213
+ catch (error) {
214
+ caughtError = error;
215
+ }
216
+ if (!caughtError) {
217
+ throw new Error(`Expected ${expectedErrorCode} from the UPA Refund request.`);
218
+ }
219
+ const gatewayError = caughtError;
220
+ console.log("TC-03 received Refund error:", gatewayError);
221
+ expect(gatewayError).toBeInstanceOf(src_1.GatewayError);
222
+ expect(gatewayError.errorCode).toBeDefined();
223
+ expect(gatewayError.errorCode.trim()).toBe(expectedErrorCode);
224
+ expect(gatewayError.errorMessage).toBeTruthy();
225
+ expect(gatewayError.rawResponse).toBeDefined();
226
+ console.log("TC-03 Refund UPA error:", {
227
+ errorCode: gatewayError.errorCode,
228
+ errorMessage: gatewayError.errorMessage,
229
+ responseCode: gatewayError.responseCode,
230
+ responseText: gatewayError.responseText,
231
+ rawResponse: gatewayError.rawResponse,
232
+ });
233
+ }
234
+ test("[AH-1362:TC-03.1] refund() returns REFUND001 when the original amount is exceeded", async () => {
235
+ // Set these to an approved Sale reference and an amount greater than
236
+ // the remaining refundable amount for that Sale.
237
+ const saleReference = process.env.UPA_REFUND_REFERENCE;
238
+ const refundAmount = Number(process.env.UPA_OVER_REFUND_AMOUNT);
239
+ if (!saleReference || !Number.isFinite(refundAmount)) {
240
+ throw new Error("Set UPA_REFUND_REFERENCE and UPA_OVER_REFUND_AMOUNT to run REFUND001.");
241
+ }
242
+ await expectRefundError("REFUND001", () => device
243
+ .refund(refundAmount)
244
+ .withTransactionId(saleReference)
245
+ .withEcrId("123")
246
+ .execute());
247
+ });
248
+ test("[AH-1362:TC-03.2] refund() returns APP001 when cancelled on UPA", async () => {
249
+ // Omit the reference to force card entry, then cancel on the terminal.
250
+ await expectRefundError("APP001", () => device.refund(10.0).withEcrId("123").execute());
251
+ });
252
+ });
253
+ // ===========================================================================
254
+ // TC-04: Cross-Card Error Parity (MC, VISA, Amex, Discover)
255
+ // ===========================================================================
256
+ (0, UpaHelpertest_1.describeUpaLive)("TC-04: Cross-Card Error Parity", () => {
257
+ let device;
258
+ beforeEach(() => {
259
+ device = (0, UpaHelpertest_1.createTestDevice)();
260
+ });
261
+ async function expectCardSaleError(cardBrand, cardTypePattern) {
262
+ let error;
263
+ try {
264
+ await device.sale(10.0).withEcrId("123").execute();
265
+ }
266
+ catch (caughtError) {
267
+ error = caughtError;
268
+ }
269
+ if (!error) {
270
+ throw new Error(`Expected a UPA error for the ${cardBrand} Sale. Present the ${cardBrand} decline test card.`);
271
+ }
272
+ expect(error).toBeInstanceOf(src_1.GatewayError);
273
+ const gatewayError = error;
274
+ expect(gatewayError.errorCode).toBeDefined();
275
+ expect(gatewayError.deviceResponseMessage).toBeTruthy();
276
+ expect(gatewayError.payment?.cardType).toMatch(cardTypePattern);
277
+ expect(gatewayError.rawResponse).toBeDefined();
278
+ console.log(`TC-04 ${cardBrand} Sale error:`, gatewayError);
279
+ }
280
+ test("[AH-1362:TC-04.1] VISA Sale error includes UPA response properties", async () => {
281
+ await expectCardSaleError("VISA", /visa/i);
282
+ });
283
+ test.only("[AH-1362:TC-04.2] Mastercard Sale error includes UPA response properties", async () => {
284
+ await expectCardSaleError("Mastercard", /master/i);
285
+ });
286
+ test("[AH-1362:TC-04.3] Amex Sale error includes UPA response properties", async () => {
287
+ await expectCardSaleError("Amex", /amex|american express/i);
288
+ });
289
+ test.only("[AH-1362:TC-04.4] Discover Sale error includes UPA response properties", async () => {
290
+ await expectCardSaleError("Discover", /discover|disc/i);
291
+ });
292
+ });
293
+ // ===========================================================================
294
+ // ===========================================================================
295
+ (0, UpaHelpertest_1.describeUpaLive)("TC-05: Comparison (Parity Check)", () => {
296
+ test("[AH-1362:TC-05] NodeJS SDK error structure has parity", () => {
297
+ /**
298
+ *
299
+ * - responseCode (from host.gatewayResponseCode)
300
+ * - responseMessage (from host.gatewayResponseMessage)
301
+ * - issuerResponseCode (from host.responseCode)
302
+ * - issuerResponseMessage (from host.responseText)
303
+ * - deviceResponseCode (from cmdResult.errorCode)
304
+ * - deviceResponseMessage (from cmdResult.errorMessage)
305
+ *
306
+ * Expected: NodeJS SDK GatewayError has equivalent properties
307
+ */
308
+ // Create a mock GatewayError to verify structure
309
+ const mockError = new src_1.GatewayError("Test error", "0001", // gatewayResponseCode
310
+ "Gateway Error Message", // gatewayResponseMessage
311
+ "05", // issuerResponseCode
312
+ "Issuer Declined", // issuerResponseMessage
313
+ "502", // deviceResponseCode
314
+ "Device Error");
315
+ expect(mockError.responseCode).toBe("0001");
316
+ expect(mockError.responseMessage).toBe("Gateway Error Message");
317
+ expect(mockError.issuerResponseCode).toBe("05");
318
+ expect(mockError.issuerResponseMessage).toBe("Issuer Declined");
319
+ expect(mockError.deviceResponseCode).toBe("502");
320
+ expect(mockError.deviceResponseMessage).toBe("Device Error");
321
+ console.log(" All error properties are properly exposed:");
322
+ console.log(" - responseCode (gateway)");
323
+ console.log(" - responseMessage (gateway)");
324
+ console.log(" - issuerResponseCode");
325
+ console.log(" - issuerResponseMessage");
326
+ console.log(" - deviceResponseCode");
327
+ console.log(" - deviceResponseMessage");
328
+ });
329
+ test("[AH-1362:TC-05] exposes the complete UPA failure data unchanged", () => {
330
+ const upaFailure = {
331
+ message: "MSG",
332
+ data: {
333
+ response: "Sale",
334
+ cmdResult: {
335
+ result: "Failed",
336
+ errorCode: "HOST001",
337
+ errorMessage: "HOST ERROR",
338
+ },
339
+ data: {
340
+ host: {
341
+ responseCode: "05",
342
+ responseText: "DECLINED",
343
+ gatewayResponseCode: "100",
344
+ },
345
+ payment: { transactionType: "CREDIT SALE" },
346
+ emv: { "9F26": "ABC123" },
347
+ dcc: { exchangeRate: "1.2000000" },
348
+ duplicate: { referenceNumber: "123456" },
349
+ tokenRspCode: "0",
350
+ tokenRspMsg: "TOKEN CREATED",
351
+ tokenValue: "token-value",
352
+ tokenPANLast: "1234",
353
+ numberOfInstallment: "3",
354
+ program: "IPP",
355
+ planId: "plan-1",
356
+ planTotalAmount: "30.00",
357
+ monthlyAmount: "10.00",
358
+ annualPercentageRate: "12.50",
359
+ terminalId: "terminal-1",
360
+ merchantId: "merchant-1",
361
+ customField: "futureProperty",
362
+ newObject: { value: "123" },
363
+ },
364
+ },
365
+ };
366
+ try {
367
+ new TransactionResponse_1.TransactionResponse(upaFailure);
368
+ fail("Expected UPA failure response to throw GatewayError");
369
+ }
370
+ catch (error) {
371
+ expect(error).toBeInstanceOf(src_1.GatewayError);
372
+ const gatewayError = error;
373
+ expect(gatewayError.errorCode).toBe("HOST001");
374
+ expect(gatewayError.errorMessage).toBe("HOST ERROR");
375
+ expect(gatewayError.responseCode).toBe("100");
376
+ expect(gatewayError.responseText).toBe("DECLINED");
377
+ expect(gatewayError.host).toEqual(upaFailure.data.data.host);
378
+ expect(gatewayError.payment).toEqual(upaFailure.data.data.payment);
379
+ expect(gatewayError.emv).toEqual(upaFailure.data.data.emv);
380
+ expect(gatewayError.dcc).toEqual(upaFailure.data.data.dcc);
381
+ expect(gatewayError.duplicate).toEqual(upaFailure.data.data.duplicate);
382
+ expect(gatewayError.tokenRspCode).toBe("0");
383
+ expect(gatewayError.numberOfInstallment).toBe("3");
384
+ expect(gatewayError.terminalId).toBe("terminal-1");
385
+ expect(gatewayError.customField).toBe("futureProperty");
386
+ expect(gatewayError.newObject).toEqual({ value: "123" });
387
+ }
388
+ });
389
+ });
390
+ // ===========================================================================
391
+ // TC-06: Investigative Case - No Code Change Needed
392
+ // ===========================================================================
393
+ (0, UpaHelpertest_1.describeUpaLive)("TC-06: Investigative Case - No Code Change Needed", () => {
394
+ let device;
395
+ beforeEach(() => {
396
+ device = (0, UpaHelpertest_1.createTestDevice)();
397
+ });
398
+ test("[AH-1362:TC-06] verify all UPA error properties already returned", async () => {
399
+ try {
400
+ const saleresponse = await device.sale(10.0).withEcrId("123").execute();
401
+ console.warn("TC-06: Sale succeeded - unable to verify error properties", saleresponse.status);
402
+ }
403
+ catch (error) {
404
+ const gatewayError = error;
405
+ // Document all properties present in error
406
+ const presentProperties = [];
407
+ const expectedProperties = [
408
+ "deviceResponseCode",
409
+ "deviceResponseMessage",
410
+ "responseCode",
411
+ "responseMessage",
412
+ "issuerResponseCode",
413
+ "issuerResponseMessage",
414
+ ];
415
+ for (const prop of expectedProperties) {
416
+ if (prop in gatewayError && gatewayError[prop] !== undefined) {
417
+ presentProperties.push(prop);
418
+ }
419
+ }
420
+ console.log("✓ TC-06: UPA Error Properties Present");
421
+ console.log(" Present properties:", presentProperties);
422
+ console.log(" Total found:", presentProperties.length);
423
+ console.log(" Expected:", expectedProperties.length);
424
+ }
425
+ });
426
+ });
427
+ // ===========================================================================
428
+ // TC-07: Happy Path Regression - Sale / Void / Refund Still Work
429
+ // ===========================================================================
430
+ (0, UpaHelpertest_1.describeUpaLive)("TC-07: Happy Path Regression - Sale / Void / Refund Still Work", () => {
431
+ let device;
432
+ beforeEach(() => {
433
+ device = (0, UpaHelpertest_1.createTestDevice)();
434
+ });
435
+ test("[AH-1362:TC-07.1] successful sale still returns correct response structure", async () => {
436
+ /**
437
+ * Scenario: No regression on successful Sale flow
438
+ * Expected: Success response structure unchanged
439
+ */
440
+ try {
441
+ const response = await device.sale(10.0).execute();
442
+ // Verify success response has expected structure
443
+ expect(response).toBeInstanceOf(src_1.TransactionResponse);
444
+ expect(response.status).toBe("Success");
445
+ // Verify key properties are present
446
+ expect(response.transactionAmount).toBe(10.0);
447
+ expect(response.transactionId).toBeTruthy();
448
+ console.log("✓ TC-07.1 PASSED: Sale success response structure intact");
449
+ console.log(" Transaction ID:", response.transactionId);
450
+ console.log(" Amount:", response.transactionAmount);
451
+ console.log(" Status:", response.status);
452
+ }
453
+ catch (error) {
454
+ if (error instanceof src_1.GatewayError &&
455
+ error.message.includes("Device")) {
456
+ console.warn("TC-07.1: Device unavailable - test skipped for regression check");
457
+ }
458
+ else {
459
+ throw error;
460
+ }
461
+ }
462
+ });
463
+ test("[AH-1362:TC-07.2] successful void still returns correct response structure", async () => {
464
+ /**
465
+ * Scenario: No regression on successful Void flow
466
+ * Expected: Success response structure unchanged
467
+ */
468
+ try {
469
+ // First, create a transaction to void
470
+ const saleResponse = await device.sale(10.0).execute();
471
+ if (saleResponse.status !== "Success") {
472
+ console.warn("TC-07.2: Could not create transaction to void");
473
+ return;
474
+ }
475
+ await settleDevice(5000);
476
+ // Now void it
477
+ const voidResponse = await device
478
+ .void()
479
+ .withTransactionId(saleResponse.transactionId)
480
+ .execute();
481
+ expect(voidResponse).toBeInstanceOf(src_1.TransactionResponse);
482
+ expect(voidResponse.status).toBe("Success");
483
+ console.log("✓ TC-07.2 PASSED: Void success response structure intact");
484
+ console.log(" Response ID:", voidResponse.transactionId);
485
+ console.log(" Status:", voidResponse.status);
486
+ }
487
+ catch (error) {
488
+ if (error instanceof src_1.GatewayError &&
489
+ error.message.includes("Device")) {
490
+ console.warn("TC-07.2: Device unavailable - test skipped for regression check");
491
+ }
492
+ else {
493
+ throw error;
494
+ }
495
+ }
496
+ });
497
+ test("[AH-1362:TC-07.3] successful refund still returns correct response structure", async () => {
498
+ /**
499
+ * Scenario: No regression on successful Refund flow
500
+ * Expected: Success response structure unchanged
501
+ */
502
+ try {
503
+ // First, create a transaction to refund
504
+ const saleResponse = await device.sale(10.0).execute();
505
+ if (saleResponse.status !== "Success") {
506
+ console.warn("TC-07.3: Could not create transaction to refund");
507
+ return;
508
+ }
509
+ await settleDevice(5000);
510
+ // Now refund it
511
+ const refundResponse = await device
512
+ .refund(10.0)
513
+ .withTransactionId(saleResponse.transactionId)
514
+ .execute();
515
+ expect(refundResponse).toBeInstanceOf(src_1.TransactionResponse);
516
+ expect(refundResponse.status).toBe("Success");
517
+ console.log("✓ TC-07.3 PASSED: Refund success response structure intact");
518
+ console.log(" Response ID:", refundResponse.transactionId);
519
+ console.log(" Status:", refundResponse.status);
520
+ console.log(" Amount:", refundResponse.transactionAmount);
521
+ }
522
+ catch (error) {
523
+ if (error instanceof src_1.GatewayError &&
524
+ error.message.includes("Device")) {
525
+ console.warn("TC-07.3: Device unavailable - test skipped for regression check");
526
+ }
527
+ else {
528
+ throw error;
529
+ }
530
+ }
531
+ });
532
+ });
533
+ //# sourceMappingURL=UpaErrorResponse.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpaErrorResponse.test.js","sourceRoot":"","sources":["../../../../../test/Unit/Terminals/UPA/UpaErrorResponse.test.ts"],"names":[],"mappings":"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"}
@@ -480,7 +480,7 @@ exports.ensureSafData = ensureSafData;
480
480
  async function findLiveBatches(device) {
481
481
  const response = await device
482
482
  .findBatches()
483
- .where(UpaSearchCriteria_1.UpaSearchCriteria.EcrId, 13)
483
+ .where(UpaSearchCriteria_1.UpaSearchCriteria.EcrId, 12)
484
484
  .execute();
485
485
  expect(response).toBeInstanceOf(src_1.BatchList);
486
486
  return response;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * UPA JIRA Story Validation Test Suite
3
+ *
4
+ * Validates comprehensive UPA functionality for merchant transaction processing.
5
+ * Ensures all required fields and methods are implemented per JIRA story requirements:
6
+ * - clerkId (withClerkId method)
7
+ * - cardOnFileIndicator (proper mapping support)
8
+ * - cardBrandTransId (withCardBrandTransId method)
9
+ * - lineItemLeft/Right (withLineItem methods)
10
+ * - languageCode (complete implementation)
11
+ * - directMktShipMonth/Day (correct date handling)
12
+ * - merchantDecision (property and mapping)
13
+ * - acquisitionTypes (property and mapping)
14
+ * - baseAmount (separation from totalAmount)
15
+ * - preAuthAmount (proper decimal formatting)
16
+ * - Card-On-File (initial vs subsequent, multiple initiator types)
17
+ * - Lodging Data (full integration)
18
+ * - Processing Indicators (quickChip, checkLuhn, securityCode)
19
+ *
20
+ * Region: US
21
+ * Gateway: GP-API
22
+ * Environment: Sandbox
23
+ * Devices: UPA
24
+ * Payment Types: MC, VISA, Amex
25
+ */
26
+ export {};