From b91f9100b22d826034b1cf84540edd9697205fc9 Mon Sep 17 00:00:00 2001 From: wouterboe Date: Tue, 4 May 2021 15:28:08 +0200 Subject: [PATCH] implemented tests for print receipt request with special characters --- src/__mocks__/base.ts | 41 ++++++++++++++++++++++++++ src/__tests__/terminalLocalAPI.spec.ts | 30 ++++++++++++++++++- src/services/terminalLocalAPI.ts | 1 - 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/src/__mocks__/base.ts b/src/__mocks__/base.ts index c1f9e15..ef34449 100644 --- a/src/__mocks__/base.ts +++ b/src/__mocks__/base.ts @@ -21,12 +21,17 @@ import Client from "../client"; import Config from "../config"; import { AmountsReq, + DocumentQualifierType, MessageCategoryType, MessageClassType, MessageHeader, MessageType, + OutputFormatType, + OutputText, PaymentRequest, PaymentTransaction, + PrintRequest, + ResponseModeType, ReversalReasonType, ReversalRequest, SaleData, @@ -34,6 +39,8 @@ import { TerminalApiRequest, TransactionIdentification } from "../typings/terminal/models"; +import CharacterStyleEnum = OutputText.CharacterStyleEnum; +import AlignmentEnum = OutputText.AlignmentEnum; export const createClient = (apiKey = process.env.ADYEN_API_KEY): Client => { const config: Config = new Config(); @@ -101,6 +108,34 @@ const paymentRequest: PaymentRequest = { saleData, }; +const printRequest: PrintRequest = { + printOutput: { + documentQualifier:DocumentQualifierType.CashierReceipt, + responseMode: ResponseModeType.PrintEnd, + outputContent: { + outputFormat: OutputFormatType.Text, + outputText:[ + { + characterStyle: CharacterStyleEnum.Bold, + alignment: AlignmentEnum.Centred, + endOfLineFlag:true, + text:"This is a title" + }, + { + endOfLineFlag:false, + alignment: AlignmentEnum.Left, + text:"This is the key" + }, + { + endOfLineFlag:true, + alignment: AlignmentEnum.Right, + text:"value - üäöÖÜÄß" + }, + ], + } + } +}; + const getReversalRequest = (poiTransaction: TransactionIdentification): ReversalRequest => ({ originalPOITransaction: { pOITransactionID: { @@ -128,3 +163,9 @@ export const createTerminalAPIRefundRequest = (transactionIdentification: Transa const saleToPOIRequest = getSaleToPOIRequest(messageHeader, { reversalRequest: getReversalRequest(transactionIdentification) }); return { saleToPOIRequest }; }; + +export const createTerminalAPIReceiptRequest = (): TerminalApiRequest => { + const messageHeader = getMessageHeader({ messageCategory: MessageCategoryType.Print}); + const saleToPOIRequest = getSaleToPOIRequest(messageHeader, { printRequest }); + return { saleToPOIRequest }; +}; diff --git a/src/__tests__/terminalLocalAPI.spec.ts b/src/__tests__/terminalLocalAPI.spec.ts index b1113f6..590fc76 100644 --- a/src/__tests__/terminalLocalAPI.spec.ts +++ b/src/__tests__/terminalLocalAPI.spec.ts @@ -18,7 +18,11 @@ */ import nock from "nock"; -import { createClient, createTerminalAPIPaymentRequest } from "../__mocks__/base"; +import { + createClient, + createTerminalAPIPaymentRequest, + createTerminalAPIReceiptRequest +} from "../__mocks__/base"; import { localEncRes, wrongEncRes } from "../__mocks__/terminalApi/local"; import Client from "../client"; import TerminalLocalAPI from "../services/terminalLocalAPI"; @@ -84,4 +88,28 @@ describe("Terminal Local API", (): void => { expect(e.message).toEqual("Hmac validation failed"); } }); + + test.each([isCI, true])("should print a receipt, isMock %p", async (isMock): Promise => { + !isMock && nock.restore(); + scope.post("/").reply(200, localEncRes); + + const terminalApiReceiptRequest = createTerminalAPIReceiptRequest(); + const securityKey: SecurityKey = { + adyenCryptoVersion: 0, + keyIdentifier: "CryptoKeyIdentifier12345", + keyVersion: 0, + passphrase: "p@ssw0rd123456", + }; + + const terminalApiResponse: TerminalApiResponse = + await terminalLocalAPI.request(terminalApiReceiptRequest, securityKey); + + //TODO: Implement encrypted printresponse + if(isMock) { + expect(terminalApiResponse.saleToPOIResponse?.paymentResponse).toBeDefined(); + } else { + expect(terminalApiResponse.saleToPOIResponse?.printResponse).toBeDefined(); + } + expect(terminalApiResponse.saleToPOIResponse?.messageHeader).toBeDefined(); + }); }); diff --git a/src/services/terminalLocalAPI.ts b/src/services/terminalLocalAPI.ts index b13e45b..b575552 100644 --- a/src/services/terminalLocalAPI.ts +++ b/src/services/terminalLocalAPI.ts @@ -47,7 +47,6 @@ class TerminalLocalAPI extends ApiKeyAuthenticatedService { securityKey: SecurityKey, ): Promise { const formattedRequest = ObjectSerializer.serialize(terminalApiRequest, "TerminalApiRequest"); - if (formattedRequest.SaleToPOIRequest?.PaymentRequest?.SaleData?.SaleToAcquirerData) { const dataString = JSON.stringify(formattedRequest.SaleToPOIRequest.PaymentRequest.SaleData.SaleToAcquirerData); formattedRequest.SaleToPOIRequest.PaymentRequest.SaleData.SaleToAcquirerData = Buffer.from(dataString).toString("base64");