Skip to content

Commit

Permalink
Merge pull request #899 from Adyen/PW-6628
Browse files Browse the repository at this point in the history
PW-6628: Update ReversalRequest model
  • Loading branch information
michaelpaul committed Jun 21, 2022
2 parents dc8499f + 5a5a3c6 commit f236355
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 37 deletions.
3 changes: 2 additions & 1 deletion src/__mocks__/base.ts
Expand Up @@ -112,7 +112,8 @@ const getReversalRequest = (poiTransaction: TransactionIdentification): Reversal
TimeStamp: poiTransaction.TimeStamp
},
},
ReversalReason: ReversalReasonType.MerchantCancel
ReversalReason: ReversalReasonType.MerchantCancel,
SaleData: saleData
});

const getSaleToPOIRequest = (messageHeader: MessageHeader, request: Partial<SaleToPOIRequest>): SaleToPOIRequest => ({
Expand Down
27 changes: 14 additions & 13 deletions src/__tests__/terminalCloudAPI.spec.ts
Expand Up @@ -46,7 +46,7 @@ afterEach((): void => {

const isCI = process.env.CI === "true" || (typeof process.env.CI === "boolean" && process.env.CI);
describe("Terminal Cloud API", (): void => {
test.each([isCI, true])("should make an async payment request, isMock: %p", async (isMock): Promise<void> => {
test.each([isCI])("should make an async payment request, isMock: %p", async (isMock): Promise<void> => {
!isMock && nock.restore();
scope.post("/async").reply(200, asyncRes);

Expand All @@ -57,7 +57,7 @@ describe("Terminal Cloud API", (): void => {
expect(requestResponse).toEqual("ok");
});

test.each([isCI, true])("should make a sync payment request, isMock: %p", async (isMock): Promise<void> => {
test.each([isCI])("should make a sync payment request, isMock: %p", async (isMock): Promise<void> => {
!isMock && nock.restore();
scope.post("/sync").reply(200, syncRes);

Expand All @@ -68,7 +68,7 @@ describe("Terminal Cloud API", (): void => {
expect(terminalAPIResponse.SaleToPOIResponse?.MessageHeader).toBeDefined();
});

test.each([isCI, true])("should return event notification if response contains it, isMock: %p", async (isMock): Promise<void> => {
test.each([isCI])("should return event notification if response contains it, isMock: %p", async (isMock): Promise<void> => {
!isMock && nock.restore();

const terminalAPIPaymentRequest = createTerminalAPIPaymentRequest();
Expand All @@ -79,23 +79,24 @@ describe("Terminal Cloud API", (): void => {
expect(terminalAPIResponse.SaleToPOIRequest?.EventNotification).toBeDefined();
});

test.each([isCI, true])("should make an async refund request, isMock: %p", async (isMock): Promise<void> => {
test.each([isCI])("should make an async refund request, isMock: %p", async (isMock): Promise<void> => {
!isMock && nock.restore();
scope.post("/sync").reply(200, syncRes);

const terminalAPIPaymentRequest = createTerminalAPIPaymentRequest();
const terminalAPIResponse: TerminalApiResponse = await terminalCloudAPI.sync(terminalAPIPaymentRequest);

const pOITransactionId = terminalAPIResponse.SaleToPOIResponse!.PaymentResponse!.POIData!.POITransactionID;
expect(pOITransactionId).toBeTruthy();

scope.post("/sync").reply(200, syncRefund);

const pOITransactionId = terminalAPIResponse.SaleToPOIResponse?.PaymentResponse?.POIData!.POITransactionID;
if(pOITransactionId) {
const terminalAPIRefundRequest = createTerminalAPIRefundRequest(pOITransactionId);
const terminalAPIRefundResponse = await terminalCloudAPI.sync(terminalAPIRefundRequest);
const terminalAPIRefundRequest = createTerminalAPIRefundRequest(pOITransactionId);
const id = Math.floor(Math.random() * Math.floor(10000000)).toString();
terminalAPIRefundRequest.SaleToPOIRequest.MessageHeader.ServiceID = id;
terminalAPIRefundRequest.SaleToPOIRequest.ReversalRequest!.SaleData!.SaleToAcquirerData!.currency = 'EUR';
const terminalAPIRefundResponse = await terminalCloudAPI.sync(terminalAPIRefundRequest);

expect(terminalAPIRefundResponse.SaleToPOIResponse?.ReversalResponse).toBeDefined();
} else {
fail();
}
});
expect(terminalAPIRefundResponse.SaleToPOIResponse?.ReversalResponse?.Response.Result).toBe('Success');
}, 20000);
});
8 changes: 0 additions & 8 deletions src/services/terminalCloudAPI.ts
Expand Up @@ -46,14 +46,6 @@ class TerminalCloudAPI extends ApiKeyAuthenticatedService {
const reqWithAppInfo = {saleToPOIRequest};

mergeDeep(request, reqWithAppInfo);
const formattedRequest = ObjectSerializer.serialize(request, "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");
}

return formattedRequest;
}

return ObjectSerializer.serialize(request, "TerminalApiRequest");
Expand Down
6 changes: 0 additions & 6 deletions src/services/terminalLocalAPI.ts
Expand Up @@ -47,12 +47,6 @@ class TerminalLocalAPI extends ApiKeyAuthenticatedService {
securityKey: SecurityKey,
): Promise<TerminalApiResponse> {
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");
}

const saleToPoiSecuredMessage: SaleToPOISecuredMessage = NexoCrypto.encrypt(
terminalApiRequest.SaleToPOIRequest.MessageHeader,
JSON.stringify(formattedRequest),
Expand Down
3 changes: 3 additions & 0 deletions src/typings/terminal/models.ts
Expand Up @@ -853,6 +853,9 @@ export class ObjectSerializer {
return transformedData;
} else if (type === "Date") {
return data.toISOString();
} else if (type === "SaleToAcquirerData") {
const dataString = JSON.stringify(data);
return Buffer.from(dataString).toString("base64");
} else {
if (enumsMap[type]) {
return data;
Expand Down
19 changes: 10 additions & 9 deletions src/typings/terminal/reversalRequest.ts
Expand Up @@ -33,21 +33,22 @@
import { CustomerOrder } from './customerOrder';
import { OriginalPOITransaction } from './originalPOITransaction';
import { ReversalReasonType } from './reversalReasonType';
import { SaleData } from './saleData';

export class ReversalRequest {
'CustomerOrderID'?: CustomerOrder;
'SaleData'?: SaleData;
'OriginalPOITransaction': OriginalPOITransaction;
'ReversalReason': ReversalReasonType;
'ReversedAmount'?: number;
'SaleReferenceID'?: string;
'ReversalReason': ReversalReasonType;
'CustomerOrder'?: CustomerOrder;

static discriminator: string | undefined = undefined;

static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [
{
"name": "CustomerOrderID",
"baseName": "CustomerOrderID",
"type": "CustomerOrder"
"name": "SaleData",
"baseName": "SaleData",
"type": "SaleData",
},
{
"name": "OriginalPOITransaction",
Expand All @@ -65,9 +66,9 @@ export class ReversalRequest {
"type": "number"
},
{
"name": "SaleReferenceID",
"baseName": "SaleReferenceID",
"type": "string"
"name": "CustomerOrder",
"baseName": "CustomerOrder",
"type": "CustomerOrder"
} ];

static getAttributeTypeMap() {
Expand Down

0 comments on commit f236355

Please sign in to comment.