globalpayments-api 3.11.1 → 3.11.2
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 +6 -1
- package/lib/src/Entities/UPA/ScanData.d.ts +17 -0
- package/lib/src/Entities/UPA/ScanData.js +22 -0
- package/lib/src/Entities/UPA/ScanData.js.map +1 -0
- package/lib/src/Entities/UPA/index.d.ts +1 -0
- package/lib/src/Entities/UPA/index.js +1 -0
- package/lib/src/Entities/UPA/index.js.map +1 -1
- package/lib/src/Terminals/Abstractions/IDeviceInterface.d.ts +2 -1
- package/lib/src/Terminals/Abstractions/IDeviceResponse.d.ts +1 -0
- package/lib/src/Terminals/Builders/TerminalManageBuilder.js +2 -0
- package/lib/src/Terminals/Builders/TerminalManageBuilder.js.map +1 -1
- package/lib/src/Terminals/DeviceInterface.d.ts +1 -0
- package/lib/src/Terminals/DeviceInterface.js +4 -0
- package/lib/src/Terminals/DeviceInterface.js.map +1 -1
- package/lib/src/Terminals/UPA/Entities/UpaMessageId.d.ts +2 -1
- package/lib/src/Terminals/UPA/Entities/UpaMessageId.js +1 -0
- package/lib/src/Terminals/UPA/Entities/UpaMessageId.js.map +1 -1
- package/lib/src/Terminals/UPA/Reponses/TransactionResponse.d.ts +1 -0
- package/lib/src/Terminals/UPA/Reponses/TransactionResponse.js +3 -0
- package/lib/src/Terminals/UPA/Reponses/TransactionResponse.js.map +1 -1
- package/lib/src/Terminals/UPA/UpaController.js +35 -0
- package/lib/src/Terminals/UPA/UpaController.js.map +1 -1
- package/lib/src/Terminals/UPA/UpaInterface.d.ts +2 -0
- package/lib/src/Terminals/UPA/UpaInterface.js +39 -0
- package/lib/src/Terminals/UPA/UpaInterface.js.map +1 -1
- package/lib/test/Unit/Terminals/UPA/Reponses/BatchList.test.d.ts +1 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/BatchList.test.js +64 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/BatchList.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/BatchReportResponse.test.d.ts +1 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/BatchReportResponse.test.js +145 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/BatchReportResponse.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/OpenTabDetailsResponse.test.d.ts +1 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/OpenTabDetailsResponse.test.js +70 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/OpenTabDetailsResponse.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/SafReportResponse.test.d.ts +1 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/SafReportResponse.test.js +112 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/SafReportResponse.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/UpaEODResponse.test.d.ts +1 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/UpaEODResponse.test.js +108 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/UpaEODResponse.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/UpaSAFResponse.test.d.ts +1 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/UpaSAFResponse.test.js +95 -0
- package/lib/test/Unit/Terminals/UPA/Reponses/UpaSAFResponse.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/UpaScan.test.d.ts +1 -0
- package/lib/test/Unit/Terminals/UPA/UpaScan.test.js +146 -0
- package/lib/test/Unit/Terminals/UPA/UpaScan.test.js.map +1 -0
- package/lib/test/Unit/Terminals/UPA/UpaVoid.test.d.ts +1 -0
- package/lib/test/Unit/Terminals/UPA/UpaVoid.test.js +225 -0
- package/lib/test/Unit/Terminals/UPA/UpaVoid.test.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* Live-device unit tests for UpaSAFResponse (ISAFResponse contract).
|
|
5
|
+
*
|
|
6
|
+
* Exercises sendStoreAndForward() and deleteSaf() over live MITC and
|
|
7
|
+
* asserts every mapped field on UpaSAFResponse plus every optional
|
|
8
|
+
* bucket declared by ISAFResponse per UPA §12.4.14 / §12.4.15.
|
|
9
|
+
*
|
|
10
|
+
* No mocks — this test only runs against a real device+gateway.
|
|
11
|
+
*/
|
|
12
|
+
const src_1 = require("../../../../../src");
|
|
13
|
+
const UpaSAFResponse_1 = require("../../../../../src/Terminals/UPA/Reponses/UpaSAFResponse");
|
|
14
|
+
const UpaHelpertest_1 = require("../UpaHelpertest");
|
|
15
|
+
jest.setTimeout(240000);
|
|
16
|
+
function sleep(delayMs) {
|
|
17
|
+
return new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
18
|
+
}
|
|
19
|
+
async function settleDevice(delayMs = 8000) {
|
|
20
|
+
if (UpaHelpertest_1.useLiveMic) {
|
|
21
|
+
await sleep(delayMs);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
afterEach(async () => {
|
|
25
|
+
await settleDevice();
|
|
26
|
+
});
|
|
27
|
+
(0, UpaHelpertest_1.describeUpaLive)("UPA Response – UpaSAFResponse (all fields, live MITC)", () => {
|
|
28
|
+
let device;
|
|
29
|
+
beforeEach(() => {
|
|
30
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
31
|
+
});
|
|
32
|
+
test("sendStoreAndForward() populates every IDeviceResponse + ISAFResponse field", async () => {
|
|
33
|
+
const response = (await device.sendStoreAndForward());
|
|
34
|
+
expect(response).toBeInstanceOf(UpaSAFResponse_1.UpaSAFResponse);
|
|
35
|
+
expect(response.command).toBe("SendSAF");
|
|
36
|
+
expect(typeof response.status).toBe("string");
|
|
37
|
+
expect(response.status.length).toBeGreaterThan(0);
|
|
38
|
+
expect(typeof response.deviceResponseCode).toBe("string");
|
|
39
|
+
expect(typeof response.deviceResponseText).toBe("string");
|
|
40
|
+
expect(typeof response.referenceNumber).toBe("string");
|
|
41
|
+
expect(typeof response.version).toBe("string");
|
|
42
|
+
// ISAFResponse-only optional fields — must at least be typed
|
|
43
|
+
expect(response.totalCount === undefined ||
|
|
44
|
+
typeof response.totalCount === "number").toBe(true);
|
|
45
|
+
expect(response.totalAmount === undefined ||
|
|
46
|
+
typeof response.totalAmount === "number").toBe(true);
|
|
47
|
+
expect(response.multipleMessage === undefined ||
|
|
48
|
+
typeof response.multipleMessage === "string").toBe(true);
|
|
49
|
+
});
|
|
50
|
+
test("sendStoreAndForward() populates approved/pending/declined buckets when SAF data exists", async () => {
|
|
51
|
+
const response = (await device.sendStoreAndForward());
|
|
52
|
+
if (response.status !== "Success") {
|
|
53
|
+
console.warn(`sendStoreAndForward() returned ${response.deviceResponseCode} (${response.deviceResponseMessage}). Bucket assertions skipped — device has no SAF records.`);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
expect(response.deviceResponseCode).toBe("00");
|
|
57
|
+
expect(response.totalCount).toBeDefined();
|
|
58
|
+
expect(response.totalAmount).toBeDefined();
|
|
59
|
+
expect(response.totalCount).toBeGreaterThanOrEqual(0);
|
|
60
|
+
expect(response.totalAmount).toBeGreaterThanOrEqual(0);
|
|
61
|
+
// Bucket dictionaries are optional; when populated their entries must
|
|
62
|
+
// conform to the UpaSafSummaryResponse shape.
|
|
63
|
+
const allBuckets = [response.approved, response.pending, response.declined];
|
|
64
|
+
const populated = allBuckets.filter((b) => b !== undefined);
|
|
65
|
+
if (populated.length === 0) {
|
|
66
|
+
console.warn("sendStoreAndForward() success returned no bucket dictionaries; device reported totals only.");
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
for (const bucket of populated) {
|
|
70
|
+
for (const summary of Object.values(bucket)) {
|
|
71
|
+
expect(summary).toBeDefined();
|
|
72
|
+
expect(typeof summary.summaryType).toBe("number");
|
|
73
|
+
expect([
|
|
74
|
+
src_1.SummaryType.Approved,
|
|
75
|
+
src_1.SummaryType.Pending,
|
|
76
|
+
src_1.SummaryType.Declined,
|
|
77
|
+
].includes(summary.summaryType)).toBe(true);
|
|
78
|
+
expect(Array.isArray(summary.transactions)).toBe(true);
|
|
79
|
+
expect(typeof summary.count === "number").toBe(true);
|
|
80
|
+
expect(typeof summary.totalAmount === "number").toBe(true);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
test("deleteSaf() returns a fully populated UpaSAFResponse (command = DeleteSAF)", async () => {
|
|
85
|
+
const response = (await device.deleteSaf("NON-EXISTENT-REF", "NON-EXISTENT-TRAN"));
|
|
86
|
+
expect(response).toBeInstanceOf(UpaSAFResponse_1.UpaSAFResponse);
|
|
87
|
+
// requestType tag ensures extractCommand surfaces "DeleteSAF" even when
|
|
88
|
+
// the device echoes back a generic "SendCommand".
|
|
89
|
+
expect(["DeleteSAF", "SendCommand"]).toContain(response.command);
|
|
90
|
+
expect(typeof response.status).toBe("string");
|
|
91
|
+
expect(typeof response.deviceResponseCode).toBe("string");
|
|
92
|
+
expect(typeof response.deviceResponseText).toBe("string");
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=UpaSAFResponse.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpaSAFResponse.test.js","sourceRoot":"","sources":["../../../../../../test/Unit/Terminals/UPA/Reponses/UpaSAFResponse.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* Live unit tests for the UPA Scan command (spec §12.3.17).
|
|
5
|
+
*
|
|
6
|
+
* every test exercises the real UPA device over Meet-in-the-Cloud (MITC) with
|
|
7
|
+
*
|
|
8
|
+
* These tests require an operator to physically scan a QR code within the
|
|
9
|
+
* configured `timeOut` window. Absent a scan, the device returns
|
|
10
|
+
* APP002 TIMEOUT and the "00 / Success" assertions will fail — the same
|
|
11
|
+
*/
|
|
12
|
+
const src_1 = require("../../../../src");
|
|
13
|
+
const UpaHelpertest_1 = require("./UpaHelpertest");
|
|
14
|
+
jest.setTimeout(240000);
|
|
15
|
+
function sleep(delayMs) {
|
|
16
|
+
return new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
17
|
+
}
|
|
18
|
+
async function settleDevice(delayMs = 8000) {
|
|
19
|
+
if (UpaHelpertest_1.useLiveMic) {
|
|
20
|
+
await sleep(delayMs);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
afterEach(async () => {
|
|
24
|
+
await settleDevice();
|
|
25
|
+
});
|
|
26
|
+
// ===========================================================================
|
|
27
|
+
// scan() – request parameter parity over live MITC (spec §12.3.17.1 / .2)
|
|
28
|
+
// ===========================================================================
|
|
29
|
+
(0, UpaHelpertest_1.describeUpaLive)("UPA Scan – request payload (live MITC)", () => {
|
|
30
|
+
let device;
|
|
31
|
+
beforeEach(() => {
|
|
32
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
33
|
+
});
|
|
34
|
+
test("[UpaAdminTests:Scan] scan(ScanData) with header / prompt1 / displayOption / timeOut", async () => {
|
|
35
|
+
const scanData = new src_1.ScanData();
|
|
36
|
+
scanData.header = "scan";
|
|
37
|
+
scanData.prompt1 = "scan qr code";
|
|
38
|
+
scanData.displayOption = 0; // DisplayOption.NoScreenChange
|
|
39
|
+
scanData.timeOut = 26;
|
|
40
|
+
device.ecrId = "13";
|
|
41
|
+
const response = (await device.scan(scanData));
|
|
42
|
+
expect(response).not.toBeNull();
|
|
43
|
+
expect(response).toBeInstanceOf(src_1.TransactionResponse);
|
|
44
|
+
expect(response.command).toBe("Scan");
|
|
45
|
+
expect(response.status).toBe("Success");
|
|
46
|
+
expect(response.deviceResponseCode).toBe("00");
|
|
47
|
+
});
|
|
48
|
+
test("[UpaAdminTests:Scan] scan(ScanData) with all optional fields including prompt2 (spec §12.3.17.2)", async () => {
|
|
49
|
+
const scanData = new src_1.ScanData();
|
|
50
|
+
scanData.header = "Scan";
|
|
51
|
+
scanData.prompt1 = "Scan QR Code";
|
|
52
|
+
scanData.prompt2 = "Align the QR code within the frame to scan";
|
|
53
|
+
scanData.displayOption = 1; // DisplayOption.ReturnToIdleScreen
|
|
54
|
+
scanData.timeOut = 45;
|
|
55
|
+
device.ecrId = "13";
|
|
56
|
+
const response = (await device.scan(scanData));
|
|
57
|
+
expect(response).not.toBeNull();
|
|
58
|
+
expect(response).toBeInstanceOf(src_1.TransactionResponse);
|
|
59
|
+
expect(response.command).toBe("Scan");
|
|
60
|
+
expect(response.status).toBe("Success");
|
|
61
|
+
expect(response.deviceResponseCode).toBe("00");
|
|
62
|
+
});
|
|
63
|
+
test("[UpaAdminTests:ScanWithoutParams] scan() with no arguments", async () => {
|
|
64
|
+
device.ecrId = "13";
|
|
65
|
+
const response = (await device.scan());
|
|
66
|
+
expect(response).not.toBeNull();
|
|
67
|
+
expect(response).toBeInstanceOf(src_1.TransactionResponse);
|
|
68
|
+
expect(response.command).toBe("Scan");
|
|
69
|
+
expect(response.status).toBe("Success");
|
|
70
|
+
expect(response.deviceResponseCode).toBe("00");
|
|
71
|
+
});
|
|
72
|
+
test("[UpaAdminTests:ScanWithoutParams] scan(ScanData{}) with an empty ScanData", async () => {
|
|
73
|
+
device.ecrId = "13";
|
|
74
|
+
const response = (await device.scan(new src_1.ScanData()));
|
|
75
|
+
expect(response).not.toBeNull();
|
|
76
|
+
expect(response).toBeInstanceOf(src_1.TransactionResponse);
|
|
77
|
+
expect(response.command).toBe("Scan");
|
|
78
|
+
expect(response.status).toBe("Success");
|
|
79
|
+
expect(response.deviceResponseCode).toBe("00");
|
|
80
|
+
});
|
|
81
|
+
test("[UpaScan] scan() honors timeOut boundary (999 = max per spec §12.3.17.1)", async () => {
|
|
82
|
+
const scanData = new src_1.ScanData();
|
|
83
|
+
scanData.header = "scan";
|
|
84
|
+
scanData.prompt1 = "scan qr code";
|
|
85
|
+
scanData.timeOut = 999;
|
|
86
|
+
device.ecrId = "13";
|
|
87
|
+
const response = (await device.scan(scanData));
|
|
88
|
+
expect(response).not.toBeNull();
|
|
89
|
+
expect(response).toBeInstanceOf(src_1.TransactionResponse);
|
|
90
|
+
expect(response.command).toBe("Scan");
|
|
91
|
+
expect(response.status).toBe("Success");
|
|
92
|
+
expect(response.deviceResponseCode).toBe("00");
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
// ===========================================================================
|
|
96
|
+
// scan() – response hydration over live MITC (spec §12.3.17.5 / §12.3.17.6)
|
|
97
|
+
// ===========================================================================
|
|
98
|
+
(0, UpaHelpertest_1.describeUpaLive)("UPA Scan – response parsing (live MITC)", () => {
|
|
99
|
+
let device;
|
|
100
|
+
beforeEach(() => {
|
|
101
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
102
|
+
});
|
|
103
|
+
test("[UpaScan] scan() surfaces scanData on TransactionResponse for successful scans", async () => {
|
|
104
|
+
const scanData = new src_1.ScanData();
|
|
105
|
+
scanData.header = "scan";
|
|
106
|
+
scanData.prompt1 = "scan qr code";
|
|
107
|
+
scanData.displayOption = 0; // DisplayOption.NoScreenChange
|
|
108
|
+
scanData.timeOut = 26;
|
|
109
|
+
device.ecrId = "13";
|
|
110
|
+
const response = (await device.scan(scanData));
|
|
111
|
+
expect(response).toBeInstanceOf(src_1.TransactionResponse);
|
|
112
|
+
expect(response.command).toBe("Scan");
|
|
113
|
+
expect(response.status).toBe("Success");
|
|
114
|
+
expect(response.deviceResponseCode).toBe("00");
|
|
115
|
+
expect(typeof response.scanData).toBe("string");
|
|
116
|
+
expect(response.scanData.length).toBeGreaterThan(0);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
(0, UpaHelpertest_1.describeUpaLive)("UPA Scan – live MITC", () => {
|
|
120
|
+
let device;
|
|
121
|
+
beforeEach(() => {
|
|
122
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
123
|
+
});
|
|
124
|
+
test("[UpaAdminTests:Scan] Scan() with populated ScanData", async () => {
|
|
125
|
+
const scanData = new src_1.ScanData();
|
|
126
|
+
scanData.header = "scan";
|
|
127
|
+
scanData.prompt1 = "scan qr code";
|
|
128
|
+
scanData.displayOption = 0; // DisplayOption.NoScreenChange
|
|
129
|
+
scanData.timeOut = 26;
|
|
130
|
+
device.ecrId = "13";
|
|
131
|
+
const response = (await device.scan(scanData));
|
|
132
|
+
expect(response).not.toBeNull();
|
|
133
|
+
expect(response).toBeInstanceOf(src_1.TransactionResponse);
|
|
134
|
+
expect(response.deviceResponseCode).toBe("00");
|
|
135
|
+
expect(response.status).toBe("Success");
|
|
136
|
+
});
|
|
137
|
+
test("[UpaAdminTests:ScanWithoutParams] Scan() with no parameters", async () => {
|
|
138
|
+
device.ecrId = "13";
|
|
139
|
+
const response = (await device.scan());
|
|
140
|
+
expect(response).not.toBeNull();
|
|
141
|
+
expect(response).toBeInstanceOf(src_1.TransactionResponse);
|
|
142
|
+
expect(response.deviceResponseCode).toBe("00");
|
|
143
|
+
expect(response.status).toBe("Success");
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
//# sourceMappingURL=UpaScan.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpaScan.test.js","sourceRoot":"","sources":["../../../../../test/Unit/Terminals/UPA/UpaScan.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* Unit tests for UPA Credit payment methods:
|
|
5
|
+
* sale() with processing indicators, sale() with auth-time lodging,
|
|
6
|
+
* updateLodginDetail(), void()
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
const src_1 = require("../../../../src");
|
|
10
|
+
const DeviceService_1 = require("../../../../src/Services/DeviceService");
|
|
11
|
+
const UpaHelpertest_1 = require("./UpaHelpertest");
|
|
12
|
+
jest.setTimeout(240000);
|
|
13
|
+
function sleep(delayMs) {
|
|
14
|
+
return new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
15
|
+
}
|
|
16
|
+
async function settleDevice(delayMs = 8000) {
|
|
17
|
+
if (UpaHelpertest_1.useLiveMic) {
|
|
18
|
+
await sleep(delayMs);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
afterEach(async () => {
|
|
22
|
+
await settleDevice();
|
|
23
|
+
});
|
|
24
|
+
// ===========================================================================
|
|
25
|
+
// sale() – processing indicators serialization
|
|
26
|
+
// ===========================================================================
|
|
27
|
+
(0, UpaHelpertest_1.describeUpaLive)("UPA Credit – sale() processing indicators", () => {
|
|
28
|
+
let device;
|
|
29
|
+
beforeEach(() => {
|
|
30
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
31
|
+
});
|
|
32
|
+
test("[UpaCreditTests] sale() serializes processing indicators without mocked responses", async () => {
|
|
33
|
+
const saleResponse = await (0, UpaHelpertest_1.createLiveSale)(device);
|
|
34
|
+
expect(saleResponse.status).toBe("Success");
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
// ===========================================================================
|
|
38
|
+
// sale() with auth-time lodging
|
|
39
|
+
// ===========================================================================
|
|
40
|
+
(0, UpaHelpertest_1.describeUpaLive)("UPA Credit – sale() with lodging", () => {
|
|
41
|
+
let device;
|
|
42
|
+
beforeEach(() => {
|
|
43
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
44
|
+
});
|
|
45
|
+
test("[UpaCreditTests:173] sale() serializes auth-time lodging without mocked responses", async () => {
|
|
46
|
+
const controller = src_1.ServicesContainer.instance().getDeviceController();
|
|
47
|
+
const lodging = new src_1.Lodging();
|
|
48
|
+
lodging.folioNumber = "FOLIO-123";
|
|
49
|
+
lodging.extraChargeTypes = [
|
|
50
|
+
src_1.ExtraChargeType.Restaurant,
|
|
51
|
+
src_1.ExtraChargeType.MiniBar,
|
|
52
|
+
];
|
|
53
|
+
lodging.extraChargeTotal = 12.5;
|
|
54
|
+
lodging.dailyRate = 89.99;
|
|
55
|
+
const builder = await device
|
|
56
|
+
.sale(10)
|
|
57
|
+
.withEcrId(13)
|
|
58
|
+
.withLodging(lodging);
|
|
59
|
+
const request = controller
|
|
60
|
+
.buildProcessTransaction(builder)
|
|
61
|
+
.getJsonRequest();
|
|
62
|
+
expect(request.data.command).toBe("Sale");
|
|
63
|
+
expect(request.data.data.lodging).toMatchObject({
|
|
64
|
+
folioNumber: "FOLIO-123",
|
|
65
|
+
dailyRate: "89.99",
|
|
66
|
+
extraChargeTotal: "12.50",
|
|
67
|
+
extraChargeTypes: [1, 0, 1, 0, 0, 0, 0, 0, 0, 0],
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
// ===========================================================================
|
|
72
|
+
// void() — UPA spec §12.4.2
|
|
73
|
+
// Void cancels a transaction in the host batch.
|
|
74
|
+
// Per §12.4.2.1: transaction node must carry ONE of
|
|
75
|
+
// `tranNo` → builder.terminalRefNumber
|
|
76
|
+
// `referenceNumber` → builder.transactionId
|
|
77
|
+
// Both together → VOID004. Neither → VOID003.
|
|
78
|
+
// Optional `clerkId` in params.
|
|
79
|
+
// ===========================================================================
|
|
80
|
+
(0, UpaHelpertest_1.describeUpaLive)("UPA Credit – void() request shape", () => {
|
|
81
|
+
let device;
|
|
82
|
+
beforeEach(() => {
|
|
83
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
84
|
+
});
|
|
85
|
+
test("[UpaCreditTests] void() with tranNo (terminalRefNumber) serializes matching spec §12.4.2.2", () => {
|
|
86
|
+
const controller = src_1.ServicesContainer.instance().getDeviceController();
|
|
87
|
+
const builder = device
|
|
88
|
+
.void()
|
|
89
|
+
.withTerminalRefNumber("0002")
|
|
90
|
+
.withEcrId(13);
|
|
91
|
+
const request = controller.buildManageTransaction(builder).getJsonRequest();
|
|
92
|
+
expect(request.data.command).toBe("Void");
|
|
93
|
+
expect(request.data.EcrId).toBe("13");
|
|
94
|
+
expect(request.data.data.transaction).toEqual({ tranNo: "0002" });
|
|
95
|
+
// Spec-forbidden fields for Void must not be present:
|
|
96
|
+
expect(request.data.data.transaction.referenceNumber).toBeUndefined();
|
|
97
|
+
expect(request.data.data.transaction.baseAmount).toBeUndefined();
|
|
98
|
+
expect(request.data.data.transaction.amount).toBeUndefined();
|
|
99
|
+
expect(request.data.data.transaction.tipAmount).toBeUndefined();
|
|
100
|
+
expect(request.data.data.transaction.taxAmount).toBeUndefined();
|
|
101
|
+
expect(request.data.data.transaction.taxIndicator).toBeUndefined();
|
|
102
|
+
expect(request.data.data.transaction.invoiceNbr).toBeUndefined();
|
|
103
|
+
expect(request.data.data.transaction.processCPC).toBeUndefined();
|
|
104
|
+
});
|
|
105
|
+
test("[UpaCreditTests] void() with referenceNumber (transactionId) serializes matching spec §12.4.2.2", () => {
|
|
106
|
+
const controller = src_1.ServicesContainer.instance().getDeviceController();
|
|
107
|
+
const builder = device
|
|
108
|
+
.void()
|
|
109
|
+
.withTransactionId("1282447530")
|
|
110
|
+
.withEcrId(13);
|
|
111
|
+
const request = controller.buildManageTransaction(builder).getJsonRequest();
|
|
112
|
+
expect(request.data.command).toBe("Void");
|
|
113
|
+
expect(request.data.data.transaction).toEqual({
|
|
114
|
+
referenceNumber: "1282447530",
|
|
115
|
+
});
|
|
116
|
+
expect(request.data.data.transaction.tranNo).toBeUndefined();
|
|
117
|
+
});
|
|
118
|
+
test("[UpaCreditTests] void() with clerkId serializes params.clerkId per spec §12.4.2.2", () => {
|
|
119
|
+
const controller = src_1.ServicesContainer.instance().getDeviceController();
|
|
120
|
+
const builder = device
|
|
121
|
+
.void()
|
|
122
|
+
.withTerminalRefNumber("0002")
|
|
123
|
+
.withClerkId(1234)
|
|
124
|
+
.withEcrId(13);
|
|
125
|
+
const request = controller.buildManageTransaction(builder).getJsonRequest();
|
|
126
|
+
expect(request.data.data.params).toEqual({ clerkId: 1234 });
|
|
127
|
+
expect(request.data.data.transaction).toEqual({ tranNo: "0002" });
|
|
128
|
+
});
|
|
129
|
+
test("[SdkValidation] void() with both tranNo and referenceNumber throws VOID004 hint", () => {
|
|
130
|
+
const controller = src_1.ServicesContainer.instance().getDeviceController();
|
|
131
|
+
const builder = device
|
|
132
|
+
.void()
|
|
133
|
+
.withTerminalRefNumber("0002")
|
|
134
|
+
.withTransactionId("1282447530")
|
|
135
|
+
.withEcrId(13);
|
|
136
|
+
expect(() => controller.buildManageTransaction(builder)).toThrow(/VOID004/);
|
|
137
|
+
expect(() => controller.buildManageTransaction(builder)).toThrow(src_1.UnsupportedTransactionError);
|
|
138
|
+
});
|
|
139
|
+
test("[SdkValidation] void() with neither tranNo nor referenceNumber throws VOID003 hint", () => {
|
|
140
|
+
const controller = src_1.ServicesContainer.instance().getDeviceController();
|
|
141
|
+
const builder = device.void().withEcrId(13);
|
|
142
|
+
expect(() => controller.buildManageTransaction(builder)).toThrow(/VOID003/);
|
|
143
|
+
expect(() => controller.buildManageTransaction(builder)).toThrow(src_1.UnsupportedTransactionError);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
// ===========================================================================
|
|
147
|
+
// void() live MITC flow
|
|
148
|
+
// Sale → Void by terminalRefNumber → expect Success
|
|
149
|
+
// ===========================================================================
|
|
150
|
+
(0, UpaHelpertest_1.describeUpaLive)("UPA Credit – void() live MITC", () => {
|
|
151
|
+
let device;
|
|
152
|
+
beforeEach(() => {
|
|
153
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
154
|
+
});
|
|
155
|
+
test("[UpaCreditTests] void() by tranNo cancels a prior sale over live MITC", async () => {
|
|
156
|
+
const saleResponse = await (0, UpaHelpertest_1.createLiveSale)(device);
|
|
157
|
+
if (saleResponse.deviceResponseCode !== "00") {
|
|
158
|
+
console.warn((0, UpaHelpertest_1.formatLiveFailure)(saleResponse, "Sale (Void prereq)"));
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const response = await device
|
|
162
|
+
.void()
|
|
163
|
+
.withTerminalRefNumber(saleResponse.terminalRefNumber)
|
|
164
|
+
.withEcrId(13)
|
|
165
|
+
.execute();
|
|
166
|
+
expect(response).not.toBeNull();
|
|
167
|
+
expect(response).toBeInstanceOf(src_1.TransactionResponse);
|
|
168
|
+
if ((0, UpaHelpertest_1.isKnownLiveBusyBlocker)(response)) {
|
|
169
|
+
console.warn((0, UpaHelpertest_1.formatLiveFailure)(response, "Void"));
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
(0, UpaHelpertest_1.expectLiveSuccess)(response, ["Void", "SendCommand"]);
|
|
173
|
+
if (response.transactionType) {
|
|
174
|
+
expect(response.transactionType.toUpperCase()).toContain("VOID");
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
test("[LiveNegative] void() with unknown tranNo surfaces REF001 or VOID001", async () => {
|
|
178
|
+
if (!UpaHelpertest_1.useLiveMic) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const response = await device
|
|
182
|
+
.void()
|
|
183
|
+
.withTerminalRefNumber("9999")
|
|
184
|
+
.withEcrId(13)
|
|
185
|
+
.execute();
|
|
186
|
+
expect(response).toBeInstanceOf(src_1.TransactionResponse);
|
|
187
|
+
if ((0, UpaHelpertest_1.isKnownLiveBusyBlocker)(response)) {
|
|
188
|
+
console.warn((0, UpaHelpertest_1.formatLiveFailure)(response, "Void unknown tranNo"));
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
// Spec §12.4.2.4 error codes for an unknown/uncancellable reference.
|
|
192
|
+
if (response.status === "Failed") {
|
|
193
|
+
expect(["REF001", "VOID001", "TRAN001"]).toContain(response.deviceResponseCode);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
console.warn(`Void with unknown tranNo unexpectedly succeeded on the current terminal (code=${response.deviceResponseCode}). Expected REF001 or VOID001.`);
|
|
197
|
+
});
|
|
198
|
+
test("[LiveNegative] void() with invalid target device surfaces device error", async () => {
|
|
199
|
+
if (!UpaHelpertest_1.useLiveMic) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const unavailableDevice = DeviceService_1.DeviceService.create((0, UpaHelpertest_1.buildConfig)());
|
|
203
|
+
unavailableDevice.ecrId = "99999999";
|
|
204
|
+
try {
|
|
205
|
+
const response = await unavailableDevice
|
|
206
|
+
.void()
|
|
207
|
+
.withEcrId(99999999)
|
|
208
|
+
.withTerminalRefNumber("0001")
|
|
209
|
+
.execute();
|
|
210
|
+
expect(response).toBeInstanceOf(src_1.TransactionResponse);
|
|
211
|
+
// Any Failed status with a non-"00" code satisfies the negative path.
|
|
212
|
+
if (response.status === "Failed") {
|
|
213
|
+
expect(response.deviceResponseCode).not.toBe("00");
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
// Gateway routing failures for an inactive terminal surface as thrown
|
|
219
|
+
// GatewayError — that's an equally valid outcome for the negative path.
|
|
220
|
+
expect(error).toBeInstanceOf(Error);
|
|
221
|
+
expect(error.message).toBeTruthy();
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
//# sourceMappingURL=UpaVoid.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpaVoid.test.js","sourceRoot":"","sources":["../../../../../test/Unit/Terminals/UPA/UpaVoid.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "globalpayments-api",
|
|
3
|
-
"version": "3.11.
|
|
3
|
+
"version": "3.11.02",
|
|
4
4
|
"description": "Global Payments SDK for NodeJS for Global Payments eCommerce gateways",
|
|
5
5
|
"author": "Global Payments",
|
|
6
6
|
"license": "GPL-2.0",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"scripts": {
|
|
17
17
|
"build": "tsc",
|
|
18
18
|
"test:jest": "jest",
|
|
19
|
-
"test:serial": "jest --runInBand --testPathPattern=test/Unit/Terminals/UPA/
|
|
19
|
+
"test:serial": "jest --runInBand --testPathPattern=test/Unit/Terminals/UPA/UpaVoid.test.ts$ --",
|
|
20
20
|
"build:netsuite": "webpack --env.GP_NETSUITE_BUILD --config config/webpack.netsuite.js && node bin/netsuite-post.js",
|
|
21
21
|
"build:clean": "rimraf lib",
|
|
22
22
|
"docs": "typedoc --mode file --name \"GlobalPayments.Api\" --project tsconfig.json --out docs src",
|