diff --git a/src/__mocks__/base.ts b/src/__mocks__/base.ts index 047aeae13..b3865d73f 100644 --- a/src/__mocks__/base.ts +++ b/src/__mocks__/base.ts @@ -18,7 +18,7 @@ */ import Client from "../client"; -import Config, { EnvironmentEnum } from "../config"; +import Config, { EnvironmentEnum, RegionEnum } from "../config"; import { AmountsReq, MessageCategoryType, @@ -38,6 +38,7 @@ import { export const createClient = (apiKey = process.env.ADYEN_API_KEY): Client => { const config: Config = new Config(); config.environment = EnvironmentEnum.TEST; + config.region = RegionEnum.EU; config.terminalApiCloudEndpoint = Client.TERMINAL_API_ENDPOINT_TEST; config.terminalApiLocalEndpoint = "https://mocked_local_endpoint.com"; config.marketPayEndpoint = Client.MARKETPAY_ENDPOINT_TEST; diff --git a/src/__tests__/terminalCloudAPI.spec.ts b/src/__tests__/terminalCloudAPI.spec.ts index d91d92825..5e493cb64 100644 --- a/src/__tests__/terminalCloudAPI.spec.ts +++ b/src/__tests__/terminalCloudAPI.spec.ts @@ -5,7 +5,7 @@ import { syncRefund, syncRes, syncResEventNotification, syncResEventNotification import Client from "../client"; import TerminalCloudAPI from "../services/terminalCloudAPI"; import { terminal } from "../typings"; -import { EnvironmentEnum } from "../config"; +import { EnvironmentEnum, RegionEnum } from "../config"; import HttpClientException from "../httpClient/httpClientException"; let client: Client; @@ -27,6 +27,26 @@ afterEach((): void => { }); describe("Terminal Cloud API", (): void => { + test("should throw error when region is not specified", (): void => { + const clientWithoutRegion = new Client({ + apiKey: "YOUR_API_KEY", + environment: EnvironmentEnum.TEST + }); + + expect(() => new TerminalCloudAPI(clientWithoutRegion)) + .toThrow("Region is required for Terminal API"); + }); + + test("should initialize successfully with region", (): void => { + const clientWithRegion = new Client({ + apiKey: "YOUR_API_KEY", + environment: EnvironmentEnum.TEST, + region: RegionEnum.EU + }); + + expect(() => new TerminalCloudAPI(clientWithRegion)).not.toThrow(); + }); + test("should make an async payment request", async (): Promise => { scope.post("/async").reply(200, asyncRes); @@ -141,7 +161,7 @@ describe("Terminal Cloud API", (): void => { const terminalApiHost = "https://terminal-api-test.adyen.com"; - const client = new Client({ apiKey: "YOUR_API_KEY", environment: EnvironmentEnum.TEST }); + const client = new Client({ apiKey: "YOUR_API_KEY", environment: EnvironmentEnum.TEST, region: RegionEnum.EU }); const terminalCloudAPI = new TerminalCloudAPI(client); const terminalAPIPaymentRequest = createTerminalAPIPaymentRequest(); @@ -168,7 +188,7 @@ describe("Terminal Cloud API", (): void => { test("sync should validate 308 location header", async (): Promise => { const terminalApiHost = "https://terminal-api-test.adyen.com"; - const client = new Client({ apiKey: "YOUR_API_KEY", environment: EnvironmentEnum.TEST }); + const client = new Client({ apiKey: "YOUR_API_KEY", environment: EnvironmentEnum.TEST, region: RegionEnum.EU }); const terminalCloudAPI = new TerminalCloudAPI(client); @@ -203,10 +223,9 @@ describe("Terminal Cloud API", (): void => { }); test("async should skip 308 redirect", async (): Promise => { - const terminalApiHost = "https://terminal-api-test.adyen.com"; - const client = new Client({ apiKey: "YOUR_API_KEY", environment: EnvironmentEnum.TEST, enable308Redirect: false }); + const client = new Client({ apiKey: "YOUR_API_KEY", environment: EnvironmentEnum.TEST, region: RegionEnum.EU, enable308Redirect: false }); const terminalCloudAPI = new TerminalCloudAPI(client); const terminalAPIPaymentRequest = createTerminalAPIPaymentRequest(); diff --git a/src/services/terminalCloudAPI.ts b/src/services/terminalCloudAPI.ts index 5eeaf5111..a6254ba50 100644 --- a/src/services/terminalCloudAPI.ts +++ b/src/services/terminalCloudAPI.ts @@ -32,6 +32,11 @@ class TerminalCloudAPI extends Service { public constructor(client: Client) { super(client); + + if (!client.config.region) { + throw new Error("Region is required for Terminal API"); + } + this.apiKeyRequired = true; this.terminalApiAsync = new Async(this); this.terminalApiSync = new Sync(this);