globalpayments-api 3.11.4 → 3.12.0

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 (31) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/README.md +18 -0
  3. package/lib/src/Builders/AuthorizationBuilder.d.ts +0 -1
  4. package/lib/src/Builders/AuthorizationBuilder.js +0 -4
  5. package/lib/src/Builders/AuthorizationBuilder.js.map +1 -1
  6. package/lib/src/Builders/RecurringBuilder.js +12 -1
  7. package/lib/src/Builders/RecurringBuilder.js.map +1 -1
  8. package/lib/src/Terminals/Builders/TerminalAuthBuilder.d.ts +15 -4
  9. package/lib/src/Terminals/Builders/TerminalAuthBuilder.js +33 -4
  10. package/lib/src/Terminals/Builders/TerminalAuthBuilder.js.map +1 -1
  11. package/lib/src/Terminals/Builders/TerminalManageBuilder.js +2 -0
  12. package/lib/src/Terminals/Builders/TerminalManageBuilder.js.map +1 -1
  13. package/lib/src/Terminals/UPA/Reponses/TransactionResponse.d.ts +4 -0
  14. package/lib/src/Terminals/UPA/Reponses/TransactionResponse.js +24 -0
  15. package/lib/src/Terminals/UPA/Reponses/TransactionResponse.js.map +1 -1
  16. package/lib/src/Terminals/UPA/UpaController.js +108 -16
  17. package/lib/src/Terminals/UPA/UpaController.js.map +1 -1
  18. package/lib/test/Integration/Gateways/GpApiConnector/GpApiMMAAccount.test.d.ts +1 -0
  19. package/lib/test/Integration/Gateways/GpApiConnector/GpApiMMAAccount.test.js +149 -0
  20. package/lib/test/Integration/Gateways/GpApiConnector/GpApiMMAAccount.test.js.map +1 -0
  21. package/lib/test/Unit/Gateways/GpApiConnector/GpApiMMAAccount.test.d.ts +1 -0
  22. package/lib/test/Unit/Gateways/GpApiConnector/GpApiMMAAccount.test.js +29 -0
  23. package/lib/test/Unit/Gateways/GpApiConnector/GpApiMMAAccount.test.js.map +1 -0
  24. package/lib/test/Unit/Terminals/Builders/TerminalBuilderParityTests.test.d.ts +17 -0
  25. package/lib/test/Unit/Terminals/Builders/TerminalBuilderParityTests.test.js +325 -0
  26. package/lib/test/Unit/Terminals/Builders/TerminalBuilderParityTests.test.js.map +1 -0
  27. package/lib/test/Unit/Terminals/UPA/UpaAdmin.test.js +46 -91
  28. package/lib/test/Unit/Terminals/UPA/UpaAdmin.test.js.map +1 -1
  29. package/lib/test/Unit/Terminals/UPA/UpaCredit.test.js +201 -27
  30. package/lib/test/Unit/Terminals/UPA/UpaCredit.test.js.map +1 -1
  31. package/package.json +2 -2
