Skip to content

Commit c4f6786

Browse files
committed
Test TerminalAPI SaleToAcquirerData serialize
1 parent 8c74791 commit c4f6786

File tree

1 file changed

+173
-0
lines changed

1 file changed

+173
-0
lines changed
Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
import { MessageCategoryType, MessageClassType, MessageType, ObjectSerializer, TerminalApiRequest } from "../typings/terminal/models";
2+
3+
4+
describe("ObjectSerializer.serialize", () => {
5+
6+
it("should serialize TerminalAPIPaymentRequest", () => {
7+
const terminalAPIPaymentRequest = newTerminalAPIPaymentRequest();
8+
9+
const json = ObjectSerializer.serialize(terminalAPIPaymentRequest, "TerminalApiRequest");
10+
11+
expect(json).toBeTruthy();
12+
expect(json).toHaveProperty("SaleToPOIRequest");
13+
expect(json.SaleToPOIRequest).toHaveProperty("MessageHeader");
14+
expect(json.SaleToPOIRequest).toHaveProperty("PaymentRequest");
15+
16+
expect(json.SaleToPOIRequest.PaymentRequest).toHaveProperty("SaleData");
17+
expect(json.SaleToPOIRequest.PaymentRequest.SaleData).toHaveProperty("SaleTransactionID");
18+
expect(json.SaleToPOIRequest.PaymentRequest.SaleData.SaleTransactionID).toHaveProperty("TimeStamp");
19+
expect(json.SaleToPOIRequest.PaymentRequest.SaleData).toHaveProperty("SaleToAcquirerData");
20+
21+
const saleToAcquirerData = json.SaleToPOIRequest.PaymentRequest.SaleData.SaleToAcquirerData;
22+
// SaleToAcquirerData should be a string
23+
expect(typeof(saleToAcquirerData)).toBe("string");
24+
// SaleToAcquirerData should be base64 encoded
25+
expect(() => Buffer.from(saleToAcquirerData, "base64").toString("utf-8")).not.toThrow();
26+
27+
// decode and test metadata
28+
const decoded = JSON.parse(Buffer.from(saleToAcquirerData, "base64").toString("utf-8"));
29+
expect(decoded).toHaveProperty("applicationInfo");
30+
31+
expect(decoded).toHaveProperty("metadata");
32+
expect(decoded.metadata).toHaveProperty("someMetaDataKey1");
33+
expect(decoded.metadata).toHaveProperty("someMetaDataKey2");
34+
expect(decoded.metadata.someMetaDataKey1).toBe("YOUR_VALUE");
35+
expect(decoded.metadata.someMetaDataKey2).toBe("YOUR_VALUE");
36+
});
37+
38+
it("should serialize SaleToAcquirerData as base64 if object", () => {
39+
const obj = { foo: "bar" };
40+
const expected = Buffer.from(JSON.stringify(obj)).toString("base64");
41+
expect(ObjectSerializer.serialize(obj, "SaleToAcquirerData")).toBe(expected);
42+
});
43+
44+
it("should serialize TerminalAPIPaymentRequest with additionalData as JSON object", () => {
45+
const terminalAPIPaymentRequest = newTerminalAPIPaymentRequestWithAdditionalDataAsJSONObject();
46+
47+
const json = ObjectSerializer.serialize(terminalAPIPaymentRequest, "TerminalApiRequest");
48+
49+
expect(json).toBeTruthy();
50+
expect(json).toHaveProperty("SaleToPOIRequest");
51+
expect(json.SaleToPOIRequest).toHaveProperty("MessageHeader");
52+
expect(json.SaleToPOIRequest).toHaveProperty("PaymentRequest");
53+
54+
expect(json.SaleToPOIRequest.PaymentRequest).toHaveProperty("SaleData");
55+
expect(json.SaleToPOIRequest.PaymentRequest.SaleData).toHaveProperty("SaleToAcquirerData");
56+
const saleToAcquirerData = json.SaleToPOIRequest.PaymentRequest.SaleData.SaleToAcquirerData;
57+
// SaleToAcquirerData should be a string
58+
expect(typeof(saleToAcquirerData)).toBe("string");
59+
// SaleToAcquirerData should be base64 encoded
60+
expect(() => Buffer.from(saleToAcquirerData, "base64").toString("utf-8")).not.toThrow();
61+
62+
// decode and test metadata
63+
const decoded = JSON.parse(Buffer.from(saleToAcquirerData, "base64").toString("utf-8"));
64+
// verify manualCapture
65+
expect(decoded).toHaveProperty("additionalData");
66+
expect(decoded.additionalData).toHaveProperty("manualCapture");
67+
expect(decoded.additionalData.manualCapture).toBe("true");
68+
});
69+
70+
it("should return undefined when data is undefined", () => {
71+
expect(ObjectSerializer.serialize(undefined, "string")).toBeUndefined();
72+
});
73+
74+
it("should serialize primitive types", () => {
75+
expect(ObjectSerializer.serialize("hello", "string")).toBe("hello");
76+
expect(ObjectSerializer.serialize(123, "number")).toBe(123);
77+
expect(ObjectSerializer.serialize(true, "boolean")).toBe(true);
78+
});
79+
80+
it("should serialize Date to ISO string", () => {
81+
const date = new Date("2024-01-01T12:00:00Z");
82+
expect(ObjectSerializer.serialize(date, "Date")).toBe(date.toISOString());
83+
});
84+
85+
it("should serialize Array of primitives", () => {
86+
expect(ObjectSerializer.serialize([1, 2, 3], "Array<number>")).toEqual([1, 2, 3]);
87+
expect(ObjectSerializer.serialize(["a", "b"], "Array<string>")).toEqual(["a", "b"]);
88+
});
89+
90+
it("should serialize SaleToAcquirerData as string if already string", () => {
91+
expect(ObjectSerializer.serialize("somestring", "SaleToAcquirerData")).toBe("somestring");
92+
});
93+
94+
it("should serialize enums as is", () => {
95+
expect(ObjectSerializer.serialize("Default", "AccountType")).toBe("Default");
96+
});
97+
98+
});
99+
100+
const newTerminalAPIPaymentRequest = (): TerminalApiRequest => {
101+
const messageHeader = {
102+
MessageCategory: MessageCategoryType.Payment,
103+
MessageClass: MessageClassType.Service,
104+
MessageType: MessageType.Request,
105+
POIID: "V400m-324688179",
106+
ProtocolVersion: "3.0",
107+
SaleID: "POSSystemID12345",
108+
ServiceID: "0207111104",
109+
};
110+
111+
const paymentRequest = {
112+
PaymentTransaction: {
113+
AmountsReq: {
114+
Currency: "EUR",
115+
RequestedAmount: 1000,
116+
},
117+
},
118+
SaleData: {
119+
SaleTransactionID: {
120+
TimeStamp: new Date().toISOString(),
121+
TransactionID: "1234567890",
122+
},
123+
SaleToAcquirerData: {
124+
applicationInfo: {
125+
merchantApplication: {
126+
version: "1.0",
127+
name: "TestApp",
128+
},
129+
},
130+
metadata: {
131+
someMetaDataKey1: "YOUR_VALUE",
132+
someMetaDataKey2: "YOUR_VALUE",
133+
},
134+
},
135+
},
136+
};
137+
138+
return { SaleToPOIRequest: {MessageHeader: messageHeader, PaymentRequest: paymentRequest} };
139+
};
140+
141+
const newTerminalAPIPaymentRequestWithAdditionalDataAsJSONObject = (): TerminalApiRequest => {
142+
const messageHeader = {
143+
MessageCategory: MessageCategoryType.Payment,
144+
MessageClass: MessageClassType.Service,
145+
MessageType: MessageType.Request,
146+
POIID: "V400m-324688179",
147+
ProtocolVersion: "3.0",
148+
SaleID: "POSSystemID12345",
149+
ServiceID: "0207111104",
150+
};
151+
152+
const paymentRequest = {
153+
PaymentTransaction: {
154+
AmountsReq: {
155+
Currency: "EUR",
156+
RequestedAmount: 1000,
157+
},
158+
},
159+
SaleData: {
160+
SaleTransactionID: {
161+
TimeStamp: new Date().toISOString(),
162+
TransactionID: "1234567890",
163+
},
164+
SaleToAcquirerData: {
165+
additionalData: {
166+
manualCapture: "true"
167+
},
168+
},
169+
},
170+
};
171+
172+
return { SaleToPOIRequest: {MessageHeader: messageHeader, PaymentRequest: paymentRequest} };
173+
};

0 commit comments

Comments
 (0)