globalpayments-api 3.11.2 → 3.11.3

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 (57) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/lib/src/Entities/Errors.d.ts +7 -1
  3. package/lib/src/Entities/Errors.js +30 -1
  4. package/lib/src/Entities/Errors.js.map +1 -1
  5. package/lib/src/Entities/TransactionSummary.d.ts +5 -0
  6. package/lib/src/Entities/TransactionSummary.js +5 -0
  7. package/lib/src/Entities/TransactionSummary.js.map +1 -1
  8. package/lib/src/Terminals/Abstractions/IDeviceResponse.d.ts +46 -0
  9. package/lib/src/Terminals/Builders/TerminalAuthBuilder.d.ts +2 -0
  10. package/lib/src/Terminals/Builders/TerminalAuthBuilder.js +5 -2
  11. package/lib/src/Terminals/Builders/TerminalAuthBuilder.js.map +1 -1
  12. package/lib/src/Terminals/UPA/Reponses/BatchReportResponse.d.ts +9 -1
  13. package/lib/src/Terminals/UPA/Reponses/BatchReportResponse.js +22 -2
  14. package/lib/src/Terminals/UPA/Reponses/BatchReportResponse.js.map +1 -1
  15. package/lib/src/Terminals/UPA/Reponses/SafReportResponse.js +9 -0
  16. package/lib/src/Terminals/UPA/Reponses/SafReportResponse.js.map +1 -1
  17. package/lib/src/Terminals/UPA/Reponses/TransactionResponse.d.ts +1 -0
  18. package/lib/src/Terminals/UPA/Reponses/TransactionResponse.js +24 -0
  19. package/lib/src/Terminals/UPA/Reponses/TransactionResponse.js.map +1 -1
  20. package/lib/src/Terminals/UPA/Reponses/UpaEODResponse.d.ts +21 -1
  21. package/lib/src/Terminals/UPA/Reponses/UpaEODResponse.js +29 -0
  22. package/lib/src/Terminals/UPA/Reponses/UpaEODResponse.js.map +1 -1
  23. package/lib/src/Terminals/UPA/Reponses/UpaSAFResponse.js +5 -7
  24. package/lib/src/Terminals/UPA/Reponses/UpaSAFResponse.js.map +1 -1
  25. package/lib/src/Terminals/UPA/UpaController.js +12 -0
  26. package/lib/src/Terminals/UPA/UpaController.js.map +1 -1
  27. package/lib/test/Integration/Terminals/UPA/UpaTransactionResponseLive.test.d.ts +1 -0
  28. package/lib/test/Integration/Terminals/UPA/UpaTransactionResponseLive.test.js +378 -0
  29. package/lib/test/Integration/Terminals/UPA/UpaTransactionResponseLive.test.js.map +1 -0
  30. package/lib/test/Unit/Terminals/UPA/Responses/BatchList.test.d.ts +1 -0
  31. package/lib/test/Unit/Terminals/UPA/Responses/BatchList.test.js +63 -0
  32. package/lib/test/Unit/Terminals/UPA/Responses/BatchList.test.js.map +1 -0
  33. package/lib/test/Unit/Terminals/UPA/Responses/BatchReportResponse.test.d.ts +1 -0
  34. package/lib/test/Unit/Terminals/UPA/Responses/BatchReportResponse.test.js +145 -0
  35. package/lib/test/Unit/Terminals/UPA/Responses/BatchReportResponse.test.js.map +1 -0
  36. package/lib/test/Unit/Terminals/UPA/Responses/OpenTabDetailsResponse.test.d.ts +1 -0
  37. package/lib/test/Unit/Terminals/UPA/Responses/OpenTabDetailsResponse.test.js +70 -0
  38. package/lib/test/Unit/Terminals/UPA/Responses/OpenTabDetailsResponse.test.js.map +1 -0
  39. package/lib/test/Unit/Terminals/UPA/Responses/SafReportResponse.test.d.ts +1 -0
  40. package/lib/test/Unit/Terminals/UPA/Responses/SafReportResponse.test.js +112 -0
  41. package/lib/test/Unit/Terminals/UPA/Responses/SafReportResponse.test.js.map +1 -0
  42. package/lib/test/Unit/Terminals/UPA/Responses/UpaEODResponse.test.d.ts +1 -0
  43. package/lib/test/Unit/Terminals/UPA/Responses/UpaEODResponse.test.js +59 -0
  44. package/lib/test/Unit/Terminals/UPA/Responses/UpaEODResponse.test.js.map +1 -0
  45. package/lib/test/Unit/Terminals/UPA/Responses/UpaSAFResponse.test.d.ts +1 -0
  46. package/lib/test/Unit/Terminals/UPA/Responses/UpaSAFResponse.test.js +95 -0
  47. package/lib/test/Unit/Terminals/UPA/Responses/UpaSAFResponse.test.js.map +1 -0
  48. package/lib/test/Unit/Terminals/UPA/Responses/UpaTransactionResponse.test.d.ts +1 -0
  49. package/lib/test/Unit/Terminals/UPA/Responses/UpaTransactionResponse.test.js +1624 -0
  50. package/lib/test/Unit/Terminals/UPA/Responses/UpaTransactionResponse.test.js.map +1 -0
  51. package/lib/test/Unit/Terminals/UPA/UpaCredit.test.js +47 -29
  52. package/lib/test/Unit/Terminals/UPA/UpaCredit.test.js.map +1 -1
  53. package/lib/test/Unit/Terminals/UPA/UpaErrorResponse.test.d.ts +21 -0
  54. package/lib/test/Unit/Terminals/UPA/UpaErrorResponse.test.js +533 -0
  55. package/lib/test/Unit/Terminals/UPA/UpaErrorResponse.test.js.map +1 -0
  56. package/lib/test/Unit/Terminals/UPA/UpaHelpertest.js +1 -1
  57. package/package.json +1 -1
