Skip to content

Commit

Permalink
feat(disbursements): allow referenceId to be optionally supplied as p…
Browse files Browse the repository at this point in the history
…art of transfer payload
  • Loading branch information
iyiolapeter authored and ernest-okot committed Mar 31, 2021
1 parent e9a9d96 commit 9f5108c
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 5 deletions.
8 changes: 6 additions & 2 deletions src/disbursements.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ import {
} from "./common";

export interface TransferRequest {
/**
* Unique Transfer Reference (UUID v4), will be automatically generated if not explicitly supplied
*/
referenceId?: string;
/**
* Amount that will be debited from the payer account.
*/
Expand Down Expand Up @@ -114,10 +118,10 @@ export default class Disbursements {
*/
public transfer({
callbackUrl,
referenceId = uuid(),
...payoutRequest
}: TransferRequest): Promise<string> {
return validateTransfer(payoutRequest).then(() => {
const referenceId: string = uuid();
return validateTransfer({ referenceId, ...payoutRequest }).then(() => {
return this.client
.post<void>("/disbursement/v1_0/transfer", payoutRequest, {
headers: {
Expand Down
4 changes: 3 additions & 1 deletion src/validate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@ export function validateRequestToPay(
export function validateTransfer(
payoutRequest: TransferRequest
): Promise<void> {
const { amount, currency, payee }: TransferRequest = payoutRequest || {};
const { amount, currency, payee, referenceId }: TransferRequest = payoutRequest || {};
return Promise.resolve().then(() => {
strictEqual(isTruthy(referenceId), true, "referenceId is required");
strictEqual(isUuid4(referenceId as string), true, "referenceId must be a valid uuid v4");
strictEqual(isTruthy(amount), true, "amount is required");
strictEqual(isNumeric(amount), true, "amount must be a number");
strictEqual(isTruthy(currency), true, "currency is required");
Expand Down
27 changes: 25 additions & 2 deletions test/validate.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -271,9 +271,27 @@ describe("Validate", function() {
});

describe("validateTransfer", function() {
context("when the amount is missing", function() {
context("when the referenceId is missing", function() {
it("throws an error", function() {
const request = {} as TransferRequest;
return expect(validateTransfer(request)).to.be.rejectedWith(
"referenceId is required"
);
});
});

context("when referenceId is not a valid uuid", function() {
it("throws an error", function () {
const request = { referenceId: "test reference id" } as TransferRequest;
return expect(validateTransfer(request)).to.be.rejectedWith(
"referenceId must be a valid uuid v4"
);
});
});

context("when the amount is missing", function() {
it("throws an error", function() {
const request = { referenceId: uuid() } as TransferRequest;
return expect(validateTransfer(request)).to.be.rejectedWith(
"amount is required"
);
Expand All @@ -282,7 +300,7 @@ describe("Validate", function() {

context("when the amount is not numeric", function() {
it("throws an error", function() {
const request = { amount: "alphabetic" } as TransferRequest;
const request = { referenceId: uuid(), amount: "alphabetic" } as TransferRequest;
return expect(validateTransfer(request)).to.be.rejectedWith(
"amount must be a number"
);
Expand All @@ -292,6 +310,7 @@ describe("Validate", function() {
context("when the currency is missing", function() {
it("throws an error", function() {
const request = {
referenceId: uuid(),
amount: "1000"
} as TransferRequest;
return expect(validateTransfer(request)).to.be.rejectedWith(
Expand All @@ -303,6 +322,7 @@ describe("Validate", function() {
context("when the payee is missing", function() {
it("throws an error", function() {
const request = {
referenceId: uuid(),
amount: "1000",
currency: "UGX"
} as TransferRequest;
Expand All @@ -315,6 +335,7 @@ describe("Validate", function() {
context("when the party id is missing", function() {
it("throws an error", function() {
const request = {
referenceId: uuid(),
amount: "1000",
currency: "UGX",
payee: {}
Expand All @@ -328,6 +349,7 @@ describe("Validate", function() {
context("when the party id type is missing", function() {
it("throws an error", function() {
const request = {
referenceId: uuid(),
amount: "1000",
currency: "UGX",
payee: {
Expand All @@ -343,6 +365,7 @@ describe("Validate", function() {
context("when the request is valid", function() {
it("fulfills", function() {
const request = {
referenceId: uuid(),
amount: "1000",
currency: "UGX",
payee: {
Expand Down

0 comments on commit 9f5108c

Please sign in to comment.