feat: added update split transaction

This commit is contained in:
Brian Pooe 2023-07-16 18:58:46 +02:00
parent 363411d2b3
commit 02cb054bb9
7 changed files with 132 additions and 28 deletions

View file

@ -3,3 +3,5 @@ export * from './ps-create-split-response.model';
export * from './ps-list-split-request.model';
export * from './ps-list-split-response.model';
export * from './ps-fetch-split-response.model';
export * from './ps-update-split-request.model';
export * from './ps-update-split-response.model';

View file

@ -1,4 +1,4 @@
import { PsBaseModel } from '../';
import { PsBaseModel, PsSubaccountsEntityModel } from '../';
export interface PsFetchSplitResponseModel extends PsBaseModel {
data: PsFetchSplitResponseDataModel;
@ -17,25 +17,6 @@ export interface PsFetchSplitResponseDataModel {
bearer_subaccount: number;
created_at: string;
updated_at: string;
subaccounts?: SubaccountsEntity[] | null;
subaccounts?: PsSubaccountsEntityModel[] | null;
total_subaccounts: number;
}
export interface SubaccountsEntity {
subaccount: Subaccount;
share: number;
}
export interface Subaccount {
id: number;
subaccount_code: string;
business_name: string;
description: string;
primary_contact_name?: null;
primary_contact_email?: null;
primary_contact_phone?: null;
metadata?: null;
percentage_charge: number;
settlement_bank: string;
account_number: string;
}

View file

@ -1,4 +1,4 @@
import { PsBaseModel, SubaccountsEntity } from '../';
import { PsBaseModel, PsSubaccountsEntityModel } from '../common';
export interface PsListSplitResponseModel extends PsBaseModel {
data: PsListSplitResponseDataModel[];
@ -17,6 +17,6 @@ export interface PsListSplitResponseDataModel {
bearer_subaccount: number;
created_at: string;
updated_at: string;
subaccounts?: SubaccountsEntity[] | null;
subaccounts?: PsSubaccountsEntityModel[] | null;
total_subaccounts: number;
}

View file

@ -0,0 +1,6 @@
export interface PsUpdateSplitRequestModel {
name: string;
active: boolean;
bearer_type?: string;
bearer_subaccount?: string;
}

View file

@ -0,0 +1,22 @@
import { PsBaseModel, PsSubaccountsEntityModel } from '../common';
export interface PsUpdateSplitResponseModel extends PsBaseModel {
data: PsUpdateSplitResponseDataModel;
}
export interface PsUpdateSplitResponseDataModel {
id: number;
name: string;
type: string;
currency: string;
integration: number;
domain: string;
split_code: string;
active: boolean;
bearer_type: string;
bearer_subaccount?: null;
createdAt: string;
updatedAt: string;
subaccounts?: PsSubaccountsEntityModel[] | null;
total_subaccounts: number;
}

View file

@ -5,13 +5,17 @@ import {
PsCreateSplitRequestModel,
PsCreateSplitResponseModel,
PsListSplitRequestModel,
PsListSplitResponseModel
PsListSplitResponseModel,
PsUpdateSplitRequestModel
} from '../../models';
import { of } from 'rxjs';
import { AxiosResponse } from 'axios';
import { fromPartial } from '@total-typescript/shoehorn';
import { subscribeSpyTo } from '@hirez_io/observer-spy';
import { PsFetchSplitResponseModel } from '../../models/transaction-split/ps-fetch-split-response.model';
import {
PsUpdateSplitResponseModel,
PsFetchSplitResponseModel
} from '../../models';
describe(PsTransactionSplitService.name, () => {
let service: PsTransactionSplitService;
@ -126,7 +130,7 @@ describe(PsTransactionSplitService.name, () => {
const response: AxiosResponse<PsListSplitResponseModel> = fromPartial({
data: fromPartial({
status: true,
message: 'Split created',
message: 'Split retrieved',
data: [
{
id: 143,
@ -197,7 +201,7 @@ describe(PsTransactionSplitService.name, () => {
const response: AxiosResponse<PsFetchSplitResponseModel> = fromPartial({
data: fromPartial({
status: true,
message: 'Split created',
message: 'Split retrieved',
data: {
id: 143,
name: 'Test Doc',
@ -258,4 +262,77 @@ describe(PsTransactionSplitService.name, () => {
expect(observerSpy.getLastValue()).toEqual(response.data);
});
});
describe('updateSplit', () => {
it('should return update split by id', () => {
// Arrange
const input: PsUpdateSplitRequestModel = {
name: 'update Split',
active: true
};
const id = '143';
const response: AxiosResponse<PsUpdateSplitResponseModel> = fromPartial({
data: fromPartial({
status: true,
message: 'Split group updated',
data: {
id: 142,
name: 'Test Doc',
type: 'percentage',
currency: 'NGN',
integration: 428626,
domain: 'test',
split_code: 'SPL_e7jnRLtzla',
active: true,
bearer_type: 'subaccount',
createdAt: '2020-06-30T11:42:29.150Z',
updatedAt: '2020-06-30T11:42:29.150Z',
subaccounts: [
{
subaccount: {
id: 40809,
subaccount_code: 'ACCT_z3x6z3nbo14xsil',
business_name: 'Business Name',
description: 'Business Description',
primary_contact_name: null,
primary_contact_email: null,
primary_contact_phone: null,
metadata: null,
percentage_charge: 20,
settlement_bank: 'Business Bank',
account_number: '1234567890'
},
share: 20
},
{
subaccount: {
id: 40809,
subaccount_code: 'ACCT_pwwualwty4nhq9d',
business_name: 'Business Name',
description: 'Business Description',
primary_contact_name: null,
primary_contact_email: null,
primary_contact_phone: null,
metadata: null,
percentage_charge: 20,
settlement_bank: 'Business Bank',
account_number: '0123456789'
},
share: 30
}
],
total_subaccounts: 2
}
})
});
httpService.put.mockReturnValueOnce(of(response));
// Act
const observerSpy = subscribeSpyTo(service.updateSplit(id, input));
// Assert
expect(observerSpy.getLastValue()).toEqual(response.data);
});
});
});

View file

@ -6,9 +6,11 @@ import {
PsCreateSplitResponseModel,
PsListSplitRequestModel,
PsListSplitResponseModel,
PsFetchSplitResponseModel
PsFetchSplitResponseModel,
PsUpdateSplitRequestModel
} from '../../models';
import { Observable } from 'rxjs';
import { PsUpdateSplitResponseModel } from '../../models/transaction-split/ps-update-split-response.model';
@Injectable()
export class PsTransactionSplitService {
@ -49,4 +51,18 @@ export class PsTransactionSplitService {
.get<PsListSplitResponseModel>(`split/${id}`)
.pipe(handleResponseAndError());
}
/**
* Update a transaction split details
* @param id -The id of the split
* @param payload
*/
updateSplit(
id: string,
payload: PsUpdateSplitRequestModel
): Observable<PsUpdateSplitResponseModel> {
return this.httpService
.put<PsUpdateSplitResponseModel>(`split/${id}`, payload)
.pipe(handleResponseAndError());
}
}