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,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const BatchList_1 = require("../../../../../src/Terminals/UPA/Reponses/BatchList");
|
|
4
|
+
const UpaHelpertest_1 = require("../UpaHelpertest");
|
|
5
|
+
jest.setTimeout(240000);
|
|
6
|
+
function sleep(delayMs) {
|
|
7
|
+
return new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
8
|
+
}
|
|
9
|
+
async function settleDevice(delayMs = 8000) {
|
|
10
|
+
if (UpaHelpertest_1.useLiveMic) {
|
|
11
|
+
await sleep(delayMs);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
afterEach(async () => {
|
|
15
|
+
await settleDevice();
|
|
16
|
+
});
|
|
17
|
+
(0, UpaHelpertest_1.describeUpaLive)("UPA Response – BatchList (all fields, live MITC)", () => {
|
|
18
|
+
let device;
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
21
|
+
});
|
|
22
|
+
test.only("findBatches() populates every IDeviceResponse + top-level field", async () => {
|
|
23
|
+
let response = await (0, UpaHelpertest_1.findLiveBatches)(device);
|
|
24
|
+
if (response.batches.length === 0) {
|
|
25
|
+
const sale = await (0, UpaHelpertest_1.createLiveSale)(device);
|
|
26
|
+
(0, UpaHelpertest_1.expectLiveSuccess)(sale, "Sale");
|
|
27
|
+
await settleDevice(5000);
|
|
28
|
+
response = await (0, UpaHelpertest_1.findLiveBatches)(device);
|
|
29
|
+
}
|
|
30
|
+
expect(response).toBeInstanceOf(BatchList_1.BatchList);
|
|
31
|
+
expect(response.command).toBe("AvailableBatches");
|
|
32
|
+
expect(typeof response.status).toBe("string");
|
|
33
|
+
expect(typeof response.deviceResponseCode).toBe("string");
|
|
34
|
+
expect(typeof response.deviceResponseText).toBe("string");
|
|
35
|
+
expect(typeof response.referenceNumber).toBe("string");
|
|
36
|
+
expect(typeof response.version).toBe("string");
|
|
37
|
+
expect(typeof response.ecrId).toBe("string");
|
|
38
|
+
expect(typeof response.deviceSerialNumber).toBe("string");
|
|
39
|
+
expect(Array.isArray(response.batches)).toBe(true);
|
|
40
|
+
});
|
|
41
|
+
test("findBatches() batches are numeric and returned DESC per §12.4.12.5", async () => {
|
|
42
|
+
let response = await (0, UpaHelpertest_1.findLiveBatches)(device);
|
|
43
|
+
if (response.batches.length === 0) {
|
|
44
|
+
const sale = await (0, UpaHelpertest_1.createLiveSale)(device);
|
|
45
|
+
(0, UpaHelpertest_1.expectLiveSuccess)(sale, "Sale");
|
|
46
|
+
await settleDevice(5000);
|
|
47
|
+
response = await (0, UpaHelpertest_1.findLiveBatches)(device);
|
|
48
|
+
}
|
|
49
|
+
if (response.status !== "Success") {
|
|
50
|
+
expect(["BATCH002", "APP011"]).toContain(response.deviceResponseCode);
|
|
51
|
+
console.warn(`findBatches() returned ${response.deviceResponseCode}; DESC assertions skipped.`);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
for (const batchId of response.batches) {
|
|
55
|
+
expect(typeof batchId).toBe("number");
|
|
56
|
+
expect(Number.isFinite(batchId)).toBe(true);
|
|
57
|
+
}
|
|
58
|
+
if (response.batches.length >= 2) {
|
|
59
|
+
const sortedDesc = [...response.batches].sort((a, b) => b - a);
|
|
60
|
+
expect(response.batches).toEqual(sortedDesc);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=BatchList.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BatchList.test.js","sourceRoot":"","sources":["../../../../../../test/Unit/Terminals/UPA/Reponses/BatchList.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const BatchReportResponse_1 = require("../../../../../src/Terminals/UPA/Reponses/BatchReportResponse");
|
|
4
|
+
const UpaSearchCriteria_1 = require("../../../../../src/Terminals/UPA/Entities/UpaSearchCriteria");
|
|
5
|
+
const UpaHelpertest_1 = require("../UpaHelpertest");
|
|
6
|
+
jest.setTimeout(240000);
|
|
7
|
+
function sleep(delayMs) {
|
|
8
|
+
return new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
9
|
+
}
|
|
10
|
+
async function settleDevice(delayMs = 8000) {
|
|
11
|
+
if (UpaHelpertest_1.useLiveMic) {
|
|
12
|
+
await sleep(delayMs);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
afterEach(async () => {
|
|
16
|
+
await settleDevice();
|
|
17
|
+
});
|
|
18
|
+
(0, UpaHelpertest_1.describeUpaLive)("UPA Response – BatchReportResponse (all fields, live MITC)", () => {
|
|
19
|
+
let device;
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
22
|
+
});
|
|
23
|
+
async function acquireBatchId() {
|
|
24
|
+
let batches = await (0, UpaHelpertest_1.findLiveBatches)(device);
|
|
25
|
+
if (batches.batches.length === 0) {
|
|
26
|
+
const sale = await (0, UpaHelpertest_1.createLiveSale)(device);
|
|
27
|
+
(0, UpaHelpertest_1.expectLiveSuccess)(sale, "Sale");
|
|
28
|
+
await settleDevice(5000);
|
|
29
|
+
batches = await (0, UpaHelpertest_1.findLiveBatches)(device);
|
|
30
|
+
}
|
|
31
|
+
return batches.batches[0]?.toString();
|
|
32
|
+
}
|
|
33
|
+
test("getBatchReport() populates every IDeviceResponse + top-level field", async () => {
|
|
34
|
+
const batchId = await acquireBatchId();
|
|
35
|
+
if (!batchId) {
|
|
36
|
+
console.warn("No batches available; skipping getBatchReport() shape.");
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const response = (await device
|
|
40
|
+
.getBatchReport()
|
|
41
|
+
.where(UpaSearchCriteria_1.UpaSearchCriteria.Batch, batchId)
|
|
42
|
+
.and(UpaSearchCriteria_1.UpaSearchCriteria.EcrId, 13)
|
|
43
|
+
.execute());
|
|
44
|
+
expect(response).toBeInstanceOf(BatchReportResponse_1.BatchReportResponse);
|
|
45
|
+
expect(response.command).toBe("GetBatchReport");
|
|
46
|
+
expect(typeof response.status).toBe("string");
|
|
47
|
+
expect(typeof response.deviceResponseCode).toBe("string");
|
|
48
|
+
expect(typeof response.deviceResponseText).toBe("string");
|
|
49
|
+
expect(typeof response.referenceNumber).toBe("string");
|
|
50
|
+
expect(typeof response.version).toBe("string");
|
|
51
|
+
expect(typeof response.multipleMessage).toBe("string");
|
|
52
|
+
expect(typeof response.merchantName).toBe("string");
|
|
53
|
+
expect(typeof response.deviceSerialNumber).toBe("string");
|
|
54
|
+
});
|
|
55
|
+
test("getBatchReport() populates BatchRecordResponse + BatchTransactionResponse per card brand", async () => {
|
|
56
|
+
const batchId = await acquireBatchId();
|
|
57
|
+
if (!batchId) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const response = (await device
|
|
61
|
+
.getBatchReport()
|
|
62
|
+
.where(UpaSearchCriteria_1.UpaSearchCriteria.Batch, batchId)
|
|
63
|
+
.and(UpaSearchCriteria_1.UpaSearchCriteria.EcrId, 13)
|
|
64
|
+
.execute());
|
|
65
|
+
if (response.status !== "Success") {
|
|
66
|
+
console.warn(`getBatchReport() returned ${response.deviceResponseCode}; skipping batchRecord assertions.`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
expect(response.batchRecord).toBeDefined();
|
|
70
|
+
const record = response.batchRecord;
|
|
71
|
+
expect(Number(record.batchId)).toBe(Number(batchId));
|
|
72
|
+
expect(record.batchSeqNbr === undefined ||
|
|
73
|
+
typeof record.batchSeqNbr === "number").toBe(true);
|
|
74
|
+
expect(typeof record.batchStatus).toBe("string");
|
|
75
|
+
expect(typeof record.openUtcDateTime).toBe("string");
|
|
76
|
+
expect(typeof record.closeUtcDateTime).toBe("string");
|
|
77
|
+
expect(typeof record.openTnxId).toBe("string");
|
|
78
|
+
expect(record.totalAmount === undefined ||
|
|
79
|
+
typeof record.totalAmount === "number").toBe(true);
|
|
80
|
+
expect(record.totalCnt === undefined || typeof record.totalCnt === "number").toBe(true);
|
|
81
|
+
expect(record.creditCnt === undefined || typeof record.creditCnt === "number").toBe(true);
|
|
82
|
+
expect(record.creditAmt === undefined || typeof record.creditAmt === "number").toBe(true);
|
|
83
|
+
expect(record.debitCnt === undefined || typeof record.debitCnt === "number").toBe(true);
|
|
84
|
+
expect(record.debitAmt === undefined || typeof record.debitAmt === "number").toBe(true);
|
|
85
|
+
expect(record.saleCnt === undefined || typeof record.saleCnt === "number").toBe(true);
|
|
86
|
+
expect(record.saleAmt === undefined || typeof record.saleAmt === "number").toBe(true);
|
|
87
|
+
expect(record.returnCnt === undefined || typeof record.returnCnt === "number").toBe(true);
|
|
88
|
+
expect(record.returnAmt === undefined || typeof record.returnAmt === "number").toBe(true);
|
|
89
|
+
expect(record.totalGratuityAmt === undefined ||
|
|
90
|
+
typeof record.totalGratuityAmt === "number").toBe(true);
|
|
91
|
+
expect(Array.isArray(record.batchTransactions)).toBe(true);
|
|
92
|
+
for (const brand of record.batchTransactions) {
|
|
93
|
+
expect(typeof brand.cardType).toBe("string");
|
|
94
|
+
// All 12 optional numeric fields must be either undefined or number.
|
|
95
|
+
[
|
|
96
|
+
"totalAmount",
|
|
97
|
+
"totalCnt",
|
|
98
|
+
"creditCnt",
|
|
99
|
+
"creditAmt",
|
|
100
|
+
"debitCnt",
|
|
101
|
+
"debitAmt",
|
|
102
|
+
"saleCnt",
|
|
103
|
+
"saleAmt",
|
|
104
|
+
"returnCnt",
|
|
105
|
+
"returnAmt",
|
|
106
|
+
"totalGratuityAmt",
|
|
107
|
+
].forEach((key) => {
|
|
108
|
+
const value = brand[key];
|
|
109
|
+
expect(value === undefined || typeof value === "number").toBe(true);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
test("getBatchDetails() populates transactionDetails per ITerminalReportTransaction", async () => {
|
|
114
|
+
const batchId = await acquireBatchId();
|
|
115
|
+
if (!batchId) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const response = (await device.getBatchDetails(batchId));
|
|
119
|
+
expect(response).toBeInstanceOf(BatchReportResponse_1.BatchReportResponse);
|
|
120
|
+
expect(response.command).toBe("GetBatchDetails");
|
|
121
|
+
if (response.status !== "Success") {
|
|
122
|
+
console.warn(`getBatchDetails() returned ${response.deviceResponseCode}; skipping detail assertions.`);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
expect(response.batchRecord).toBeDefined();
|
|
126
|
+
expect(Array.isArray(response.batchRecord.transactionDetails)).toBe(true);
|
|
127
|
+
const first = response.batchRecord.transactionDetails[0];
|
|
128
|
+
if (!first) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// ITerminalReportTransaction row shape.
|
|
132
|
+
expect(first.transactionDate).toBeInstanceOf(Date);
|
|
133
|
+
expect(first.authCode === undefined || typeof first.authCode === "string").toBe(true);
|
|
134
|
+
expect(first.cardType === undefined || typeof first.cardType === "string").toBe(true);
|
|
135
|
+
expect(first.maskedCardNumber === undefined ||
|
|
136
|
+
typeof first.maskedCardNumber === "string").toBe(true);
|
|
137
|
+
expect(first.referenceNumber === undefined ||
|
|
138
|
+
typeof first.referenceNumber === "string").toBe(true);
|
|
139
|
+
expect(first.transactionStatus === undefined ||
|
|
140
|
+
typeof first.transactionStatus === "string").toBe(true);
|
|
141
|
+
expect(first.transactionType === undefined ||
|
|
142
|
+
typeof first.transactionType === "string").toBe(true);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
//# sourceMappingURL=BatchReportResponse.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BatchReportResponse.test.js","sourceRoot":"","sources":["../../../../../../test/Unit/Terminals/UPA/Reponses/BatchReportResponse.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const OpenTabDetailsResponse_1 = require("../../../../../src/Terminals/UPA/Reponses/OpenTabDetailsResponse");
|
|
4
|
+
const UpaHelpertest_1 = require("../UpaHelpertest");
|
|
5
|
+
jest.setTimeout(240000);
|
|
6
|
+
function sleep(delayMs) {
|
|
7
|
+
return new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
8
|
+
}
|
|
9
|
+
async function settleDevice(delayMs = 8000) {
|
|
10
|
+
if (UpaHelpertest_1.useLiveMic) {
|
|
11
|
+
await sleep(delayMs);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
afterEach(async () => {
|
|
15
|
+
await settleDevice();
|
|
16
|
+
});
|
|
17
|
+
(0, UpaHelpertest_1.describeUpaLive)("UPA Response – OpenTabDetailsResponse (all fields, live MITC)", () => {
|
|
18
|
+
let device;
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
21
|
+
});
|
|
22
|
+
test("getOpenTabDetails() populates every IDeviceResponse + top-level field", async () => {
|
|
23
|
+
const response = (await device
|
|
24
|
+
.getOpenTabDetails()
|
|
25
|
+
.execute());
|
|
26
|
+
expect(response).toBeInstanceOf(OpenTabDetailsResponse_1.OpenTabDetailsResponse);
|
|
27
|
+
expect(response.command).toBe("GetOpenTabDetails");
|
|
28
|
+
expect(typeof response.status).toBe("string");
|
|
29
|
+
expect(typeof response.deviceResponseCode).toBe("string");
|
|
30
|
+
expect(typeof response.deviceResponseText).toBe("string");
|
|
31
|
+
expect(typeof response.referenceNumber).toBe("string");
|
|
32
|
+
expect(typeof response.version).toBe("string");
|
|
33
|
+
expect(typeof response.multipleMessage).toBe("string");
|
|
34
|
+
expect(typeof response.merchantName).toBe("string");
|
|
35
|
+
expect(typeof response.ecrId).toBe("string");
|
|
36
|
+
expect(typeof response.deviceSerialNumber).toBe("string");
|
|
37
|
+
expect(Array.isArray(response.openTabs)).toBe(true);
|
|
38
|
+
});
|
|
39
|
+
test("getOpenTabDetails() OpenTab records conform to declared shape", async () => {
|
|
40
|
+
const response = (await device
|
|
41
|
+
.getOpenTabDetails()
|
|
42
|
+
.execute());
|
|
43
|
+
if (response.status !== "Success") {
|
|
44
|
+
// OPENTAB001 = NO OPEN TAB TRANSACTIONS — legitimate for a clean terminal.
|
|
45
|
+
expect(["OPENTAB001", "APP011"]).toContain(response.deviceResponseCode);
|
|
46
|
+
console.warn(`getOpenTabDetails() returned ${response.deviceResponseCode}: no open tabs. Row assertions skipped.`);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
expect(response.deviceResponseCode).toBe("00");
|
|
50
|
+
for (const tab of response.openTabs) {
|
|
51
|
+
expect(tab).toBeDefined();
|
|
52
|
+
expect(tab.authorizedAmount === undefined ||
|
|
53
|
+
typeof tab.authorizedAmount === "number").toBe(true);
|
|
54
|
+
expect(typeof tab.cardType).toBe("string");
|
|
55
|
+
expect(typeof tab.maskedPan).toBe("string");
|
|
56
|
+
expect(typeof tab.transactionId).toBe("string");
|
|
57
|
+
expect(typeof tab.clerkId).toBe("string");
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
test("OpenTab class is exported and constructible", () => {
|
|
61
|
+
// Regression: OpenTab used to be declared but not surfaced via index.
|
|
62
|
+
const tab = new OpenTabDetailsResponse_1.OpenTab();
|
|
63
|
+
expect(tab).toBeInstanceOf(OpenTabDetailsResponse_1.OpenTab);
|
|
64
|
+
expect(tab.cardType).toBe("");
|
|
65
|
+
expect(tab.maskedPan).toBe("");
|
|
66
|
+
expect(tab.transactionId).toBe("");
|
|
67
|
+
expect(tab.clerkId).toBe("");
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=OpenTabDetailsResponse.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenTabDetailsResponse.test.js","sourceRoot":"","sources":["../../../../../../test/Unit/Terminals/UPA/Reponses/OpenTabDetailsResponse.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* Live-device unit tests for SafReportResponse (ITerminalReport contract).
|
|
5
|
+
*
|
|
6
|
+
* Exercises getSAFReport() over live MITC and asserts every mapped field
|
|
7
|
+
* on SafReportResponse plus SafReport / SafSummaryResponse / per-record
|
|
8
|
+
* ITerminalReportTransaction shape per UPA §12.4.16 (GetSAFReport).
|
|
9
|
+
*
|
|
10
|
+
* No mocks — this test only runs against a real device+gateway.
|
|
11
|
+
*/
|
|
12
|
+
const src_1 = require("../../../../../src");
|
|
13
|
+
const Enums_1 = require("../../../../../src/Terminals/Enums");
|
|
14
|
+
const SafReportResponse_1 = require("../../../../../src/Terminals/UPA/Reponses/SafReportResponse");
|
|
15
|
+
const UpaSearchCriteria_1 = require("../../../../../src/Terminals/UPA/Entities/UpaSearchCriteria");
|
|
16
|
+
const TerminalReportBuilder_1 = require("../../../../../src/Terminals/Builders/TerminalReportBuilder");
|
|
17
|
+
const UpaHelpertest_1 = require("../UpaHelpertest");
|
|
18
|
+
jest.setTimeout(240000);
|
|
19
|
+
function sleep(delayMs) {
|
|
20
|
+
return new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
21
|
+
}
|
|
22
|
+
async function settleDevice(delayMs = 8000) {
|
|
23
|
+
if (UpaHelpertest_1.useLiveMic) {
|
|
24
|
+
await sleep(delayMs);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
afterEach(async () => {
|
|
28
|
+
await settleDevice();
|
|
29
|
+
});
|
|
30
|
+
(0, UpaHelpertest_1.describeUpaLive)("UPA Response – SafReportResponse (all fields, live MITC)", () => {
|
|
31
|
+
let device;
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
34
|
+
});
|
|
35
|
+
test("getSAFReport() builder is TerminalReportBuilder<SafReportResponse>(GetSAFReport)", () => {
|
|
36
|
+
const builder = device.getSAFReport();
|
|
37
|
+
expect(builder).toBeInstanceOf(TerminalReportBuilder_1.TerminalReportBuilder);
|
|
38
|
+
expect(builder.reportType).toBe(Enums_1.TerminalReportType.GetSAFReport);
|
|
39
|
+
});
|
|
40
|
+
test("getSAFReport() populates every IDeviceResponse + ITerminalReport field", async () => {
|
|
41
|
+
const response = (await device
|
|
42
|
+
.getSAFReport()
|
|
43
|
+
.where(UpaSearchCriteria_1.UpaSearchCriteria.EcrId, 13)
|
|
44
|
+
.and(UpaSearchCriteria_1.UpaSearchCriteria.ReportOutput, Enums_1.ReportOutput.ReturnData)
|
|
45
|
+
.execute());
|
|
46
|
+
expect(response).toBeInstanceOf(SafReportResponse_1.SafReportResponse);
|
|
47
|
+
expect(response.command).toBe("GetSAFReport");
|
|
48
|
+
expect(typeof response.status).toBe("string");
|
|
49
|
+
expect(typeof response.deviceResponseCode).toBe("string");
|
|
50
|
+
expect(typeof response.deviceResponseText).toBe("string");
|
|
51
|
+
expect(typeof response.referenceNumber).toBe("string");
|
|
52
|
+
expect(typeof response.version).toBe("string");
|
|
53
|
+
expect(typeof response.ecrId).toBe("string");
|
|
54
|
+
expect(typeof response.requestId).toBe("string");
|
|
55
|
+
expect(typeof response.multipleMessage).toBe("string");
|
|
56
|
+
expect(typeof response.reportType).toBe("string");
|
|
57
|
+
expect(typeof response.reportOutput).toBe("string");
|
|
58
|
+
expect(typeof response.deviceSerialNumber).toBe("string");
|
|
59
|
+
});
|
|
60
|
+
test("getSAFReport() populates reportResult buckets when SAF records exist", async () => {
|
|
61
|
+
const response = (await device
|
|
62
|
+
.getSAFReport()
|
|
63
|
+
.where(UpaSearchCriteria_1.UpaSearchCriteria.EcrId, 13)
|
|
64
|
+
.and(UpaSearchCriteria_1.UpaSearchCriteria.ReportOutput, Enums_1.ReportOutput.ReturnData)
|
|
65
|
+
.execute());
|
|
66
|
+
if (response.status !== "Success") {
|
|
67
|
+
expect(["SAF001", "APP011"]).toContain(response.deviceResponseCode);
|
|
68
|
+
console.warn(`getSAFReport() returned ${response.deviceResponseCode}: no SAF records. Bucket assertions skipped.`);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
expect(response.deviceResponseCode).toBe("00");
|
|
72
|
+
expect(response.reportResult).toBeDefined();
|
|
73
|
+
expect(response.reportResult.totalCount).toBeGreaterThanOrEqual(0);
|
|
74
|
+
expect(response.reportResult.totalAmount).toBeGreaterThanOrEqual(0);
|
|
75
|
+
const allBuckets = [
|
|
76
|
+
response.reportResult.approved,
|
|
77
|
+
response.reportResult.pending,
|
|
78
|
+
response.reportResult.declined,
|
|
79
|
+
];
|
|
80
|
+
for (const bucket of allBuckets) {
|
|
81
|
+
if (!bucket) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
for (const summary of Object.values(bucket)) {
|
|
85
|
+
expect([
|
|
86
|
+
src_1.SummaryType.Approved,
|
|
87
|
+
src_1.SummaryType.Pending,
|
|
88
|
+
src_1.SummaryType.Declined,
|
|
89
|
+
src_1.SummaryType.Unknown,
|
|
90
|
+
].includes(summary.summaryType)).toBe(true);
|
|
91
|
+
expect(typeof summary.count).toBe("number");
|
|
92
|
+
expect(typeof summary.totalAmount).toBe("number");
|
|
93
|
+
expect(Array.isArray(summary.transactions)).toBe(true);
|
|
94
|
+
// ITerminalReportTransaction row-shape assertions on the first
|
|
95
|
+
// record (if any) — non-null fields per §12.4.16.
|
|
96
|
+
const first = summary.transactions[0];
|
|
97
|
+
if (first) {
|
|
98
|
+
expect(typeof first.transactionType).toBe("string");
|
|
99
|
+
expect(first.transactionId === undefined ||
|
|
100
|
+
typeof first.transactionId === "string").toBe(true);
|
|
101
|
+
expect(first.referenceNumber === undefined ||
|
|
102
|
+
typeof first.referenceNumber === "string").toBe(true);
|
|
103
|
+
expect(first.cardType === undefined ||
|
|
104
|
+
typeof first.cardType === "string").toBe(true);
|
|
105
|
+
expect(first.maskedCardNumber === undefined ||
|
|
106
|
+
typeof first.maskedCardNumber === "string").toBe(true);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
//# sourceMappingURL=SafReportResponse.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SafReportResponse.test.js","sourceRoot":"","sources":["../../../../../../test/Unit/Terminals/UPA/Reponses/SafReportResponse.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const UpaEODResponse_1 = require("../../../../../src/Terminals/UPA/Reponses/UpaEODResponse");
|
|
4
|
+
const UpaHelpertest_1 = require("../UpaHelpertest");
|
|
5
|
+
jest.setTimeout(240000);
|
|
6
|
+
function sleep(delayMs) {
|
|
7
|
+
return new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
8
|
+
}
|
|
9
|
+
async function settleDevice(delayMs = 8000) {
|
|
10
|
+
if (UpaHelpertest_1.useLiveMic) {
|
|
11
|
+
await sleep(delayMs);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
afterEach(async () => {
|
|
15
|
+
await settleDevice();
|
|
16
|
+
});
|
|
17
|
+
(0, UpaHelpertest_1.describeUpaLive)("UPA Response – UpaEODResponse (all fields, live MITC)", () => {
|
|
18
|
+
let device;
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
device = (0, UpaHelpertest_1.createTestDevice)();
|
|
21
|
+
});
|
|
22
|
+
test("endOfDay() populates every IDeviceResponse field on UpaEODResponse", async () => {
|
|
23
|
+
// Seed a sale so EOD has something to settle. Ignore known blockers.
|
|
24
|
+
const sale = await (0, UpaHelpertest_1.createLiveSale)(device);
|
|
25
|
+
(0, UpaHelpertest_1.expectLiveSuccess)(sale, "Sale");
|
|
26
|
+
const response = (await device.endOfDay());
|
|
27
|
+
expect(response).toBeInstanceOf(UpaEODResponse_1.UpaEODResponse);
|
|
28
|
+
expect(response.command).toBe("EODProcessing");
|
|
29
|
+
expect(typeof response.status).toBe("string");
|
|
30
|
+
expect(response.status.length).toBeGreaterThan(0);
|
|
31
|
+
expect(typeof response.deviceResponseCode).toBe("string");
|
|
32
|
+
expect(response.deviceResponseCode.length).toBeGreaterThan(0);
|
|
33
|
+
expect(typeof response.deviceResponseText).toBe("string");
|
|
34
|
+
expect(typeof response.referenceNumber).toBe("string");
|
|
35
|
+
expect(typeof response.version).toBe("string");
|
|
36
|
+
expect(typeof response.toString()).toBe("string");
|
|
37
|
+
});
|
|
38
|
+
test("endOfDay() populates host block + ecrId on Success", async () => {
|
|
39
|
+
const sale = await (0, UpaHelpertest_1.createLiveSale)(device);
|
|
40
|
+
(0, UpaHelpertest_1.expectLiveSuccess)(sale, "Sale");
|
|
41
|
+
const response = (await device.endOfDay());
|
|
42
|
+
if (response.status !== "Success") {
|
|
43
|
+
console.warn(`endOfDay() returned ${response.deviceResponseCode}: skipping host-block assertions.`);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
expect(response.deviceResponseCode).toBe("00");
|
|
47
|
+
expect(response.batchId).toBeDefined();
|
|
48
|
+
expect(Number.isFinite(Number(response.batchId))).toBe(true);
|
|
49
|
+
expect(response.gatewayResponseCode).toBeDefined();
|
|
50
|
+
expect(typeof response.gatewayResponseMessage).toBe("string");
|
|
51
|
+
expect(typeof response.respDateTime).toBe("string");
|
|
52
|
+
expect(response.respDateTime.length).toBeGreaterThan(0);
|
|
53
|
+
// ecrId is set by the SDK from the request (we default to "13").
|
|
54
|
+
expect(response.ecrId).toBe("13");
|
|
55
|
+
});
|
|
56
|
+
test("UpaEODResponse exposes writable IEODResponse sub-response slots", async () => {
|
|
57
|
+
const sale = await (0, UpaHelpertest_1.createLiveSale)(device);
|
|
58
|
+
(0, UpaHelpertest_1.expectLiveSuccess)(sale, "Sale");
|
|
59
|
+
const response = (await device.endOfDay());
|
|
60
|
+
// Every sub-response slot declared on IEODResponse must be assignable
|
|
61
|
+
// on the concrete UpaEODResponse (they are optional and left undefined
|
|
62
|
+
// by the parser because UPA packs sub-messages into multipleMessage).
|
|
63
|
+
const stub = {
|
|
64
|
+
status: "Success",
|
|
65
|
+
command: "BatchClose",
|
|
66
|
+
version: "",
|
|
67
|
+
deviceResponseCode: "00",
|
|
68
|
+
deviceResponseText: "Success",
|
|
69
|
+
referenceNumber: "",
|
|
70
|
+
toString: () => "",
|
|
71
|
+
};
|
|
72
|
+
response.attachmentResponse = stub;
|
|
73
|
+
response.batchCloseResponse = stub;
|
|
74
|
+
response.emvOfflineDeclineResponse = stub;
|
|
75
|
+
response.emvPDLResponse = stub;
|
|
76
|
+
response.emvTransactionCertificationResponse = stub;
|
|
77
|
+
response.heartBeatResponse = stub;
|
|
78
|
+
response.reversalResponse = stub;
|
|
79
|
+
response.batchReportResponse = stub;
|
|
80
|
+
response.attachmentResponseText = "Success";
|
|
81
|
+
response.batchCloseResponseText = "Success";
|
|
82
|
+
response.emvOfflineDeclineResponseText = "Success";
|
|
83
|
+
response.emvPDLResponseText = "Success";
|
|
84
|
+
response.emvTransactionCertificationResponseText = "Success";
|
|
85
|
+
response.heartBeatResponseText = "Success";
|
|
86
|
+
response.reversalResponseText = "Success";
|
|
87
|
+
response.safResponseText = "Success";
|
|
88
|
+
response.batchReportResponseText = "Success";
|
|
89
|
+
expect(response.attachmentResponse).toBe(stub);
|
|
90
|
+
expect(response.batchCloseResponse).toBe(stub);
|
|
91
|
+
expect(response.emvOfflineDeclineResponse).toBe(stub);
|
|
92
|
+
expect(response.emvPDLResponse).toBe(stub);
|
|
93
|
+
expect(response.emvTransactionCertificationResponse).toBe(stub);
|
|
94
|
+
expect(response.heartBeatResponse).toBe(stub);
|
|
95
|
+
expect(response.reversalResponse).toBe(stub);
|
|
96
|
+
expect(response.batchReportResponse).toBe(stub);
|
|
97
|
+
expect(response.attachmentResponseText).toBe("Success");
|
|
98
|
+
expect(response.batchCloseResponseText).toBe("Success");
|
|
99
|
+
expect(response.emvOfflineDeclineResponseText).toBe("Success");
|
|
100
|
+
expect(response.emvPDLResponseText).toBe("Success");
|
|
101
|
+
expect(response.emvTransactionCertificationResponseText).toBe("Success");
|
|
102
|
+
expect(response.heartBeatResponseText).toBe("Success");
|
|
103
|
+
expect(response.reversalResponseText).toBe("Success");
|
|
104
|
+
expect(response.safResponseText).toBe("Success");
|
|
105
|
+
expect(response.batchReportResponseText).toBe("Success");
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=UpaEODResponse.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpaEODResponse.test.js","sourceRoot":"","sources":["../../../../../../test/Unit/Terminals/UPA/Reponses/UpaEODResponse.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|