Skip to content

Commit 1a15fc4

Browse files
committed
Test ApiError when an API error occurs
1 parent 8413c5e commit 1a15fc4

File tree

5 files changed

+50
-15
lines changed

5 files changed

+50
-15
lines changed

src/__tests__/balanceControl.spec.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,15 @@ describe("Balance Control", (): void => {
6565
fail("No exception was thrown");
6666
} catch (error) {
6767
expect(error instanceof HttpClientException).toBeTruthy();
68-
if (error instanceof HttpClientException && error.responseBody && error.stack) {
69-
expect(JSON.parse(error.responseBody).errorType).toBe("validation");
68+
if (error instanceof HttpClientException) {
69+
expect(error.statusCode).toBe(422);
70+
expect(error.responseBody).toBeTruthy();
71+
expect(error.errorCode).toBe("30_004");
72+
// check apiError
73+
expect(error.apiError).toBeTruthy();
74+
expect(error.apiError?.errorCode).toBe("30_004");
75+
expect(error.apiError?.message).toBe("Merchant account code is invalid or missing");
76+
expect(error.apiError?.errorType).toBe("validation")
7077
} else {
7178
fail("Error did not contain the expected data");
7279
}

src/__tests__/checkout.spec.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,14 @@ describe("Checkout", (): void => {
273273
} catch (error) {
274274
expect(error instanceof HttpClientException).toBeTruthy();
275275
if(error instanceof HttpClientException && error.responseBody && error.stack) {
276-
expect(JSON.parse(error.responseBody).errorType).toBe("validation");
276+
expect(error.statusCode).toBe(422);
277+
expect(error.responseBody).toBeTruthy();
278+
expect(error.errorCode).toBe("200");
279+
// check apiError
280+
expect(error.apiError).toBeTruthy();
281+
expect(error.apiError?.pspReference).toBe("DMB552CV6JHKGK82");
282+
expect(error.apiError?.message).toBe("Field 'countryCode' is not valid.");
283+
expect(error.apiError?.errorType).toBe("validation");
277284
} else {
278285
fail("Error did not contain the expected data");
279286
}

src/__tests__/management.spec.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -576,9 +576,17 @@ describe("Management", (): void => {
576576
await managementService.UsersMerchantLevelApi.createNewUser(merchantId, requests.createMerchantUserRequestInvalidEmail);
577577
} catch (error) {
578578
expect(error instanceof HttpClientException).toBeTruthy();
579-
if(error instanceof HttpClientException && error.responseBody && error.stack) {
580-
expect(JSON.parse(error.responseBody).status).toBe(422);
581-
expect(JSON.parse(error.responseBody).invalidFields).toBeTruthy();
579+
if(error instanceof HttpClientException) {
580+
expect(error.statusCode).toBe(422);
581+
expect(error.responseBody).toBeTruthy();
582+
expect(error.errorCode).toBe("31_007");
583+
// check apiError
584+
expect(error.apiError).toBeTruthy();
585+
expect(error.apiError?.errorCode).toBe("31_007");
586+
expect(error.apiError?.title).toBe("Invalid user information provided.");
587+
expect(error.apiError?.type).toBe("https://docs.adyen.com/errors/validation")
588+
expect(error.apiError?.invalidFields).toBeTruthy();
589+
expect(error.apiError?.invalidFields?.length).toBe(1);
582590
} else {
583591
fail("Error did not contain the expected data");
584592
}

src/__tests__/modification.spec.ts

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ describe("Modification", (): void => {
175175
});
176176

177177
test("should fail to perform an amount update request", async (): Promise<void> => {
178-
expect.assertions(2);
178+
expect.assertions(4);
179179
const request = createAmountUpdateRequest();
180180
scope.post(`/payments/${invalidPaymentPspReference}/amountUpdates`)
181181
.reply(422, invalidModificationResult);
@@ -184,8 +184,11 @@ describe("Modification", (): void => {
184184
await checkoutAPI.ModificationsApi.updateAuthorisedAmount(invalidPaymentPspReference, request);
185185
} catch (e) {
186186
if(e instanceof HttpClientException) {
187-
if(e.statusCode) expect(e.statusCode).toBe(422);
187+
expect(e.statusCode).toBe(422);
188188
expect(e.message).toContain("Original pspReference required for this operation");
189+
// check API apiError
190+
expect(e.apiError).toBeTruthy();
191+
expect(e.apiError?.status).toBe(422);
189192
} else {
190193
fail();
191194
}
@@ -209,16 +212,20 @@ describe("Modification", (): void => {
209212
});
210213

211214
test("should fail to perform a cancels request", async (): Promise<void> => {
212-
expect.assertions(2);
215+
expect.assertions(4);
213216
const request = createCancelsRequest();
214217
scope.post(`/payments/${invalidPaymentPspReference}/cancels`)
215218
.reply(422, invalidModificationResult);
216219
try {
217220
await checkoutAPI.ModificationsApi.cancelAuthorisedPaymentByPspReference(invalidPaymentPspReference, request);
218221
} catch (e) {
219222
if(e instanceof HttpClientException) {
220-
if(e.statusCode) expect(e.statusCode).toBe(422);
223+
expect(e.statusCode).toBe(422);
221224
expect(e.message).toContain("Original pspReference required for this operation");
225+
// check apiError
226+
expect(e.apiError).toBeTruthy();
227+
expect(e.apiError?.errorCode).toBe("167");
228+
222229
} else {
223230
fail();
224231
}
@@ -258,16 +265,19 @@ describe("Modification", (): void => {
258265
});
259266

260267
test("should fail to perform a captures request", async (): Promise<void> => {
261-
expect.assertions(2);
268+
expect.assertions(4);
262269
const request = createCapturesRequest();
263270
scope.post(`/payments/${invalidPaymentPspReference}/captures`)
264271
.reply(422, invalidModificationResult);
265272
try {
266273
await checkoutAPI.ModificationsApi.captureAuthorisedPayment(invalidPaymentPspReference, request);
267274
} catch (e) {
268275
if(e instanceof HttpClientException) {
269-
if(e.statusCode) expect(e.statusCode).toBe(422);
276+
expect(e.statusCode).toBe(422);
270277
expect(e.message).toContain("Original pspReference required for this operation");
278+
// check apiError
279+
expect(e.apiError).toBeTruthy();
280+
expect(e.apiError?.errorCode).toBe("167");
271281
} else {
272282
fail();
273283
}
@@ -324,16 +334,19 @@ describe("Modification", (): void => {
324334
});
325335

326336
test("should fail to perform a reversals request", async (): Promise<void> => {
327-
expect.assertions(2);
337+
expect.assertions(4);
328338
const request = createReversalsRequest();
329339
scope.post(`/payments/${invalidPaymentPspReference}/reversals`)
330340
.reply(422, invalidModificationResult);
331341
try {
332342
await checkoutAPI.ModificationsApi.refundOrCancelPayment(invalidPaymentPspReference, request);
333343
} catch (e) {
334344
if(e instanceof HttpClientException) {
335-
if(e.statusCode) expect(e.statusCode).toBe(422);
345+
expect(e.statusCode).toBe(422);
336346
expect(e.message).toContain("Original pspReference required for this operation");
347+
// check apiError
348+
expect(e.apiError).toBeTruthy();
349+
expect(e.apiError?.errorCode).toBe("167");
337350
} else {
338351
fail();
339352
}

src/__tests__/notification.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ describe("Notification Test", function (): void {
135135

136136
it("should verify the banking hmac", function (): void {
137137
const jsonString = "{\"data\":{\"balancePlatform\":\"Integration_tools_test\",\"accountId\":\"BA32272223222H5HVKTBK4MLB\",\"sweep\":{\"id\":\"SWPC42272223222H5HVKV6H8C64DP5\",\"schedule\":{\"type\":\"balance\"},\"status\":\"active\",\"targetAmount\":{\"currency\":\"EUR\",\"value\":0},\"triggerAmount\":{\"currency\":\"EUR\",\"value\":0},\"type\":\"pull\",\"counterparty\":{\"balanceAccountId\":\"BA3227C223222H5HVKT3H9WLC\"},\"currency\":\"EUR\"}},\"environment\":\"test\",\"type\":\"balancePlatform.balanceAccountSweep.updated\"}";
138-
const isValid = hmacValidator.validateBankingHMAC("9Qz9S/0xpar1klkniKdshxpAhRKbiSAewPpWoxKefQA=", "D7DD5BA6146493707BF0BE7496F6404EC7A63616B7158EC927B9F54BB436765F", jsonString);
138+
const isValid = hmacValidator.validateHMACSignature("D7DD5BA6146493707BF0BE7496F6404EC7A63616B7158EC927B9F54BB436765F", "9Qz9S/0xpar1klkniKdshxpAhRKbiSAewPpWoxKefQA=", jsonString);
139139
expect(isValid).toBe(true);
140140
});
141141

0 commit comments

Comments
 (0)