@@ -0,0 +1,1624 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Unit tests for UPA TransactionResponse mapping for all fields including EMV tags.
5
+ *
6
+ * Tests verify that all required fields are properly mapped from:
7
+ * - GP-API responses (provider: GatewayProvider.GpApi)
8
+ * - Native UPA device responses
9
+ *
10
+ * Payment types tested: VISA, MC (Mastercard), AMEX (American Express)
11
+ */
12
+ const TransactionResponse_1 = require("../../../../../src/Terminals/UPA/Reponses/TransactionResponse");
13
+ const src_1 = require("../../../../../src");
14
+ describe("UPA TransactionResponse Mapping Tests", () => {
15
+ describe("Host Response Fields Mapping", () => {
16
+ describe("responseId", () => {
17
+ it("should map responseId from host.responseId (GP-API)", () => {
18
+ const response = new TransactionResponse_1.TransactionResponse({
19
+ provider: src_1.GatewayProvider.GpApi,
20
+ response: {
21
+ requestId: "req-123",
22
+ response: "Sale",
23
+ data: {
24
+ host: {
25
+ responseId: "12345",
26
+ },
27
+ },
28
+ },
29
+ });
30
+ expect(response.responseId).toBe("12345");
31
+ });
32
+ it("should map responseId from host.responseId (Native UPA)", () => {
33
+ const response = new TransactionResponse_1.TransactionResponse({
34
+ data: {
35
+ requestId: "req-123",
36
+ response: "Sale",
37
+ data: {
38
+ host: {
39
+ responseId: "12345",
40
+ },
41
+ },
42
+ },
43
+ });
44
+ expect(response.responseId).toBe("12345");
45
+ });
46
+ it("should default to empty string if responseId not present", () => {
47
+ const response = new TransactionResponse_1.TransactionResponse({
48
+ provider: src_1.GatewayProvider.GpApi,
49
+ response: {
50
+ data: {
51
+ host: {},
52
+ },
53
+ },
54
+ });
55
+ expect(response.responseId).toBe("");
56
+ });
57
+ });
58
+ describe("status", () => {
59
+ it("should map status from cmdResult.result (GP-API)", () => {
60
+ const response = new TransactionResponse_1.TransactionResponse({
61
+ provider: src_1.GatewayProvider.GpApi,
62
+ response: {
63
+ cmdResult: {
64
+ result: "Success",
65
+ },
66
+ data: {
67
+ host: {},
68
+ },
69
+ },
70
+ });
71
+ expect(response.status).toBe("Success");
72
+ });
73
+ it("should map status from deviceResponseText (Native UPA)", () => {
74
+ const response = new TransactionResponse_1.TransactionResponse({
75
+ data: {
76
+ cmdResult: {
77
+ result: "Success",
78
+ },
79
+ data: {
80
+ host: {},
81
+ },
82
+ },
83
+ });
84
+ expect(response.status).toBe("Success");
85
+ });
86
+ });
87
+ describe("command", () => {
88
+ it("should map command from response.response (GP-API)", () => {
89
+ const response = new TransactionResponse_1.TransactionResponse({
90
+ provider: src_1.GatewayProvider.GpApi,
91
+ response: {
92
+ response: "Sale",
93
+ data: {
94
+ host: {},
95
+ },
96
+ },
97
+ });
98
+ expect(response.command).toBe("Sale");
99
+ });
100
+ it("should map command from data.response (Native UPA)", () => {
101
+ const response = new TransactionResponse_1.TransactionResponse({
102
+ data: {
103
+ response: "Sale",
104
+ data: {
105
+ host: {},
106
+ },
107
+ },
108
+ });
109
+ expect(response.command).toBe("Sale");
110
+ });
111
+ });
112
+ describe("referenceNumber", () => {
113
+ it("should map referenceNumber from host.referenceNumber (GP-API)", () => {
114
+ const response = new TransactionResponse_1.TransactionResponse({
115
+ provider: src_1.GatewayProvider.GpApi,
116
+ response: {
117
+ data: {
118
+ host: {
119
+ referenceNumber: "REF-987654",
120
+ },
121
+ },
122
+ },
123
+ });
124
+ expect(response.referenceNumber).toBe("REF-987654");
125
+ });
126
+ it("should map referenceNumber from host.referenceNumber (Native UPA)", () => {
127
+ const response = new TransactionResponse_1.TransactionResponse({
128
+ data: {
129
+ data: {
130
+ host: {
131
+ referenceNumber: "REF-987654",
132
+ },
133
+ },
134
+ },
135
+ });
136
+ expect(response.referenceNumber).toBe("REF-987654");
137
+ });
138
+ });
139
+ describe("terminalRefNumber", () => {
140
+ it("should map terminalRefNumber from host.tranNo (GP-API)", () => {
141
+ const response = new TransactionResponse_1.TransactionResponse({
142
+ provider: src_1.GatewayProvider.GpApi,
143
+ response: {
144
+ data: {
145
+ host: {
146
+ tranNo: "TXN-123456",
147
+ },
148
+ },
149
+ },
150
+ });
151
+ expect(response.terminalRefNumber).toBe("TXN-123456");
152
+ });
153
+ it("should map terminalRefNumber from host.tranNo (Native UPA)", () => {
154
+ const response = new TransactionResponse_1.TransactionResponse({
155
+ data: {
156
+ data: {
157
+ host: {
158
+ tranNo: "TXN-123456",
159
+ },
160
+ },
161
+ },
162
+ });
163
+ expect(response.terminalRefNumber).toBe("TXN-123456");
164
+ });
165
+ });
166
+ describe("responseCode", () => {
167
+ it("should map responseCode from host.responseCode (GP-API)", () => {
168
+ const response = new TransactionResponse_1.TransactionResponse({
169
+ provider: src_1.GatewayProvider.GpApi,
170
+ response: {
171
+ data: {
172
+ host: {
173
+ responseCode: "00",
174
+ },
175
+ },
176
+ },
177
+ });
178
+ expect(response.responseCode).toBe("00");
179
+ });
180
+ it("should map responseCode from host.responseCode (Native UPA)", () => {
181
+ const response = new TransactionResponse_1.TransactionResponse({
182
+ data: {
183
+ data: {
184
+ host: {
185
+ responseCode: "00",
186
+ },
187
+ },
188
+ },
189
+ });
190
+ expect(response.responseCode).toBe("00");
191
+ });
192
+ });
193
+ describe("approvalCode", () => {
194
+ it("should map approvalCode from host.approvalCode (GP-API)", () => {
195
+ const response = new TransactionResponse_1.TransactionResponse({
196
+ provider: src_1.GatewayProvider.GpApi,
197
+ response: {
198
+ data: {
199
+ host: {
200
+ approvalCode: "APPROVAL123",
201
+ },
202
+ },
203
+ },
204
+ });
205
+ expect(response.approvalCode).toBe("APPROVAL123");
206
+ });
207
+ it("should map approvalCode from host.approvalCode (Native UPA)", () => {
208
+ const response = new TransactionResponse_1.TransactionResponse({
209
+ data: {
210
+ data: {
211
+ host: {
212
+ approvalCode: "APPROVAL123",
213
+ },
214
+ },
215
+ },
216
+ });
217
+ expect(response.approvalCode).toBe("APPROVAL123");
218
+ });
219
+ });
220
+ describe("avsResponseCode", () => {
221
+ it("should map avsResponseCode from host.AvsResultCode (GP-API)", () => {
222
+ const response = new TransactionResponse_1.TransactionResponse({
223
+ provider: src_1.GatewayProvider.GpApi,
224
+ response: {
225
+ data: {
226
+ host: {
227
+ AvsResultCode: "A",
228
+ },
229
+ },
230
+ },
231
+ });
232
+ expect(response.avsResponseCode).toBe("A");
233
+ });
234
+ it("should map avsResponseCode from host.AvsResultCode (Native UPA)", () => {
235
+ const response = new TransactionResponse_1.TransactionResponse({
236
+ data: {
237
+ data: {
238
+ host: {
239
+ AvsResultCode: "A",
240
+ },
241
+ },
242
+ },
243
+ });
244
+ expect(response.avsResponseCode).toBe("A");
245
+ });
246
+ });
247
+ describe("avsResponseText", () => {
248
+ it("should map avsResponseText from host.AvsResultText (GP-API)", () => {
249
+ const response = new TransactionResponse_1.TransactionResponse({
250
+ provider: src_1.GatewayProvider.GpApi,
251
+ response: {
252
+ data: {
253
+ host: {
254
+ AvsResultText: "Address Match",
255
+ },
256
+ },
257
+ },
258
+ });
259
+ expect(response.avsResponseText).toBe("Address Match");
260
+ });
261
+ it("should map avsResponseText from host.AvsResultText (Native UPA)", () => {
262
+ const response = new TransactionResponse_1.TransactionResponse({
263
+ data: {
264
+ data: {
265
+ host: {
266
+ AvsResultText: "Address Match",
267
+ },
268
+ },
269
+ },
270
+ });
271
+ expect(response.avsResponseText).toBe("Address Match");
272
+ });
273
+ });
274
+ describe("cvvResponseCode", () => {
275
+ it("should map cvvResponseCode from host.CvvResultCode (GP-API)", () => {
276
+ const response = new TransactionResponse_1.TransactionResponse({
277
+ provider: src_1.GatewayProvider.GpApi,
278
+ response: {
279
+ data: {
280
+ host: {
281
+ CvvResultCode: "M",
282
+ },
283
+ },
284
+ },
285
+ });
286
+ expect(response.cvvResponseCode).toBe("M");
287
+ });
288
+ it("should map cvvResponseCode from host.CvvResultCode (Native UPA)", () => {
289
+ const response = new TransactionResponse_1.TransactionResponse({
290
+ data: {
291
+ data: {
292
+ host: {
293
+ CvvResultCode: "M",
294
+ },
295
+ },
296
+ },
297
+ });
298
+ expect(response.cvvResponseCode).toBe("M");
299
+ });
300
+ });
301
+ describe("cvvResponseText", () => {
302
+ it("should map cvvResponseText from host.CvvResultText (GP-API)", () => {
303
+ const response = new TransactionResponse_1.TransactionResponse({
304
+ provider: src_1.GatewayProvider.GpApi,
305
+ response: {
306
+ data: {
307
+ host: {
308
+ CvvResultText: "Match",
309
+ },
310
+ },
311
+ },
312
+ });
313
+ expect(response.cvvResponseText).toBe("Match");
314
+ });
315
+ it("should map cvvResponseText from host.CvvResultText (Native UPA)", () => {
316
+ const response = new TransactionResponse_1.TransactionResponse({
317
+ data: {
318
+ data: {
319
+ host: {
320
+ CvvResultText: "Match",
321
+ },
322
+ },
323
+ },
324
+ });
325
+ expect(response.cvvResponseText).toBe("Match");
326
+ });
327
+ });
328
+ });
329
+ describe("Amount Field Mapping", () => {
330
+ describe("baseAmount", () => {
331
+ it("should map baseAmount from host.baseAmount (GP-API)", () => {
332
+ const response = new TransactionResponse_1.TransactionResponse({
333
+ provider: src_1.GatewayProvider.GpApi,
334
+ response: {
335
+ data: {
336
+ host: {
337
+ baseAmount: "10000",
338
+ },
339
+ },
340
+ },
341
+ });
342
+ expect(response.baseAmount).toBe(10000);
343
+ });
344
+ it("should fallback to transaction.baseAmount (GP-API)", () => {
345
+ const response = new TransactionResponse_1.TransactionResponse({
346
+ provider: src_1.GatewayProvider.GpApi,
347
+ response: {
348
+ data: {
349
+ transaction: {
350
+ baseAmount: "10000",
351
+ },
352
+ },
353
+ },
354
+ });
355
+ expect(response.baseAmount).toBe(10000);
356
+ });
357
+ it("should map baseAmount from host.baseAmount (Native UPA)", () => {
358
+ const response = new TransactionResponse_1.TransactionResponse({
359
+ data: {
360
+ data: {
361
+ host: {
362
+ baseAmount: "10000",
363
+ },
364
+ },
365
+ },
366
+ });
367
+ expect(response.baseAmount).toBe(10000);
368
+ });
369
+ });
370
+ describe("tipAmount", () => {
371
+ it("should map tipAmount from host.tipAmount (GP-API)", () => {
372
+ const response = new TransactionResponse_1.TransactionResponse({
373
+ provider: src_1.GatewayProvider.GpApi,
374
+ response: {
375
+ data: {
376
+ host: {
377
+ tipAmount: "150",
378
+ },
379
+ },
380
+ },
381
+ });
382
+ expect(response.tipAmount).toBe(150);
383
+ });
384
+ it("should fallback to transaction.tipAmount (GP-API)", () => {
385
+ const response = new TransactionResponse_1.TransactionResponse({
386
+ provider: src_1.GatewayProvider.GpApi,
387
+ response: {
388
+ data: {
389
+ transaction: {
390
+ tipAmount: "150",
391
+ },
392
+ },
393
+ },
394
+ });
395
+ expect(response.tipAmount).toBe(150);
396
+ });
397
+ it("should map tipAmount from host.tipAmount (Native UPA)", () => {
398
+ const response = new TransactionResponse_1.TransactionResponse({
399
+ data: {
400
+ data: {
401
+ host: {
402
+ tipAmount: "150",
403
+ },
404
+ },
405
+ },
406
+ });
407
+ expect(response.tipAmount).toBe(150);
408
+ });
409
+ });
410
+ describe("taxAmount", () => {
411
+ it("should map taxAmount from host.taxAmount (GP-API)", () => {
412
+ const response = new TransactionResponse_1.TransactionResponse({
413
+ provider: src_1.GatewayProvider.GpApi,
414
+ response: {
415
+ data: {
416
+ host: {
417
+ taxAmount: "500",
418
+ },
419
+ },
420
+ },
421
+ });
422
+ expect(response.taxAmount).toBe(500);
423
+ });
424
+ it("should fallback to transaction.taxAmount (GP-API)", () => {
425
+ const response = new TransactionResponse_1.TransactionResponse({
426
+ provider: src_1.GatewayProvider.GpApi,
427
+ response: {
428
+ data: {
429
+ transaction: {
430
+ taxAmount: "500",
431
+ },
432
+ },
433
+ },
434
+ });
435
+ expect(response.taxAmount).toBe(500);
436
+ });
437
+ it("should map taxAmount from host.taxAmount (Native UPA)", () => {
438
+ const response = new TransactionResponse_1.TransactionResponse({
439
+ data: {
440
+ data: {
441
+ host: {
442
+ taxAmount: "500",
443
+ },
444
+ },
445
+ },
446
+ });
447
+ expect(response.taxAmount).toBe(500);
448
+ });
449
+ });
450
+ describe("transactionAmount", () => {
451
+ it("should map transactionAmount from host.totalAmount (GP-API)", () => {
452
+ const response = new TransactionResponse_1.TransactionResponse({
453
+ provider: src_1.GatewayProvider.GpApi,
454
+ response: {
455
+ data: {
456
+ host: {
457
+ totalAmount: "10650",
458
+ },
459
+ },
460
+ },
461
+ });
462
+ expect(response.transactionAmount).toBe(10650);
463
+ });
464
+ it("should fallback to transaction.totalAmount (GP-API)", () => {
465
+ const response = new TransactionResponse_1.TransactionResponse({
466
+ provider: src_1.GatewayProvider.GpApi,
467
+ response: {
468
+ data: {
469
+ transaction: {
470
+ totalAmount: "10650",
471
+ },
472
+ },
473
+ },
474
+ });
475
+ expect(response.transactionAmount).toBe(10650);
476
+ });
477
+ it("should map transactionAmount from host.totalAmount (Native UPA)", () => {
478
+ const response = new TransactionResponse_1.TransactionResponse({
479
+ data: {
480
+ data: {
481
+ host: {
482
+ totalAmount: "10650",
483
+ },
484
+ },
485
+ },
486
+ });
487
+ expect(response.transactionAmount).toBe(10650);
488
+ });
489
+ });
490
+ describe("authorizedAmount", () => {
491
+ it("should map authorizedAmount from host.authorizedAmount (GP-API)", () => {
492
+ const response = new TransactionResponse_1.TransactionResponse({
493
+ provider: src_1.GatewayProvider.GpApi,
494
+ response: {
495
+ data: {
496
+ host: {
497
+ authorizedAmount: "10650",
498
+ },
499
+ },
500
+ },
501
+ });
502
+ expect(response.authorizedAmount).toBe(10650);
503
+ });
504
+ it("should map authorizedAmount from host.authorizedAmount (Native UPA)", () => {
505
+ const response = new TransactionResponse_1.TransactionResponse({
506
+ data: {
507
+ data: {
508
+ host: {
509
+ authorizedAmount: "10650",
510
+ },
511
+ },
512
+ },
513
+ });
514
+ expect(response.authorizedAmount).toBe(10650);
515
+ });
516
+ it("should default to undefined if not present", () => {
517
+ const response = new TransactionResponse_1.TransactionResponse({
518
+ provider: src_1.GatewayProvider.GpApi,
519
+ response: {
520
+ data: {
521
+ host: {},
522
+ },
523
+ },
524
+ });
525
+ expect(response.authorizedAmount).toBeUndefined();
526
+ });
527
+ });
528
+ describe("cashBackAmount", () => {
529
+ it("should map cashBackAmount from host.cashBackAmount (GP-API)", () => {
530
+ const response = new TransactionResponse_1.TransactionResponse({
531
+ provider: src_1.GatewayProvider.GpApi,
532
+ response: {
533
+ data: {
534
+ host: {
535
+ cashBackAmount: "2000",
536
+ },
537
+ },
538
+ },
539
+ });
540
+ expect(response.cashBackAmount).toBe(2000);
541
+ });
542
+ it("should fallback to transaction.cashBackAmount (GP-API)", () => {
543
+ const response = new TransactionResponse_1.TransactionResponse({
544
+ provider: src_1.GatewayProvider.GpApi,
545
+ response: {
546
+ data: {
547
+ transaction: {
548
+ cashBackAmount: "2000",
549
+ },
550
+ },
551
+ },
552
+ });
553
+ expect(response.cashBackAmount).toBe(2000);
554
+ });
555
+ it("should map cashBackAmount from host.cashBackAmount (Native UPA)", () => {
556
+ const response = new TransactionResponse_1.TransactionResponse({
557
+ data: {
558
+ data: {
559
+ host: {
560
+ cashBackAmount: "2000",
561
+ },
562
+ },
563
+ },
564
+ });
565
+ expect(response.cashBackAmount).toBe(2000);
566
+ });
567
+ });
568
+ describe("merchantFee", () => {
569
+ it("should map merchantFee from host.surcharge (GP-API)", () => {
570
+ const response = new TransactionResponse_1.TransactionResponse({
571
+ provider: src_1.GatewayProvider.GpApi,
572
+ response: {
573
+ data: {
574
+ host: {
575
+ surcharge: "100",
576
+ },
577
+ },
578
+ },
579
+ });
580
+ expect(response.merchantFee).toBe(100);
581
+ });
582
+ });
583
+ describe("balanceAmount", () => {
584
+ it("should map balanceAmount from host.balanceDue (GP-API)", () => {
585
+ const response = new TransactionResponse_1.TransactionResponse({
586
+ provider: src_1.GatewayProvider.GpApi,
587
+ response: {
588
+ data: {
589
+ host: {
590
+ balanceDue: "0",
591
+ },
592
+ },
593
+ },
594
+ });
595
+ expect(response.balanceAmount).toBe(0);
596
+ });
597
+ it("should map balanceAmount from host.balanceDue (Native UPA)", () => {
598
+ const response = new TransactionResponse_1.TransactionResponse({
599
+ data: {
600
+ data: {
601
+ host: {
602
+ balanceDue: "0",
603
+ },
604
+ },
605
+ },
606
+ });
607
+ expect(response.balanceAmount).toBe(0);
608
+ });
609
+ });
610
+ describe("availableBalance", () => {
611
+ it("should map availableBalance from host.availableBalance (GP-API)", () => {
612
+ const response = new TransactionResponse_1.TransactionResponse({
613
+ provider: src_1.GatewayProvider.GpApi,
614
+ response: {
615
+ data: {
616
+ host: {
617
+ availableBalance: "50000",
618
+ },
619
+ },
620
+ },
621
+ });
622
+ expect(response.availableBalance).toBe(50000);
623
+ });
624
+ it("should map availableBalance from host.availableBalance (Native UPA)", () => {
625
+ const response = new TransactionResponse_1.TransactionResponse({
626
+ data: {
627
+ data: {
628
+ host: {
629
+ availableBalance: "50000",
630
+ },
631
+ },
632
+ },
633
+ });
634
+ expect(response.availableBalance).toBe(50000);
635
+ });
636
+ });
637
+ });
638
+ describe("Token Field Mapping", () => {
639
+ describe("token", () => {
640
+ it("should map token from host.tokenValue (GP-API)", () => {
641
+ const response = new TransactionResponse_1.TransactionResponse({
642
+ provider: src_1.GatewayProvider.GpApi,
643
+ response: {
644
+ data: {
645
+ host: {
646
+ tokenValue: "TOKEN-ABC123",
647
+ },
648
+ },
649
+ },
650
+ });
651
+ expect(response.token).toBe("TOKEN-ABC123");
652
+ });
653
+ it("should map token from host.tokenValue (Native UPA)", () => {
654
+ const response = new TransactionResponse_1.TransactionResponse({
655
+ data: {
656
+ data: {
657
+ host: {
658
+ tokenValue: "TOKEN-ABC123",
659
+ },
660
+ },
661
+ },
662
+ });
663
+ expect(response.token).toBe("TOKEN-ABC123");
664
+ });
665
+ });
666
+ describe("tokenResponseCode", () => {
667
+ it("should map tokenResponseCode from host.tokenRspCode (GP-API)", () => {
668
+ const response = new TransactionResponse_1.TransactionResponse({
669
+ provider: src_1.GatewayProvider.GpApi,
670
+ response: {
671
+ data: {
672
+ host: {
673
+ tokenRspCode: "0",
674
+ },
675
+ },
676
+ },
677
+ });
678
+ expect(response.tokenResponseCode).toBe("0");
679
+ });
680
+ it("should map tokenResponseCode from host.tokenRspCode (Native UPA)", () => {
681
+ const response = new TransactionResponse_1.TransactionResponse({
682
+ data: {
683
+ data: {
684
+ host: {
685
+ tokenRspCode: "0",
686
+ },
687
+ },
688
+ },
689
+ });
690
+ expect(response.tokenResponseCode).toBe("0");
691
+ });
692
+ });
693
+ describe("tokenResponseMessage", () => {
694
+ it("should map tokenResponseMessage from host.tokenRspMsg (GP-API)", () => {
695
+ const response = new TransactionResponse_1.TransactionResponse({
696
+ provider: src_1.GatewayProvider.GpApi,
697
+ response: {
698
+ data: {
699
+ host: {
700
+ tokenRspMsg: "Token Created",
701
+ },
702
+ },
703
+ },
704
+ });
705
+ expect(response.tokenResponseMessage).toBe("Token Created");
706
+ });
707
+ it("should map tokenResponseMessage from host.tokenRspMsg (Native UPA)", () => {
708
+ const response = new TransactionResponse_1.TransactionResponse({
709
+ data: {
710
+ data: {
711
+ host: {
712
+ tokenRspMsg: "Token Created",
713
+ },
714
+ },
715
+ },
716
+ });
717
+ expect(response.tokenResponseMessage).toBe("Token Created");
718
+ });
719
+ });
720
+ describe("cardBrandTransId", () => {
721
+ it("should map cardBrandTransId from host.cardBrandTransId (GP-API)", () => {
722
+ const response = new TransactionResponse_1.TransactionResponse({
723
+ provider: src_1.GatewayProvider.GpApi,
724
+ response: {
725
+ data: {
726
+ host: {
727
+ cardBrandTransId: "CBTI-123",
728
+ },
729
+ },
730
+ },
731
+ });
732
+ expect(response.cardBrandTransId).toBe("CBTI-123");
733
+ });
734
+ it("should map cardBrandTransId from host.cardBrandTransId (Native UPA)", () => {
735
+ const response = new TransactionResponse_1.TransactionResponse({
736
+ data: {
737
+ data: {
738
+ host: {
739
+ cardBrandTransId: "CBTI-123",
740
+ },
741
+ },
742
+ },
743
+ });
744
+ expect(response.cardBrandTransId).toBe("CBTI-123");
745
+ });
746
+ });
747
+ });
748
+ describe("Card Information Field Mapping", () => {
749
+ describe("maskedCardNumber", () => {
750
+ it("should map maskedCardNumber from payment.maskedPan (GP-API)", () => {
751
+ const response = new TransactionResponse_1.TransactionResponse({
752
+ provider: src_1.GatewayProvider.GpApi,
753
+ response: {
754
+ data: {
755
+ payment: {
756
+ maskedPan: "4111****1111",
757
+ },
758
+ host: {},
759
+ },
760
+ },
761
+ });
762
+ expect(response.maskedCardNumber).toBe("4111****1111");
763
+ });
764
+ it("should fallback to payment.maskedPAN (GP-API)", () => {
765
+ const response = new TransactionResponse_1.TransactionResponse({
766
+ provider: src_1.GatewayProvider.GpApi,
767
+ response: {
768
+ data: {
769
+ payment: {
770
+ maskedPAN: "4111****1111",
771
+ },
772
+ host: {},
773
+ },
774
+ },
775
+ });
776
+ expect(response.maskedCardNumber).toBe("4111****1111");
777
+ });
778
+ it("should map maskedCardNumber from payment.maskedPan (Native UPA)", () => {
779
+ const response = new TransactionResponse_1.TransactionResponse({
780
+ data: {
781
+ data: {
782
+ payment: {
783
+ maskedPan: "4111****1111",
784
+ },
785
+ },
786
+ },
787
+ });
788
+ expect(response.maskedCardNumber).toBe("4111****1111");
789
+ });
790
+ });
791
+ describe("entryMethod", () => {
792
+ it("should map entryMethod from payment.cardAcquisition (GP-API)", () => {
793
+ const response = new TransactionResponse_1.TransactionResponse({
794
+ provider: src_1.GatewayProvider.GpApi,
795
+ response: {
796
+ data: {
797
+ payment: {
798
+ cardAcquisition: "CHIP",
799
+ },
800
+ host: {},
801
+ },
802
+ },
803
+ });
804
+ expect(response.entryMethod).toBe("CHIP");
805
+ });
806
+ it("should map entryMethod from payment.cardAcquisition (Native UPA)", () => {
807
+ const response = new TransactionResponse_1.TransactionResponse({
808
+ data: {
809
+ data: {
810
+ payment: {
811
+ cardAcquisition: "CHIP",
812
+ },
813
+ },
814
+ },
815
+ });
816
+ expect(response.entryMethod).toBe("CHIP");
817
+ });
818
+ });
819
+ describe("paymentType", () => {
820
+ it("should map paymentType from payment.cardType (VISA)", () => {
821
+ const response = new TransactionResponse_1.TransactionResponse({
822
+ provider: src_1.GatewayProvider.GpApi,
823
+ response: {
824
+ data: {
825
+ payment: {
826
+ cardType: "VISA",
827
+ },
828
+ host: {},
829
+ },
830
+ },
831
+ });
832
+ expect(response.paymentType).toBe("VISA");
833
+ });
834
+ it("should map paymentType from payment.cardType (MC - Mastercard)", () => {
835
+ const response = new TransactionResponse_1.TransactionResponse({
836
+ provider: src_1.GatewayProvider.GpApi,
837
+ response: {
838
+ data: {
839
+ payment: {
840
+ cardType: "MC",
841
+ },
842
+ host: {},
843
+ },
844
+ },
845
+ });
846
+ expect(response.paymentType).toBe("MC");
847
+ });
848
+ it("should map paymentType from payment.cardType (AMEX)", () => {
849
+ const response = new TransactionResponse_1.TransactionResponse({
850
+ provider: src_1.GatewayProvider.GpApi,
851
+ response: {
852
+ data: {
853
+ payment: {
854
+ cardType: "AMEX",
855
+ },
856
+ host: {},
857
+ },
858
+ },
859
+ });
860
+ expect(response.paymentType).toBe("AMEX");
861
+ });
862
+ });
863
+ describe("cardBIN", () => {
864
+ it("should map cardBIN from payment.cardBIN (GP-API)", () => {
865
+ const response = new TransactionResponse_1.TransactionResponse({
866
+ provider: src_1.GatewayProvider.GpApi,
867
+ response: {
868
+ data: {
869
+ payment: {
870
+ cardBIN: "411111",
871
+ },
872
+ host: {},
873
+ },
874
+ },
875
+ });
876
+ expect(response.cardBIN).toBe("411111");
877
+ });
878
+ it("should map cardBIN from payment.cardBIN (Native UPA)", () => {
879
+ const response = new TransactionResponse_1.TransactionResponse({
880
+ data: {
881
+ data: {
882
+ payment: {
883
+ cardBIN: "411111",
884
+ },
885
+ },
886
+ },
887
+ });
888
+ expect(response.cardBIN).toBe("411111");
889
+ });
890
+ });
891
+ describe("panSequenceNumber", () => {
892
+ it("should map panSequenceNumber from payment.panSequenceNumber (GP-API)", () => {
893
+ const response = new TransactionResponse_1.TransactionResponse({
894
+ provider: src_1.GatewayProvider.GpApi,
895
+ response: {
896
+ data: {
897
+ payment: {
898
+ panSequenceNumber: "001",
899
+ },
900
+ host: {},
901
+ },
902
+ },
903
+ });
904
+ expect(response.panSequenceNumber).toBe("001");
905
+ });
906
+ it("should map panSequenceNumber from payment.panSequenceNumber (Native UPA)", () => {
907
+ const response = new TransactionResponse_1.TransactionResponse({
908
+ data: {
909
+ data: {
910
+ payment: {
911
+ panSequenceNumber: "001",
912
+ },
913
+ },
914
+ },
915
+ });
916
+ expect(response.panSequenceNumber).toBe("001");
917
+ });
918
+ });
919
+ describe("cardHolderName", () => {
920
+ it("should map cardHolderName from payment.cardHolderName (GP-API)", () => {
921
+ const response = new TransactionResponse_1.TransactionResponse({
922
+ provider: src_1.GatewayProvider.GpApi,
923
+ response: {
924
+ data: {
925
+ payment: {
926
+ cardHolderName: "John Doe",
927
+ },
928
+ host: {},
929
+ },
930
+ },
931
+ });
932
+ expect(response.cardHolderName).toBe("John Doe");
933
+ });
934
+ it("should map cardHolderName from payment.cardHolderName (Native UPA)", () => {
935
+ const response = new TransactionResponse_1.TransactionResponse({
936
+ data: {
937
+ data: {
938
+ payment: {
939
+ cardHolderName: "John Doe",
940
+ },
941
+ },
942
+ },
943
+ });
944
+ expect(response.cardHolderName).toBe("John Doe");
945
+ });
946
+ });
947
+ describe("expirationDate", () => {
948
+ it("should map expirationDate from payment.expiryDate (GP-API)", () => {
949
+ const response = new TransactionResponse_1.TransactionResponse({
950
+ provider: src_1.GatewayProvider.GpApi,
951
+ response: {
952
+ data: {
953
+ payment: {
954
+ expiryDate: "1225",
955
+ },
956
+ host: {},
957
+ },
958
+ },
959
+ });
960
+ expect(response.expirationDate).toBe("1225");
961
+ });
962
+ it("should map expirationDate from payment.expiryDate (Native UPA)", () => {
963
+ const response = new TransactionResponse_1.TransactionResponse({
964
+ data: {
965
+ data: {
966
+ payment: {
967
+ expiryDate: "1225",
968
+ },
969
+ },
970
+ },
971
+ });
972
+ expect(response.expirationDate).toBe("1225");
973
+ });
974
+ });
975
+ });
976
+ describe("EMV Tag Field Mapping - GP-API Response", () => {
977
+ describe("applicationLabel (EMV Tag 50)", () => {
978
+ it("should map applicationLabel from emv['50'] (GP-API)", () => {
979
+ const response = new TransactionResponse_1.TransactionResponse({
980
+ provider: src_1.GatewayProvider.GpApi,
981
+ response: {
982
+ data: {
983
+ host: {},
984
+ emv: {
985
+ "50": "MASTERCARD",
986
+ },
987
+ },
988
+ },
989
+ });
990
+ expect(response.emvApplicationLabel).toBe("MASTERCARD");
991
+ });
992
+ });
993
+ describe("applicationId (EMV Tag 9F06)", () => {
994
+ it("should map applicationId from emv['9F06'] (GP-API)", () => {
995
+ const response = new TransactionResponse_1.TransactionResponse({
996
+ provider: src_1.GatewayProvider.GpApi,
997
+ response: {
998
+ data: {
999
+ host: {},
1000
+ emv: {
1001
+ "9F06": "A0000000041010",
1002
+ },
1003
+ },
1004
+ },
1005
+ });
1006
+ expect(response.emvApplicationId).toBe("A0000000041010");
1007
+ });
1008
+ });
1009
+ describe("applicationPreferredName (EMV Tag 9F12)", () => {
1010
+ it("should map applicationPreferredName from emv['9F12'] (GP-API)", () => {
1011
+ const response = new TransactionResponse_1.TransactionResponse({
1012
+ provider: src_1.GatewayProvider.GpApi,
1013
+ response: {
1014
+ data: {
1015
+ host: {},
1016
+ emv: {
1017
+ "9F12": "MASTERCARD",
1018
+ },
1019
+ },
1020
+ },
1021
+ });
1022
+ expect(response.emvApplicationPreferredName).toBe("MASTERCARD");
1023
+ });
1024
+ });
1025
+ describe("applicationCryptogram (EMV Tag 9F26)", () => {
1026
+ it("should map applicationCryptogram from emv['9F26'] (GP-API)", () => {
1027
+ const response = new TransactionResponse_1.TransactionResponse({
1028
+ provider: src_1.GatewayProvider.GpApi,
1029
+ response: {
1030
+ data: {
1031
+ host: {},
1032
+ emv: {
1033
+ "9F26": "A1B2C3D4E5F6G7H8",
1034
+ },
1035
+ },
1036
+ },
1037
+ });
1038
+ expect(response.emvApplicationCryptogram).toBe("A1B2C3D4E5F6G7H8");
1039
+ });
1040
+ });
1041
+ describe("cardHolderVerificationMethod (EMV Tag 9F34)", () => {
1042
+ it("should map cardHolderVerificationMethod from emv['9F34'] (GP-API)", () => {
1043
+ const response = new TransactionResponse_1.TransactionResponse({
1044
+ provider: src_1.GatewayProvider.GpApi,
1045
+ response: {
1046
+ data: {
1047
+ host: {},
1048
+ emv: {
1049
+ "9F34": "1F0102",
1050
+ },
1051
+ },
1052
+ },
1053
+ });
1054
+ expect(response.cardHolderVerificationMethod).toBe("1F0102");
1055
+ });
1056
+ });
1057
+ describe("terminalVerificationResults (EMV Tag 95)", () => {
1058
+ it("should map terminalVerificationResults from emv['95'] (GP-API)", () => {
1059
+ const response = new TransactionResponse_1.TransactionResponse({
1060
+ provider: src_1.GatewayProvider.GpApi,
1061
+ response: {
1062
+ data: {
1063
+ host: {},
1064
+ emv: {
1065
+ "95": "8000008000",
1066
+ },
1067
+ },
1068
+ },
1069
+ });
1070
+ expect(response.emvTerminalVerificationResults).toBe("8000008000");
1071
+ });
1072
+ });
1073
+ describe("Complete EMV Tag Set (GP-API)", () => {
1074
+ it("should map all common EMV tags (GP-API)", () => {
1075
+ const response = new TransactionResponse_1.TransactionResponse({
1076
+ provider: src_1.GatewayProvider.GpApi,
1077
+ response: {
1078
+ data: {
1079
+ host: {},
1080
+ emv: {
1081
+ "4F": "A0000000041010",
1082
+ "50": "MASTERCARD",
1083
+ "5F20": "John Doe",
1084
+ "5F2A": "0840",
1085
+ "82": "39C8",
1086
+ "84": "A0000000041010",
1087
+ "8A": "Y1",
1088
+ "95": "8000008000",
1089
+ "9A": "210825",
1090
+ "9B": "E8C001",
1091
+ "9C": "00",
1092
+ "9F02": "000000001000",
1093
+ "9F03": "000000000000",
1094
+ "9F06": "A0000000041010",
1095
+ "9F1A": "0840",
1096
+ "9F26": "A1B2C3D4E5F6G7H8",
1097
+ "9F27": "80",
1098
+ "9F34": "1F0102",
1099
+ "9F35": "22",
1100
+ "9F36": "0001",
1101
+ "9F37": "12345678",
1102
+ "9F40": "F0F001F8",
1103
+ "9F41": "000000",
1104
+ "9F53": "9500",
1105
+ TacDefault: "000000",
1106
+ TacDenial: "000000",
1107
+ TacOnline: "AC0000",
1108
+ },
1109
+ },
1110
+ },
1111
+ });
1112
+ expect(response.applicationIdentifier).toBe("A0000000041010");
1113
+ expect(response.emvApplicationLabel).toBe("MASTERCARD");
1114
+ expect(response.emvCardholderName).toBe("John Doe");
1115
+ expect(response.transactionCurrencyCode).toBe("0840");
1116
+ expect(response.applicationAIP).toBe("39C8");
1117
+ expect(response.dedicatedDF).toBe("A0000000041010");
1118
+ expect(response.authorizedResponse).toBe("Y1");
1119
+ expect(response.emvTerminalVerificationResults).toBe("8000008000");
1120
+ expect(response.transactionDate).toBe("210825");
1121
+ expect(response.transactionTSI).toBe("E8C001");
1122
+ expect(response.transactionTypeEMV).toBe("00");
1123
+ expect(response.amountAuthorised).toBe("000000001000");
1124
+ expect(response.otherAmount).toBe("000000000000");
1125
+ expect(response.emvApplicationId).toBe("A0000000041010");
1126
+ expect(response.terminalCountryCode).toBe("0840");
1127
+ expect(response.emvApplicationCryptogram).toBe("A1B2C3D4E5F6G7H8");
1128
+ expect(response.applicationCryptogramType_Tag).toBe("80");
1129
+ expect(response.cvmResults).toBe("1F0102");
1130
+ expect(response.cardHolderVerificationMethod).toBe("1F0102");
1131
+ expect(response.terminalType).toBe("22");
1132
+ expect(response.applicationTransactionCounter).toBe("0001");
1133
+ expect(response.unpredictableNumber).toBe("12345678");
1134
+ expect(response.additionalTerminalCapabilities).toBe("F0F001F8");
1135
+ expect(response.transactionSequenceCounter).toBe("000000");
1136
+ expect(response.transactionCategoryCode).toBe("9500");
1137
+ expect(response.tacDefault).toBe("000000");
1138
+ expect(response.tacDenial).toBe("000000");
1139
+ expect(response.tacOnline).toBe("AC0000");
1140
+ });
1141
+ });
1142
+ });
1143
+ describe("EMV Tag Field Mapping - Native UPA Response", () => {
1144
+ describe("Complete EMV Tag Set (Native UPA)", () => {
1145
+ it("should map all common EMV tags (Native UPA)", () => {
1146
+ const response = new TransactionResponse_1.TransactionResponse({
1147
+ data: {
1148
+ data: {
1149
+ host: {},
1150
+ emv: {
1151
+ "4F": "A0000000041010",
1152
+ "50": "MASTERCARD",
1153
+ "5F20": "John Doe",
1154
+ "5F2A": "0840",
1155
+ "82": "39C8",
1156
+ "84": "A0000000041010",
1157
+ "8A": "Y1",
1158
+ "95": "8000008000",
1159
+ "9A": "210825",
1160
+ "9B": "E8C001",
1161
+ "9C": "00",
1162
+ "9F02": "000000001000",
1163
+ "9F03": "000000000000",
1164
+ "9F06": "A0000000041010",
1165
+ "9F1A": "0840",
1166
+ "9F26": "A1B2C3D4E5F6G7H8",
1167
+ "9F27": "80",
1168
+ "9F34": "1F0102",
1169
+ "9F35": "22",
1170
+ "9F36": "0001",
1171
+ "9F37": "12345678",
1172
+ "9F40": "F0F001F8",
1173
+ "9F41": "000000",
1174
+ "9F53": "9500",
1175
+ TacDefault: "000000",
1176
+ TacDenial: "000000",
1177
+ TacOnline: "AC0000",
1178
+ },
1179
+ },
1180
+ },
1181
+ });
1182
+ expect(response.applicationIdentifier).toBe("A0000000041010");
1183
+ expect(response.emvApplicationLabel).toBe("MASTERCARD");
1184
+ expect(response.emvCardholderName).toBe("John Doe");
1185
+ expect(response.transactionCurrencyCode).toBe("0840");
1186
+ expect(response.applicationAIP).toBe("39C8");
1187
+ expect(response.dedicatedDF).toBe("A0000000041010");
1188
+ expect(response.authorizedResponse).toBe("Y1");
1189
+ expect(response.emvTerminalVerificationResults).toBe("8000008000");
1190
+ expect(response.transactionDate).toBe("210825");
1191
+ expect(response.transactionTSI).toBe("E8C001");
1192
+ expect(response.transactionTypeEMV).toBe("00");
1193
+ expect(response.amountAuthorised).toBe("000000001000");
1194
+ expect(response.otherAmount).toBe("000000000000");
1195
+ expect(response.emvApplicationId).toBe("A0000000041010");
1196
+ expect(response.terminalCountryCode).toBe("0840");
1197
+ expect(response.emvApplicationCryptogram).toBe("A1B2C3D4E5F6G7H8");
1198
+ expect(response.applicationCryptogramType_Tag).toBe("80");
1199
+ expect(response.cvmResults).toBe("1F0102");
1200
+ expect(response.cardHolderVerificationMethod).toBe("1F0102");
1201
+ expect(response.terminalType).toBe("22");
1202
+ expect(response.applicationTransactionCounter).toBe("0001");
1203
+ expect(response.unpredictableNumber).toBe("12345678");
1204
+ expect(response.additionalTerminalCapabilities).toBe("F0F001F8");
1205
+ expect(response.transactionSequenceCounter).toBe("000000");
1206
+ expect(response.transactionCategoryCode).toBe("9500");
1207
+ expect(response.tacDefault).toBe("000000");
1208
+ expect(response.tacDenial).toBe("000000");
1209
+ expect(response.tacOnline).toBe("AC0000");
1210
+ });
1211
+ });
1212
+ });
1213
+ describe("Full Transaction Response - Sample VISA Sale", () => {
1214
+ it("should map complete VISA sale response (GP-API)", () => {
1215
+ const response = new TransactionResponse_1.TransactionResponse({
1216
+ provider: src_1.GatewayProvider.GpApi,
1217
+ id: "TXN-VISA-001",
1218
+ response: {
1219
+ requestId: "REQ-VISA-001",
1220
+ response: "Sale",
1221
+ EcrId: "ECR-001",
1222
+ cmdResult: {
1223
+ result: "Success",
1224
+ errorCode: "00",
1225
+ errorMessage: "",
1226
+ },
1227
+ data: {
1228
+ host: {
1229
+ responseId: "RESP-001",
1230
+ referenceNumber: "REF-VISA-001",
1231
+ tranNo: "TXN-NO-001",
1232
+ respDateTime: "2024-01-15T10:30:00Z",
1233
+ gatewayResponseCode: "00",
1234
+ gatewayResponseMessage: "Approved",
1235
+ responseCode: "00",
1236
+ responseText: "Approved",
1237
+ approvalCode: "APPR-001",
1238
+ AvsResultCode: "A",
1239
+ AvsResultText: "Address Match",
1240
+ CvvResultCode: "M",
1241
+ CvvResultText: "Match",
1242
+ baseAmount: "10000",
1243
+ tipAmount: "150",
1244
+ taxAmount: "500",
1245
+ totalAmount: "10650",
1246
+ authorizedAmount: "10650",
1247
+ cashBackAmount: "0",
1248
+ balanceDue: "0",
1249
+ availableBalance: "50000",
1250
+ tokenValue: "TOK-VISA-001",
1251
+ tokenRspCode: "0",
1252
+ tokenRspMsg: "Token Created",
1253
+ cardBrandTransId: "CBTI-001",
1254
+ storeAndForward: 0,
1255
+ },
1256
+ payment: {
1257
+ cardType: "VISA",
1258
+ cardGroup: "CREDIT",
1259
+ ebtType: "",
1260
+ clerkId: "CLK-001",
1261
+ cardAcquisition: "CHIP",
1262
+ maskedPan: "4111****1111",
1263
+ cardHolderName: "John Smith",
1264
+ expiryDate: "1225",
1265
+ transactionType: "Sale",
1266
+ cardBIN: "411111",
1267
+ panSequenceNumber: "001",
1268
+ PinVerified: "Y",
1269
+ fallback: "0",
1270
+ invoiceNbr: "INV-001",
1271
+ },
1272
+ transaction: {
1273
+ baseAmount: "10000",
1274
+ tipAmount: "150",
1275
+ totalAmount: "10650",
1276
+ extraChargeTotal: "0",
1277
+ },
1278
+ multipleMessage: "1 of 1",
1279
+ terminalNumber: "TERM-001",
1280
+ emv: {
1281
+ "4F": "A0000000031010",
1282
+ "50": "VISA",
1283
+ "5F20": "John Smith",
1284
+ "5F2A": "0840",
1285
+ "82": "18C8",
1286
+ "84": "A0000000031010",
1287
+ "8A": "Y1",
1288
+ "95": "8000008000",
1289
+ "9A": "240115",
1290
+ "9B": "E8C001",
1291
+ "9C": "00",
1292
+ "9F02": "000000010650",
1293
+ "9F03": "000000000000",
1294
+ "9F06": "A0000000031010",
1295
+ "9F1A": "0840",
1296
+ "9F26": "A1B2C3D4E5F6G7H8",
1297
+ "9F34": "1F0102",
1298
+ "9F35": "22",
1299
+ "9F36": "0001",
1300
+ TacDefault: "000000",
1301
+ TacDenial: "000000",
1302
+ TacOnline: "AC0000",
1303
+ },
1304
+ },
1305
+ },
1306
+ });
1307
+ // Verify host response fields
1308
+ expect(response.responseId).toBe("RESP-001");
1309
+ expect(response.status).toBe("Success");
1310
+ expect(response.command).toBe("Sale");
1311
+ expect(response.referenceNumber).toBe("REF-VISA-001");
1312
+ expect(response.terminalRefNumber).toBe("TXN-NO-001");
1313
+ expect(response.responseCode).toBe("00");
1314
+ expect(response.approvalCode).toBe("APPR-001");
1315
+ expect(response.avsResponseCode).toBe("A");
1316
+ expect(response.avsResponseText).toBe("Address Match");
1317
+ expect(response.cvvResponseCode).toBe("M");
1318
+ expect(response.cvvResponseText).toBe("Match");
1319
+ // Verify amount fields
1320
+ expect(response.baseAmount).toBe(10000);
1321
+ expect(response.tipAmount).toBe(150);
1322
+ expect(response.taxAmount).toBe(500);
1323
+ expect(response.transactionAmount).toBe(10650);
1324
+ expect(response.authorizedAmount).toBe(10650);
1325
+ expect(response.cashBackAmount).toBe(0);
1326
+ expect(response.balanceAmount).toBe(0);
1327
+ expect(response.availableBalance).toBe(50000);
1328
+ // Verify token fields
1329
+ expect(response.token).toBe("TOK-VISA-001");
1330
+ expect(response.tokenResponseCode).toBe("0");
1331
+ expect(response.tokenResponseMessage).toBe("Token Created");
1332
+ expect(response.cardBrandTransId).toBe("CBTI-001");
1333
+ // Verify card information
1334
+ expect(response.paymentType).toBe("VISA");
1335
+ expect(response.maskedCardNumber).toBe("4111****1111");
1336
+ expect(response.entryMethod).toBe("CHIP");
1337
+ expect(response.cardHolderName).toBe("John Smith");
1338
+ expect(response.expirationDate).toBe("1225");
1339
+ expect(response.cardBIN).toBe("411111");
1340
+ expect(response.panSequenceNumber).toBe("001");
1341
+ // Verify EMV fields
1342
+ expect(response.applicationIdentifier).toBe("A0000000031010");
1343
+ expect(response.emvApplicationLabel).toBe("VISA");
1344
+ expect(response.emvCardholderName).toBe("John Smith");
1345
+ expect(response.transactionCurrencyCode).toBe("0840");
1346
+ expect(response.emvApplicationCryptogram).toBe("A1B2C3D4E5F6G7H8");
1347
+ expect(response.cardHolderVerificationMethod).toBe("1F0102");
1348
+ expect(response.emvTerminalVerificationResults).toBe("8000008000");
1349
+ expect(response.tacDefault).toBe("000000");
1350
+ expect(response.tacOnline).toBe("AC0000");
1351
+ });
1352
+ });
1353
+ describe("Full Transaction Response - Sample Mastercard Sale", () => {
1354
+ it("should map complete Mastercard sale response (Native UPA)", () => {
1355
+ const response = new TransactionResponse_1.TransactionResponse({
1356
+ data: {
1357
+ requestId: "REQ-MC-001",
1358
+ response: "Sale",
1359
+ EcrId: "ECR-002",
1360
+ cmdResult: {
1361
+ result: "Success",
1362
+ errorCode: "00",
1363
+ errorMessage: "",
1364
+ },
1365
+ data: {
1366
+ host: {
1367
+ responseId: "RESP-002",
1368
+ referenceNumber: "REF-MC-001",
1369
+ tranNo: "TXN-NO-002",
1370
+ respDateTime: "2024-01-15T10:45:00Z",
1371
+ gatewayResponseCode: "00",
1372
+ gatewayResponseMessage: "Approved",
1373
+ responseCode: "00",
1374
+ responseText: "Approved",
1375
+ approvalCode: "APPR-002",
1376
+ AvsResultCode: "A",
1377
+ AvsResultText: "Address Match",
1378
+ CvvResultCode: "M",
1379
+ CvvResultText: "Match",
1380
+ baseAmount: "25000",
1381
+ tipAmount: "500",
1382
+ taxAmount: "1200",
1383
+ totalAmount: "26700",
1384
+ authorizedAmount: "26700",
1385
+ cashBackAmount: "5000",
1386
+ balanceDue: "0",
1387
+ availableBalance: "75000",
1388
+ tokenValue: "TOK-MC-001",
1389
+ tokenRspCode: "0",
1390
+ tokenRspMsg: "Token Created",
1391
+ cardBrandTransId: "CBTI-002",
1392
+ storeAndForward: 0,
1393
+ },
1394
+ payment: {
1395
+ cardType: "MC",
1396
+ cardGroup: "CREDIT",
1397
+ ebtType: "",
1398
+ clerkId: "CLK-002",
1399
+ cardAcquisition: "CHIP",
1400
+ maskedPan: "5555****5555",
1401
+ cardHolderName: "Jane Doe",
1402
+ expiryDate: "0625",
1403
+ transactionType: "Sale",
1404
+ cardBIN: "555555",
1405
+ panSequenceNumber: "002",
1406
+ PinVerified: "Y",
1407
+ fallback: "0",
1408
+ invoiceNbr: "INV-002",
1409
+ },
1410
+ transaction: {
1411
+ baseAmount: "25000",
1412
+ tipAmount: "500",
1413
+ totalAmount: "26700",
1414
+ extraChargeTotal: "0",
1415
+ },
1416
+ multipleMessage: "1 of 1",
1417
+ terminalNumber: "TERM-002",
1418
+ emv: {
1419
+ "4F": "A0000000041010",
1420
+ "50": "MASTERCARD",
1421
+ "5F20": "Jane Doe",
1422
+ "5F2A": "0840",
1423
+ "82": "39C8",
1424
+ "84": "A0000000041010",
1425
+ "8A": "Y1",
1426
+ "95": "8000008000",
1427
+ "9A": "240115",
1428
+ "9B": "E8C001",
1429
+ "9C": "00",
1430
+ "9F02": "000000026700",
1431
+ "9F03": "000000000000",
1432
+ "9F06": "A0000000041010",
1433
+ "9F1A": "0840",
1434
+ "9F26": "B2C3D4E5F6G7H8I9",
1435
+ "9F34": "1F0102",
1436
+ "9F35": "22",
1437
+ "9F36": "0002",
1438
+ TacDefault: "000000",
1439
+ TacDenial: "000000",
1440
+ TacOnline: "AC0000",
1441
+ },
1442
+ },
1443
+ },
1444
+ });
1445
+ // Verify host response fields
1446
+ expect(response.responseId).toBe("RESP-002");
1447
+ expect(response.command).toBe("Sale");
1448
+ expect(response.referenceNumber).toBe("REF-MC-001");
1449
+ expect(response.terminalRefNumber).toBe("TXN-NO-002");
1450
+ // Verify amount fields
1451
+ expect(response.baseAmount).toBe(25000);
1452
+ expect(response.tipAmount).toBe(500);
1453
+ expect(response.taxAmount).toBe(1200);
1454
+ expect(response.transactionAmount).toBe(26700);
1455
+ expect(response.cashBackAmount).toBe(5000);
1456
+ // Verify card information
1457
+ expect(response.paymentType).toBe("MC");
1458
+ expect(response.maskedCardNumber).toBe("5555****5555");
1459
+ expect(response.cardHolderName).toBe("Jane Doe");
1460
+ // Verify EMV fields
1461
+ expect(response.emvApplicationLabel).toBe("MASTERCARD");
1462
+ expect(response.emvApplicationCryptogram).toBe("B2C3D4E5F6G7H8I9");
1463
+ });
1464
+ });
1465
+ describe("Full Transaction Response - Sample AMEX Sale", () => {
1466
+ it("should map complete AMEX sale response (GP-API)", () => {
1467
+ const response = new TransactionResponse_1.TransactionResponse({
1468
+ provider: src_1.GatewayProvider.GpApi,
1469
+ response: {
1470
+ requestId: "REQ-AMEX-001",
1471
+ response: "Sale",
1472
+ EcrId: "ECR-003",
1473
+ cmdResult: {
1474
+ result: "Success",
1475
+ errorCode: "00",
1476
+ },
1477
+ data: {
1478
+ host: {
1479
+ responseId: "RESP-003",
1480
+ referenceNumber: "REF-AMEX-001",
1481
+ tranNo: "TXN-NO-003",
1482
+ responseCode: "00",
1483
+ responseText: "Approved",
1484
+ approvalCode: "APPR-003",
1485
+ baseAmount: "15000",
1486
+ tipAmount: "300",
1487
+ taxAmount: "750",
1488
+ totalAmount: "16050",
1489
+ authorizedAmount: "16050",
1490
+ tokenValue: "TOK-AMEX-001",
1491
+ tokenRspCode: "0",
1492
+ tokenRspMsg: "Token Created",
1493
+ cardBrandTransId: "CBTI-003",
1494
+ },
1495
+ payment: {
1496
+ cardType: "AMEX",
1497
+ cardGroup: "CREDIT",
1498
+ cardAcquisition: "CHIP",
1499
+ maskedPan: "378282****6000",
1500
+ cardHolderName: "Bob Johnson",
1501
+ expiryDate: "0825",
1502
+ cardBIN: "378282",
1503
+ panSequenceNumber: "003",
1504
+ invoiceNbr: "INV-003",
1505
+ },
1506
+ emv: {
1507
+ "50": "AMEX",
1508
+ "5F20": "Bob Johnson",
1509
+ "9F26": "C3D4E5F6G7H8I9J0",
1510
+ "9F34": "1F0102",
1511
+ },
1512
+ },
1513
+ },
1514
+ });
1515
+ // Verify card information
1516
+ expect(response.paymentType).toBe("AMEX");
1517
+ expect(response.maskedCardNumber).toBe("378282****6000");
1518
+ expect(response.cardBIN).toBe("378282");
1519
+ // Verify amount fields
1520
+ expect(response.baseAmount).toBe(15000);
1521
+ expect(response.transactionAmount).toBe(16050);
1522
+ // Verify token fields
1523
+ expect(response.token).toBe("TOK-AMEX-001");
1524
+ expect(response.tokenResponseCode).toBe("0");
1525
+ });
1526
+ });
1527
+ describe("Edge Cases and Null Handling", () => {
1528
+ it("should handle null/undefined values gracefully", () => {
1529
+ const response = new TransactionResponse_1.TransactionResponse({
1530
+ provider: src_1.GatewayProvider.GpApi,
1531
+ response: {
1532
+ data: {
1533
+ host: null,
1534
+ payment: null,
1535
+ emv: null,
1536
+ },
1537
+ },
1538
+ });
1539
+ expect(response.responseId).toBe("");
1540
+ expect(response.baseAmount).toBeUndefined();
1541
+ expect(response.taxAmount).toBeUndefined();
1542
+ expect(response.authorizedAmount).toBeUndefined();
1543
+ });
1544
+ it("should handle empty EMV object", () => {
1545
+ const response = new TransactionResponse_1.TransactionResponse({
1546
+ provider: src_1.GatewayProvider.GpApi,
1547
+ response: {
1548
+ data: {
1549
+ host: {},
1550
+ emv: {},
1551
+ },
1552
+ },
1553
+ });
1554
+ expect(response.emvApplicationLabel).toBe("");
1555
+ expect(response.emvApplicationId).toBe("");
1556
+ });
1557
+ it("should handle string JSON input", () => {
1558
+ const jsonString = JSON.stringify({
1559
+ provider: src_1.GatewayProvider.GpApi,
1560
+ response: {
1561
+ requestId: "REQ-STR-001",
1562
+ data: {
1563
+ host: {
1564
+ responseId: "RESP-STR-001",
1565
+ referenceNumber: "REF-STR-001",
1566
+ },
1567
+ },
1568
+ },
1569
+ });
1570
+ const response = new TransactionResponse_1.TransactionResponse(jsonString);
1571
+ expect(response.responseId).toBe("RESP-STR-001");
1572
+ expect(response.referenceNumber).toBe("REF-STR-001");
1573
+ });
1574
+ it("should handle invalid JSON string gracefully", () => {
1575
+ expect(() => {
1576
+ new TransactionResponse_1.TransactionResponse("invalid json");
1577
+ }).toThrow();
1578
+ });
1579
+ });
1580
+ describe("TYP Loyalty Fields Mapping", () => {
1581
+ it("should map TYP sale redemption fields (GP-API)", () => {
1582
+ const response = new TransactionResponse_1.TransactionResponse({
1583
+ provider: src_1.GatewayProvider.GpApi,
1584
+ response: {
1585
+ data: {
1586
+ host: {
1587
+ redeemId: "REDEEM-001",
1588
+ redeemStatus: "COMPLETE",
1589
+ currencyAmountRedeemed: "1000",
1590
+ pointsRedeemed: "10000",
1591
+ discountAmountRedeemed: "500",
1592
+ },
1593
+ },
1594
+ },
1595
+ });
1596
+ expect(response.redeemId).toBe("REDEEM-001");
1597
+ expect(response.redeemStatus).toBe("COMPLETE");
1598
+ expect(response.currencyAmountRedeemed).toBe(1000);
1599
+ expect(response.pointsRedeemed).toBe(10000);
1600
+ expect(response.discountAmountRedeemed).toBe(500);
1601
+ });
1602
+ it("should map TYP void/reverse redemption fields (Native UPA)", () => {
1603
+ const response = new TransactionResponse_1.TransactionResponse({
1604
+ data: {
1605
+ data: {
1606
+ host: {
1607
+ voidRedeemId: "VOID-REDEEM-001",
1608
+ voidRedeemStatus: "REVERSED",
1609
+ voidCurrencyAmountRedeemed: "1000",
1610
+ voidPointsRedeemed: "10000",
1611
+ voidDiscountAmountRedeemed: "500",
1612
+ },
1613
+ },
1614
+ },
1615
+ });
1616
+ expect(response.voidRedeemId).toBe("VOID-REDEEM-001");
1617
+ expect(response.voidRedeemStatus).toBe("REVERSED");
1618
+ expect(response.voidCurrencyAmountRedeemed).toBe(1000);
1619
+ expect(response.voidPointsRedeemed).toBe(10000);
1620
+ expect(response.voidDiscountAmountRedeemed).toBe(500);
1621
+ });
1622
+ });
1623
+ });
1624
+ //# sourceMappingURL=UpaTransactionResponse.test.js.map