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.
- package/CHANGELOG.md +8 -1
- package/README.md +18 -0
- package/lib/src/Builders/AuthorizationBuilder.d.ts +0 -1
- package/lib/src/Builders/AuthorizationBuilder.js +0 -4
- package/lib/src/Builders/AuthorizationBuilder.js.map +1 -1
- package/lib/src/Builders/RecurringBuilder.js +12 -1
- package/lib/src/Builders/RecurringBuilder.js.map +1 -1
- package/lib/src/Terminals/Builders/TerminalAuthBuilder.d.ts +15 -4
- package/lib/src/Terminals/Builders/TerminalAuthBuilder.js +33 -4
- package/lib/src/Terminals/Builders/TerminalAuthBuilder.js.map +1 -1
- package/lib/src/Terminals/Builders/TerminalManageBuilder.js +2 -0
- package/lib/src/Terminals/Builders/TerminalManageBuilder.js.map +1 -1
- package/lib/src/Terminals/UPA/Reponses/TransactionResponse.d.ts +4 -0
- package/lib/src/Terminals/UPA/Reponses/TransactionResponse.js +24 -0
- package/lib/src/Terminals/UPA/Reponses/TransactionResponse.js.map +1 -1
- package/lib/src/Terminals/UPA/UpaController.js +108 -16
- package/lib/src/Terminals/UPA/UpaController.js.map +1 -1
- package/lib/test/Integration/Gateways/GpApiConnector/GpApiMMAAccount.test.d.ts +1 -0
- package/lib/test/Integration/Gateways/GpApiConnector/GpApiMMAAccount.test.js +149 -0
- package/lib/test/Integration/Gateways/GpApiConnector/GpApiMMAAccount.test.js.map +1 -0
- package/lib/test/Unit/Gateways/GpApiConnector/GpApiMMAAccount.test.d.ts +1 -0
- package/lib/test/Unit/Gateways/GpApiConnector/GpApiMMAAccount.test.js +29 -0
- package/lib/test/Unit/Gateways/GpApiConnector/GpApiMMAAccount.test.js.map +1 -0
- package/lib/test/Unit/Terminals/Builders/TerminalBuilderParityTests.test.d.ts +17 -0
- package/lib/test/Unit/Terminals/Builders/TerminalBuilderParityTests.test.js +325 -0
- package/lib/test/Unit/Terminals/Builders/TerminalBuilderParityTests.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/UpaAdmin.test.js +46 -91
- package/lib/test/Unit/Terminals/UPA/UpaAdmin.test.js.map +1 -1
- package/lib/test/Unit/Terminals/UPA/UpaCredit.test.js +201 -27
- package/lib/test/Unit/Terminals/UPA/UpaCredit.test.js.map +1 -1
- 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(
|
|
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
|
|
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
|