@@ -0,0 +1,325 @@
1
+ "use strict";
2
+ /**
3
+ * Unit tests for TerminalAuthBuilder and TerminalManageBuilder
4
+ * Testing newly added properties and builder methods for UPA parity with .NET SDK
5
+ *
6
+ * Properties added to TerminalAuthBuilder:
7
+ * - clerkId
8
+ * - prescriptionAmount
9
+ * - clinicAmount
10
+ * - dentalAmount
11
+ * - visionOpticalAmount
12
+ * - confirmAmount
13
+ * - surchargeAmount
14
+ *
15
+ * Properties added to TerminalManageBuilder:
16
+ * - clerkId
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ const src_1 = require("../../../../src");
20
+ describe("TerminalAuthBuilder Parity Tests", () => {
21
+ describe("Medical Amount Properties", () => {
22
+ let builder;
23
+ beforeEach(() => {
24
+ builder = new src_1.TerminalAuthBuilder(src_1.TransactionType.Sale);
25
+ });
26
+ test("withPrescriptionAmount() should set prescriptionAmount property", () => {
27
+ const prescriptionAmt = 25.5;
28
+ const result = builder.withPrescriptionAmount(prescriptionAmt);
29
+ expect(builder.prescriptionAmount).toBe(prescriptionAmt);
30
+ expect(result).toBe(builder); // Fluent API returns this
31
+ });
32
+ test("withClinicAmount() should set clinicAmount property", () => {
33
+ const clinicAmt = 45.75;
34
+ const result = builder.withClinicAmount(clinicAmt);
35
+ expect(builder.clinicAmount).toBe(clinicAmt);
36
+ expect(result).toBe(builder);
37
+ });
38
+ test("withDentalAmount() should set dentalAmount property", () => {
39
+ const dentalAmt = 100.0;
40
+ const result = builder.withDentalAmount(dentalAmt);
41
+ expect(builder.dentalAmount).toBe(dentalAmt);
42
+ expect(result).toBe(builder);
43
+ });
44
+ test("withVisionOpticalAmount() should set visionOpticalAmount property", () => {
45
+ const visionAmt = 200.5;
46
+ const result = builder.withVisionOpticalAmount(visionAmt);
47
+ expect(builder.visionOpticalAmount).toBe(visionAmt);
48
+ expect(result).toBe(builder);
49
+ });
50
+ test("Medical amounts can be chained together", () => {
51
+ builder
52
+ .withPrescriptionAmount(25.5)
53
+ .withClinicAmount(45.75)
54
+ .withDentalAmount(100.0)
55
+ .withVisionOpticalAmount(200.5);
56
+ expect(builder.prescriptionAmount).toBe(25.5);
57
+ expect(builder.clinicAmount).toBe(45.75);
58
+ expect(builder.dentalAmount).toBe(100.0);
59
+ expect(builder.visionOpticalAmount).toBe(200.5);
60
+ });
61
+ test("Medical amounts can be zero", () => {
62
+ builder.withPrescriptionAmount(0);
63
+ expect(builder.prescriptionAmount).toBe(0);
64
+ });
65
+ test("Medical amounts can be decimal values", () => {
66
+ builder
67
+ .withPrescriptionAmount(25.99)
68
+ .withClinicAmount(45.01)
69
+ .withDentalAmount(100.5)
70
+ .withVisionOpticalAmount(200.25);
71
+ expect(builder.prescriptionAmount).toBe(25.99);
72
+ expect(builder.clinicAmount).toBe(45.01);
73
+ expect(builder.dentalAmount).toBe(100.5);
74
+ expect(builder.visionOpticalAmount).toBe(200.25);
75
+ });
76
+ });
77
+ describe("Base Class Property - Clerk ID", () => {
78
+ let builder;
79
+ beforeEach(() => {
80
+ builder = new src_1.TerminalAuthBuilder(src_1.TransactionType.Sale);
81
+ });
82
+ test("withClerkId() (inherited from base class) should set clerkId property", () => {
83
+ const clerkId = 12345;
84
+ const result = builder.withClerkId(clerkId);
85
+ expect(builder.clerkId).toBe(clerkId);
86
+ expect(result).toBe(builder);
87
+ });
88
+ test("withClerkId() can be used in fluent chain with new medical properties", () => {
89
+ builder
90
+ .withAmount(10.0)
91
+ .withClerkId(456)
92
+ .withPrescriptionAmount(25.0)
93
+ .withInvoiceNumber("INV123");
94
+ expect(builder.amount).toBe(10.0);
95
+ expect(builder.clerkId).toBe(456);
96
+ expect(builder.prescriptionAmount).toBe(25.0);
97
+ expect(builder.invoiceNumber).toBe("INV123");
98
+ });
99
+ });
100
+ describe("Confirmation Amount Property", () => {
101
+ let builder;
102
+ beforeEach(() => {
103
+ builder = new src_1.TerminalAuthBuilder(src_1.TransactionType.Sale);
104
+ });
105
+ test("withConfirmationAmount() should set confirmAmount property to true", () => {
106
+ const result = builder.withConfirmationAmount(true);
107
+ expect(builder.confirmAmount).toBe(true);
108
+ expect(result).toBe(builder);
109
+ });
110
+ test("withConfirmationAmount() should set confirmAmount property to false", () => {
111
+ builder.withConfirmationAmount(false);
112
+ expect(builder.confirmAmount).toBe(false);
113
+ });
114
+ test("withConfirmationAmount() can be toggled", () => {
115
+ builder.withConfirmationAmount(true);
116
+ expect(builder.confirmAmount).toBe(true);
117
+ builder.withConfirmationAmount(false);
118
+ expect(builder.confirmAmount).toBe(false);
119
+ });
120
+ });
121
+ describe("Surcharge Amount Property", () => {
122
+ let builder;
123
+ beforeEach(() => {
124
+ builder = new src_1.TerminalAuthBuilder(src_1.TransactionType.Sale);
125
+ });
126
+ test("withSurchargeAmount() should set surchargeAmount property", () => {
127
+ const surchargeAmt = 2.5;
128
+ const result = builder.withSurchargeAmount(surchargeAmt);
129
+ expect(builder.surchargeAmount).toBe(surchargeAmt);
130
+ expect(result).toBe(builder);
131
+ });
132
+ test("withSurchargeAmount() should accept zero", () => {
133
+ builder.withSurchargeAmount(0);
134
+ expect(builder.surchargeAmount).toBe(0);
135
+ });
136
+ test("withSurchargeAmount() should accept decimal values", () => {
137
+ builder.withSurchargeAmount(5.99);
138
+ expect(builder.surchargeAmount).toBe(5.99);
139
+ });
140
+ test("withSurchargeAmount() can be combined with amount", () => {
141
+ builder.withAmount(100.0).withSurchargeAmount(2.5);
142
+ expect(builder.amount).toBe(100.0);
143
+ expect(builder.surchargeAmount).toBe(2.5);
144
+ });
145
+ });
146
+ describe("Complex Builder Chains", () => {
147
+ test("All new builder methods work together in a comprehensive transaction", () => {
148
+ const builder = new src_1.TerminalAuthBuilder(src_1.TransactionType.Sale)
149
+ .withAmount(100.0)
150
+ .withClerkId(789)
151
+ .withPrescriptionAmount(25.0)
152
+ .withClinicAmount(35.0)
153
+ .withDentalAmount(20.0)
154
+ .withVisionOpticalAmount(10.0)
155
+ .withConfirmationAmount(true)
156
+ .withSurchargeAmount(5.0)
157
+ .withInvoiceNumber("INV2026001");
158
+ expect(builder.amount).toBe(100.0);
159
+ expect(builder.clerkId).toBe(789);
160
+ expect(builder.prescriptionAmount).toBe(25.0);
161
+ expect(builder.clinicAmount).toBe(35.0);
162
+ expect(builder.dentalAmount).toBe(20.0);
163
+ expect(builder.visionOpticalAmount).toBe(10.0);
164
+ expect(builder.confirmAmount).toBe(true);
165
+ expect(builder.surchargeAmount).toBe(5.0);
166
+ expect(builder.invoiceNumber).toBe("INV2026001");
167
+ });
168
+ test("Medical amounts can be omitted for normal transactions", () => {
169
+ const builder = new src_1.TerminalAuthBuilder(src_1.TransactionType.Sale)
170
+ .withAmount(50.0)
171
+ .withClerkId(123);
172
+ expect(builder.amount).toBe(50.0);
173
+ expect(builder.clerkId).toBe(123);
174
+ expect(builder.prescriptionAmount).toBeUndefined();
175
+ expect(builder.clinicAmount).toBeUndefined();
176
+ expect(builder.dentalAmount).toBeUndefined();
177
+ expect(builder.visionOpticalAmount).toBeUndefined();
178
+ });
179
+ });
180
+ describe("Transaction Type Compatibility", () => {
181
+ test("New properties work with Auth transaction type", () => {
182
+ const builder = new src_1.TerminalAuthBuilder(src_1.TransactionType.Auth)
183
+ .withAmount(50.0)
184
+ .withClerkId(111);
185
+ expect(builder.transactionType).toBe(src_1.TransactionType.Auth);
186
+ expect(builder.amount).toBe(50.0);
187
+ expect(builder.clerkId).toBe(111);
188
+ });
189
+ test("New properties work with Refund transaction type", () => {
190
+ const builder = new src_1.TerminalAuthBuilder(src_1.TransactionType.Refund)
191
+ .withAmount(25.0)
192
+ .withClerkId(222);
193
+ expect(builder.transactionType).toBe(src_1.TransactionType.Refund);
194
+ expect(builder.amount).toBe(25.0);
195
+ expect(builder.clerkId).toBe(222);
196
+ });
197
+ });
198
+ });
199
+ describe("TerminalManageBuilder Parity Tests", () => {
200
+ describe("Base Class Property - Clerk ID (inherited)", () => {
201
+ let builder;
202
+ beforeEach(() => {
203
+ builder = new src_1.TerminalManageBuilder(src_1.TransactionType.Capture);
204
+ });
205
+ test("withClerkId() (inherited from base class) should set clerkId property", () => {
206
+ const clerkId = 54321;
207
+ const result = builder.withClerkId(clerkId);
208
+ expect(builder.clerkId).toBe(clerkId);
209
+ expect(result).toBe(builder);
210
+ });
211
+ test("withClerkId() can be used in fluent chain with ProcessCPC", () => {
212
+ builder
213
+ .withAmount(500.0)
214
+ .withClerkId(555)
215
+ .withProcessCPC(true)
216
+ .withTransactionId("TXN123");
217
+ expect(builder.amount).toBe(500.0);
218
+ expect(builder.clerkId).toBe(555);
219
+ expect(builder.processCPC).toBe(true);
220
+ expect(builder.transactionId).toBe("TXN123");
221
+ });
222
+ });
223
+ describe("ProcessCPC Property Verification", () => {
224
+ let builder;
225
+ beforeEach(() => {
226
+ builder = new src_1.TerminalManageBuilder(src_1.TransactionType.Capture);
227
+ });
228
+ test("withProcessCPC() should be available and working", () => {
229
+ const result = builder.withProcessCPC(true);
230
+ expect(builder.processCPC).toBe(true);
231
+ expect(result).toBe(builder);
232
+ });
233
+ test("withProcessCPC() with false value", () => {
234
+ builder.withProcessCPC(false);
235
+ expect(builder.processCPC).toBe(false);
236
+ });
237
+ test("ProcessCPC and ClerkId can be combined", () => {
238
+ builder.withProcessCPC(true).withClerkId(999).withAmount(100.0);
239
+ expect(builder.processCPC).toBe(true);
240
+ expect(builder.clerkId).toBe(999);
241
+ expect(builder.amount).toBe(100.0);
242
+ });
243
+ });
244
+ describe("Transaction Type Compatibility", () => {
245
+ test("ClerkId works with Capture transaction type", () => {
246
+ const builder = new src_1.TerminalManageBuilder(src_1.TransactionType.Capture)
247
+ .withAmount(75.0)
248
+ .withClerkId(333);
249
+ expect(builder.transactionType).toBe(src_1.TransactionType.Capture);
250
+ expect(builder.clerkId).toBe(333);
251
+ expect(builder.amount).toBe(75.0);
252
+ });
253
+ test("ClerkId works with Refund transaction type", () => {
254
+ const builder = new src_1.TerminalManageBuilder(src_1.TransactionType.Refund)
255
+ .withAmount(50.0)
256
+ .withClerkId(444);
257
+ expect(builder.transactionType).toBe(src_1.TransactionType.Refund);
258
+ expect(builder.clerkId).toBe(444);
259
+ });
260
+ test("ClerkId works with Void transaction type", () => {
261
+ const builder = new src_1.TerminalManageBuilder(src_1.TransactionType.Void).withClerkId(555);
262
+ expect(builder.transactionType).toBe(src_1.TransactionType.Void);
263
+ expect(builder.clerkId).toBe(555);
264
+ });
265
+ });
266
+ });
267
+ describe("Builder Properties Defaults", () => {
268
+ test("TerminalAuthBuilder properties default to undefined", () => {
269
+ const builder = new src_1.TerminalAuthBuilder(src_1.TransactionType.Sale);
270
+ expect(builder.clerkId).toBeUndefined();
271
+ expect(builder.prescriptionAmount).toBeUndefined();
272
+ expect(builder.clinicAmount).toBeUndefined();
273
+ expect(builder.dentalAmount).toBeUndefined();
274
+ expect(builder.visionOpticalAmount).toBeUndefined();
275
+ expect(builder.confirmAmount).toBeUndefined();
276
+ expect(builder.surchargeAmount).toBeUndefined();
277
+ });
278
+ test("TerminalManageBuilder clerkId defaults to undefined", () => {
279
+ const builder = new src_1.TerminalManageBuilder(src_1.TransactionType.Capture);
280
+ expect(builder.clerkId).toBeUndefined();
281
+ });
282
+ });
283
+ describe("Property Type Validation", () => {
284
+ describe("Numeric Properties", () => {
285
+ test("ClerkId accepts valid numbers", () => {
286
+ const builder = new src_1.TerminalAuthBuilder(src_1.TransactionType.Sale);
287
+ builder.withClerkId(12345);
288
+ expect(typeof builder.clerkId).toBe("number");
289
+ expect(builder.clerkId).toBe(12345);
290
+ });
291
+ test("Medical amounts accept valid decimal numbers", () => {
292
+ const builder = new src_1.TerminalAuthBuilder(src_1.TransactionType.Sale);
293
+ builder
294
+ .withPrescriptionAmount(10.5)
295
+ .withClinicAmount(20.75)
296
+ .withDentalAmount(30.99)
297
+ .withVisionOpticalAmount(40.01);
298
+ expect(typeof builder.prescriptionAmount).toBe("number");
299
+ expect(typeof builder.clinicAmount).toBe("number");
300
+ expect(typeof builder.dentalAmount).toBe("number");
301
+ expect(typeof builder.visionOpticalAmount).toBe("number");
302
+ });
303
+ test("Surcharge amount accepts valid decimal numbers", () => {
304
+ const builder = new src_1.TerminalAuthBuilder(src_1.TransactionType.Sale);
305
+ builder.withSurchargeAmount(5.5);
306
+ expect(typeof builder.surchargeAmount).toBe("number");
307
+ expect(builder.surchargeAmount).toBe(5.5);
308
+ });
309
+ });
310
+ describe("Boolean Properties", () => {
311
+ test("ConfirmAmount accepts boolean values", () => {
312
+ const builder = new src_1.TerminalAuthBuilder(src_1.TransactionType.Sale);
313
+ builder.withConfirmationAmount(true);
314
+ expect(typeof builder.confirmAmount).toBe("boolean");
315
+ expect(builder.confirmAmount).toBe(true);
316
+ });
317
+ test("ProcessCPC accepts boolean values in TerminalManageBuilder", () => {
318
+ const builder = new src_1.TerminalManageBuilder(src_1.TransactionType.Capture);
319
+ builder.withProcessCPC(false);
320
+ expect(typeof builder.processCPC).toBe("boolean");
321
+ expect(builder.processCPC).toBe(false);
322
+ });
323
+ });
324
+ });
325
+ //# sourceMappingURL=TerminalBuilderParityTests.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalBuilderParityTests.test.js","sourceRoot":"","sources":["../../../../../test/Unit/Terminals/Builders/TerminalBuilderParityTests.test.ts"],"names":[],"mappings":"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"}
@@ -1258,8 +1258,49 @@ afterEach(async () => {
1258
1258
  throw err;
1259
1259
  }
1260
1260
  });
1261
+ // ===============================================================//
1262
+ test("[UpaManageTests:600] capture() serializes processCPC indicator", async () => {
1263
+ const controller = src_1.ServicesContainer.instance().getDeviceController();
1264
+ const responseauth = await device
1265
+ .authorize(10.0)
1266
+ .withEcrId(13)
1267
+ .execute();
1268
+ const builder = device
1269
+ .capture()
1270
+ .withTransactionId(responseauth.transactionId)
1271
+ .withAmount(10.0)
1272
+ .withEcrId(13)
1273
+ .withProcessCPC(true);
1274
+ const request = controller.buildManageTransaction(builder).getJsonRequest();
1275
+ console.log("[UpaManageTests:600] Capture with processCPC request payload:\n" +
1276
+ JSON.stringify(request, null, 2));
1277
+ expect(request.data.command).toBe("AuthCompletion");
1278
+ expect(request.data.data.transaction.processCPC).toBe("1");
1279
+ const response = await builder.execute();
1280
+ expect(response.status).toBe("Success");
1281
+ });
1282
+ test("[UpaManageTests:601] capture() serializes processCPC false as 0", async () => {
1283
+ const responseauth = await device
1284
+ .authorize(10.0)
1285
+ .withEcrId(13)
1286
+ .execute();
1287
+ const controller = src_1.ServicesContainer.instance().getDeviceController();
1288
+ sleep(100);
1289
+ const builder = device
1290
+ .capture()
1291
+ .withTransactionId(responseauth.transactionId)
1292
+ .withAmount(10.0)
1293
+ .withEcrId(13)
1294
+ .withProcessCPC(false);
1295
+ const request = controller.buildManageTransaction(builder).getJsonRequest();
1296
+ console.log("[UpaManageTests:601] Capture with processCPC false request payload:\n" +
1297
+ JSON.stringify(request, null, 2));
1298
+ expect(request.data.command).toBe("AuthCompletion");
1299
+ expect(request.data.data.transaction.processCPC).toBe("0");
1300
+ const response = await builder.execute();
1301
+ expect(response.status).toBe("Success");
1302
+ });
1261
1303
  });
1262
- // ===========================================================================
1263
1304
  // refund() with all administrative enhancements
1264
1305
  // ===========================================================================
1265
1306
  (0, UpaHelpertest_1.describeUpaLive)("UPA Credit – refund() with enhanced fields", () => {
@@ -1273,8 +1314,7 @@ afterEach(async () => {
1273
1314
  .refund(2)
1274
1315
  .withEcrId(13)
1275
1316
  .withReferenceNumber(saleresponse.terminalRefNumber)
1276
- .withClerkId(1234);
1277
- console.log("\n===== EXECUTING REFUND WITH CLERK ID =====");
1317
+ .withClerkId(123);
1278
1318
  const response = await builder.execute();
1279
1319
  console.log("Response Status:", response.status);
1280
1320
  expect(response).toBeDefined();
@@ -1291,23 +1331,9 @@ afterEach(async () => {
1291
1331
  .execute();
1292
1332
  expect(response).toBeDefined();
1293
1333
  expect(response.status).toBe("Success");
1334
+ expect(response.transactionAmount).toBe(10);
1294
1335
  console.log(`[Refund By TransID] Amount: ${response.transactionAmount}, Status: ${response.status}`);
1295
1336
  });
1296
- test("refund() includes totalAmount correctly", async () => {
1297
- const saleResponse = await device.sale(10).withEcrId(13).execute();
1298
- expect(saleResponse).toBeDefined();
1299
- expect(saleResponse.status).toBe("Success");
1300
- const response = await device
1301
- .refund(10.5)
1302
- .withEcrId(13)
1303
- .withTransactionId(saleResponse.gatewayTxnId)
1304
- .execute();
1305
- expect(response).toBeDefined();
1306
- expect(response.transactionAmount).toBe(10.5);
1307
- expect(response.status).not.toBe("Failed");
1308
- expect(response.deviceResponseCode).not.toBe("32");
1309
- console.log(`[Refund Amount] Amount: ${response.transactionAmount}, Status: ${response.status}`);
1310
- });
1311
1337
  });
1312
1338
  // ===========================================================================
1313
1339
  // verify() with all administrative enhancements
@@ -1328,43 +1354,13 @@ afterEach(async () => {
1328
1354
  .verify()
1329
1355
  .withEcrId(13)
1330
1356
  .withAddress(address)
1357
+ .withClerkId(1234)
1331
1358
  .execute();
1332
1359
  expect(response).toBeDefined();
1333
1360
  expect(response.status).toBe("Success");
1334
- console.log(`[Verify Address] AVS Code: ${response.avsResponseCode}, Status: ${response.status}`);
1335
- });
1336
- test("verify() cvv verification", async () => {
1337
- const response = await device
1338
- .verify()
1339
- .withEcrId(13)
1340
- .withSecurityCode(true)
1341
- .execute();
1342
- expect(response).toBeDefined();
1343
- expect(response.status).toBe("Success");
1344
- expect(response.deviceResponseCode).toBe("00");
1345
1361
  expect(response.maskedCardNumber).toBeDefined();
1346
1362
  expect(response.cardType).toBeDefined();
1347
- console.log(`[Verify CVV] Card: ${response.cardType}, Status: ${response.status}`);
1348
- });
1349
- test("verify() includes clerkId in request", async () => {
1350
- const response = await device
1351
- .verify()
1352
- .withEcrId(13)
1353
- .withClerkId(1234)
1354
- .execute();
1355
- expect(response).toBeDefined();
1356
- expect(response.status).toBe("Success");
1357
- console.log(`[Verify ClerkId] Status: ${response.status}`);
1358
- });
1359
- test("verify() includes languageCode in request", async () => {
1360
- const response = await device
1361
- .verify()
1362
- .withEcrId(13)
1363
- .withLanguage("es-ES")
1364
- .execute();
1365
- expect(response).toBeDefined();
1366
- expect(response.status).toBe("Success");
1367
- console.log(`[Verify Language] Status: ${response.status}`);
1363
+ console.log(`[Verify Address] AVS Code: ${response.avsResponseCode}, Status: ${response.status}`);
1368
1364
  });
1369
1365
  });
1370
1366
  // ===========================================================================
@@ -1408,45 +1404,4 @@ afterEach(async () => {
1408
1404
  }
1409
1405
  });
1410
1406
  });
1411
- // ===========================================================================
1412
- // Integration tests for all admin enhancements together
1413
- // ===========================================================================
1414
- (0, UpaHelpertest_1.describeUpaLive)("UPA Credit – Complete admin enhancements integration", () => {
1415
- let device;
1416
- beforeEach(() => {
1417
- device = (0, UpaHelpertest_1.createTestDevice)();
1418
- });
1419
- test("refund() with all admin fields builds complete request", async () => {
1420
- const saleResponse = await device.sale(60).withEcrId(12).execute();
1421
- const response = await device
1422
- .refund(25)
1423
- .withEcrId(12)
1424
- .withClerkId(1234)
1425
- .withAuthCode("")
1426
- .withCardBrandTransId("TRANSID2025")
1427
- .withReferenceNumber(saleResponse.terminalRefNumber)
1428
- .execute();
1429
- expect(response).toBeDefined();
1430
- expect(response.status).toBe("Success");
1431
- console.log(`[Refund AllFields] Amount: ${response.transactionAmount}, Status: ${response.status}`);
1432
- });
1433
- test("verify() with all admin fields builds complete request", async () => {
1434
- const address = new src_1.Address();
1435
- address.streetAddress1 = "456 Oak Ave";
1436
- address.city = "Los Angeles";
1437
- address.state = "CA";
1438
- address.postalCode = "90001";
1439
- const response = await device
1440
- .verify()
1441
- .withEcrId(13)
1442
- .withAddress(address)
1443
- .withClerkId(1234)
1444
- .withLanguage("en-US")
1445
- .withSecurityCode(true)
1446
- .execute();
1447
- expect(response).toBeDefined();
1448
- expect(response.status).toBe("Success");
1449
- console.log(`[Verify AllFields] Status: ${response.status}, AVS: ${response.avsResponseCode}`);
1450
- });
1451
- });
1452
1407
  //# sourceMappingURL=UpaAdmin.test.js.map