diff --git a/example/additional_services/subscription.ts b/example/additional_services/subscription.ts index 7c53622d..13e7e73f 100644 --- a/example/additional_services/subscription.ts +++ b/example/additional_services/subscription.ts @@ -2,27 +2,26 @@ import buckaroo from '../buckarooClient'; const subscription = buckaroo.method('subscriptions'); -subscription - .create({ - additionalParameters: { - signature: 'XXXXXXXX' +subscription.create({ + additionalParameters: { + signature: 'XXXXXXXX', + }, + ratePlans: { + add: { + startDate: '2024-07-23', + ratePlanCode: 'XXXXXXXX', }, - ratePlans: { - add: { - startDate: '2024-07-23', - ratePlanCode: 'XXXXXXXX' - } + }, + ratePlanCharges: { + add: { + ratePlanChargeCode: 'XXXXXXXX', }, - ratePlanCharges: { - add: { - ratePlanChargeCode: 'XXXXXXXX' - } - }, - configurationCode: 'XXXXXXXX', - configuration: { - name: 'XXXXXXXX' - }, - debtor: { - code: 'XXXXXXXX' - } - }) \ No newline at end of file + }, + configurationCode: 'XXXXXXXX', + configuration: { + name: 'XXXXXXXX', + }, + debtor: { + code: 'XXXXXXXX', + }, +}); diff --git a/src/Models/Response/HttpClientResponse.ts b/src/Models/Response/HttpClientResponse.ts index 8f9ef95f..d201ea82 100644 --- a/src/Models/Response/HttpClientResponse.ts +++ b/src/Models/Response/HttpClientResponse.ts @@ -9,6 +9,10 @@ export interface HttpResponseConstructor { export interface IHttpClientResponse { httpResponse: AxiosResponse; + data: object; + rawData: string; + + validateResponse(credentials: ICredentials): boolean; } export class HttpClientResponse implements IHttpClientResponse { diff --git a/src/Request/Request.ts b/src/Request/Request.ts index a16b2336..c4091f86 100644 --- a/src/Request/Request.ts +++ b/src/Request/Request.ts @@ -65,7 +65,7 @@ export default class Request< data: T ): T extends IService[] ? Request - : Request { + : Request { if (Array.isArray(data)) { return new Request( type + `/Specifications`, @@ -96,7 +96,7 @@ export default class Request< } request(options: RequestConfig = {}) { - let data = (this._httpMethod === HttpMethods.GET ? {} : this._data) ?? {}; + let data = (this._httpMethod === HttpMethods.GET ? {} : this.data) ?? {}; this.setAuthorizationHeader(data); return Buckaroo.Client.httpClient.sendRequest( this.url, diff --git a/src/Services/ActiveSubscriptions.ts b/src/Services/ActiveSubscriptions.ts index 6f0853e3..b914b0c7 100644 --- a/src/Services/ActiveSubscriptions.ts +++ b/src/Services/ActiveSubscriptions.ts @@ -1,41 +1,45 @@ -import {DataRequestData, Request} from "../Request"; -import {HttpMethods, RequestTypes} from "../Constants"; -import {ITransactionResponse, ServiceList, TransactionResponse} from "../Models"; -export default class ActiveSubscriptions { +import { DataRequestData, Request } from '../Request'; +import { HttpMethods, RequestTypes } from '../Constants'; +import { ITransactionResponse, ServiceList, TransactionResponse } from '../Models'; + +export interface IActiveSubscription { + serviceCode: string; + currencies: string[]; +} + +export default class ActiveSubscriptions extends Request { private readonly _serviceCode: string = 'GetActiveSubscriptions'; - async get(){ - return this.buildRequest().request().then((response) => { + constructor() { + super(RequestTypes.Data, HttpMethods.POST, new DataRequestData(), TransactionResponse); + } + async get() { + this.data.setServiceList( + new ServiceList({ + name: this._serviceCode, + version: 1, + action: this._serviceCode, + }) + ); + return this.request().then((response) => { return this.format(response.data); }); } - private buildRequest(){ - const data = new DataRequestData().setServiceList(new ServiceList({ - name: this._serviceCode, - version: 1, - action: this._serviceCode, - })); - return new Request(RequestTypes.Data, HttpMethods.POST,data,TransactionResponse) - } - private format(data:ITransactionResponse){ - let activeSubscriptions:IActiveSubscription[] = [] - const xmlData = data.services?.[0].parameters[0].value; - if(typeof xmlData === 'string'){ + private format(data: ITransactionResponse) { + let activeSubscriptions: IActiveSubscription[] = []; + const xmlData = data.services?.[0].parameters[0].value; + if (typeof xmlData === 'string') { let parseString = require('xml2js').parseString; - parseString(xmlData,function (err:any, result:any) { - activeSubscriptions = result['ArrayOfServiceCurrencies']['ServiceCurrencies'].map((service:any) => { + parseString(xmlData, function (err: any, result: Record) { + activeSubscriptions = result['ArrayOfServiceCurrencies']['ServiceCurrencies'].map((service: any) => { return { serviceCode: service['ServiceCode'][0], - currencies: service['Currencies'][0]['string'] - } + currencies: service['Currencies'][0]['string'], + }; }); }); } - return activeSubscriptions + return activeSubscriptions; } } -export interface IActiveSubscription { - serviceCode: string; - currencies: string[]; -} \ No newline at end of file diff --git a/src/Services/index.ts b/src/Services/index.ts index 283136e5..5596d78c 100644 --- a/src/Services/index.ts +++ b/src/Services/index.ts @@ -1,4 +1,5 @@ export * from './PayablePaymentMethod'; +export { default as ActiveSubscriptions } from './ActiveSubscriptions'; export { default as PaymentMethod } from './PaymentMethod'; export { default as PayablePaymentMethod } from './PayablePaymentMethod'; -export { default as TransactionService } from './TransactionService'; \ No newline at end of file +export { default as TransactionService } from './TransactionService'; diff --git a/src/buckaroo.ts b/src/buckaroo.ts index 0f27956f..8b9cf407 100644 --- a/src/buckaroo.ts +++ b/src/buckaroo.ts @@ -2,9 +2,8 @@ import { getMethod, IConfig, ICredentials, PaymentMethodInstance, ServiceCode } import { HttpsClient, Request } from './Request'; import { Agent } from 'https'; import NoService from './PaymentMethods/NoService'; -import { TransactionService } from './Services'; +import { ActiveSubscriptions, TransactionService } from './Services'; import { Credentials } from './Handlers'; -import ActiveSubscriptions from "./Services/ActiveSubscriptions"; export default class Buckaroo { private static _client: Buckaroo; @@ -65,9 +64,10 @@ export default class Buckaroo { transaction(key: string) { return new TransactionService(key); } + getActiveSubscriptions() { return new ActiveSubscriptions().get(); } } -export { Buckaroo }; \ No newline at end of file +export { Buckaroo }; diff --git a/tests/ActiveSubscriptions.test.ts b/tests/ActiveSubscriptions.test.ts deleted file mode 100644 index 3ea01f42..00000000 --- a/tests/ActiveSubscriptions.test.ts +++ /dev/null @@ -1,9 +0,0 @@ -import client from './BuckarooClient.test'; - -describe('Testing Buckaroo Client', () => { - test('Get active subscriptions', async () => { - await client.getActiveSubscriptions().then((response) => { - expect(response).toBeDefined(); - }); - }); -}) \ No newline at end of file diff --git a/tests/Client.test.ts b/tests/Client.test.ts index d4880e4e..05157f99 100644 --- a/tests/Client.test.ts +++ b/tests/Client.test.ts @@ -42,7 +42,7 @@ describe('Testing Buckaroo Client', () => { }); }); describe('Transaction', () => { - const transactionService = client.transaction('39F3EC520A3F4A25B0A1899D4FF0E1CB'); + const transactionService = client.transaction('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'); test('transaction Status', async () => { await transactionService .status() @@ -65,4 +65,12 @@ describe('Testing Buckaroo Client', () => { }); }); }); + + describe('Active Subscription', () => { + test('Get', async () => { + await client.getActiveSubscriptions().then((response) => { + expect(response).toBeDefined(); + }); + }); + }); }); diff --git a/tests/PaymentMethods/Subscriptions.test.ts b/tests/PaymentMethods/Subscriptions.test.ts index ce76498b..8e3278a1 100644 --- a/tests/PaymentMethods/Subscriptions.test.ts +++ b/tests/PaymentMethods/Subscriptions.test.ts @@ -3,37 +3,38 @@ import buckarooClientTest from '../BuckarooClient.test'; const subscription = buckarooClientTest.method('subscriptions'); describe('Subscription methods', () => { - test('Create', async () => { + test('Create', () => { return subscription .create({ additionalParameters: { - signature: 'XXXXXXXX' + signature: 'XXXXXXXX', }, ratePlans: { add: { startDate: '2024-07-23', - ratePlanCode: 'XXXXXXXX' - } + ratePlanCode: 'XXXXXXXX', + }, }, ratePlanCharges: { add: { - ratePlanChargeCode: 'XXXXXXXX' - } + ratePlanChargeCode: 'XXXXXXXX', + }, }, configurationCode: 'XXXXXXXX', configuration: { - name: 'XXXXXXXX' + name: 'XXXXXXXX', }, debtor: { - code: 'XXXXXXXX' - } + code: 'XXXXXXXX', + }, }) - .request().then((data) => { + .request() + .then((data) => { expect(data.hasError()).toBeTruthy(); }); }); test('Update', async () => { - return subscription + subscription .update({ email: 'test@buckaroo.nl', subscriptionGuid: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', @@ -85,7 +86,7 @@ describe('Subscription methods', () => { country: 'NL', }, }); - return subscription + subscription .combine('ideal') .pay({ issuer: 'ABNANL2A', @@ -101,7 +102,7 @@ describe('Subscription methods', () => { subscription.updateCombined({ subscriptionGuid: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', }); - return subscription + subscription .combine('ideal') .pay({ issuer: 'ABNANL2A', @@ -113,21 +114,27 @@ describe('Subscription methods', () => { }); }); test('Stop Subscription', async () => { - return subscription.stop({ - subscriptionGuid: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', - }).request().then((res) => { - expect(res.httpResponse.status === 200).toBeTruthy(); - }); + subscription + .stop({ + subscriptionGuid: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', + }) + .request() + .then((res) => { + expect(res.httpResponse.status === 200).toBeTruthy(); + }); }); test('Subscription Info', async () => { - return await subscription.info({ - subscriptionGuid: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', - }).request().then((res) => { - expect(res.httpResponse.status === 200).toBeTruthy(); - }); + await subscription + .info({ + subscriptionGuid: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', + }) + .request() + .then((res) => { + expect(res.httpResponse.status === 200).toBeTruthy(); + }); }); test('Delete Subscription Config', async () => { - return subscription + subscription .deletePaymentConfig({ subscriptionGuid: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', }) @@ -137,19 +144,25 @@ describe('Subscription methods', () => { }); }); test('Subscription Pause', async () => { - return subscription.pause({ - subscriptionGuid: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', - resumeDate: '2030-01-01', - }).request().then((res) => { - expect(res.httpResponse.status === 200).toBeTruthy(); - }) + subscription + .pause({ + subscriptionGuid: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', + resumeDate: '2030-01-01', + }) + .request() + .then((res) => { + expect(res.httpResponse.status === 200).toBeTruthy(); + }); }); test('Subscription Resume', async () => { - return subscription.resume({ - resumeDate: '2030-01-01', - subscriptionGuid: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', - }).request().then((res) => { - expect(res.httpResponse.status === 200).toBeTruthy(); - }); + subscription + .resume({ + resumeDate: '2030-01-01', + subscriptionGuid: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', + }) + .request() + .then((res) => { + expect(res.httpResponse.status === 200).toBeTruthy(); + }); }); });