refactor use cases
This commit is contained in:
@@ -6,42 +6,23 @@ describe('PaymentsService', () => {
|
||||
const logger = { debug: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn() };
|
||||
|
||||
function makeService(overrides?: Partial<Record<string, any>>) {
|
||||
const getPaymentsUseCase = overrides?.getPaymentsUseCase ?? { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const createPaymentUseCase = overrides?.createPaymentUseCase ?? { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const getPaymentsUseCase = overrides?.getPaymentsUseCase ?? { execute: vi.fn(async () => Result.ok({ payments: [] })) };
|
||||
const createPaymentUseCase = overrides?.createPaymentUseCase ?? { execute: vi.fn(async () => Result.ok({ paymentId: 'p1' })) };
|
||||
const updatePaymentStatusUseCase =
|
||||
overrides?.updatePaymentStatusUseCase ?? { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
overrides?.updatePaymentStatusUseCase ?? { execute: vi.fn(async () => Result.ok({ success: true })) };
|
||||
const getMembershipFeesUseCase =
|
||||
overrides?.getMembershipFeesUseCase ?? { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
overrides?.getMembershipFeesUseCase ?? { execute: vi.fn(async () => Result.ok({ fee: null, payments: [] })) };
|
||||
const upsertMembershipFeeUseCase =
|
||||
overrides?.upsertMembershipFeeUseCase ?? { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
overrides?.upsertMembershipFeeUseCase ?? { execute: vi.fn(async () => Result.ok({ success: true })) };
|
||||
const updateMemberPaymentUseCase =
|
||||
overrides?.updateMemberPaymentUseCase ?? { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const getPrizesUseCase = overrides?.getPrizesUseCase ?? { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const createPrizeUseCase = overrides?.createPrizeUseCase ?? { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const awardPrizeUseCase = overrides?.awardPrizeUseCase ?? { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const deletePrizeUseCase = overrides?.deletePrizeUseCase ?? { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const getWalletUseCase = overrides?.getWalletUseCase ?? { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
overrides?.updateMemberPaymentUseCase ?? { execute: vi.fn(async () => Result.ok({ success: true })) };
|
||||
const getPrizesUseCase = overrides?.getPrizesUseCase ?? { execute: vi.fn(async () => Result.ok({ prizes: [] })) };
|
||||
const createPrizeUseCase = overrides?.createPrizeUseCase ?? { execute: vi.fn(async () => Result.ok({ success: true })) };
|
||||
const awardPrizeUseCase = overrides?.awardPrizeUseCase ?? { execute: vi.fn(async () => Result.ok({ success: true })) };
|
||||
const deletePrizeUseCase = overrides?.deletePrizeUseCase ?? { execute: vi.fn(async () => Result.ok({ success: true })) };
|
||||
const getWalletUseCase = overrides?.getWalletUseCase ?? { execute: vi.fn(async () => Result.ok({ balance: 0 })) };
|
||||
const processWalletTransactionUseCase =
|
||||
overrides?.processWalletTransactionUseCase ?? { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
|
||||
const getPaymentsPresenter = overrides?.getPaymentsPresenter ?? { getResponseModel: vi.fn(() => ({ payments: [] })) };
|
||||
const createPaymentPresenter =
|
||||
overrides?.createPaymentPresenter ?? { getResponseModel: vi.fn(() => ({ paymentId: 'p1' })) };
|
||||
const updatePaymentStatusPresenter =
|
||||
overrides?.updatePaymentStatusPresenter ?? { getResponseModel: vi.fn(() => ({ success: true })) };
|
||||
|
||||
const getMembershipFeesPresenter = overrides?.getMembershipFeesPresenter ?? { viewModel: { fee: null, payments: [] } };
|
||||
const upsertMembershipFeePresenter = overrides?.upsertMembershipFeePresenter ?? { viewModel: { success: true } };
|
||||
const updateMemberPaymentPresenter = overrides?.updateMemberPaymentPresenter ?? { viewModel: { success: true } };
|
||||
|
||||
const getPrizesPresenter = overrides?.getPrizesPresenter ?? { viewModel: { prizes: [] } };
|
||||
const createPrizePresenter = overrides?.createPrizePresenter ?? { viewModel: { success: true } };
|
||||
const awardPrizePresenter = overrides?.awardPrizePresenter ?? { viewModel: { success: true } };
|
||||
const deletePrizePresenter = overrides?.deletePrizePresenter ?? { viewModel: { success: true } };
|
||||
|
||||
const getWalletPresenter = overrides?.getWalletPresenter ?? { viewModel: { balance: 0 } };
|
||||
const processWalletTransactionPresenter =
|
||||
overrides?.processWalletTransactionPresenter ?? { viewModel: { success: true } };
|
||||
overrides?.processWalletTransactionUseCase ?? { execute: vi.fn(async () => Result.ok({ success: true })) };
|
||||
|
||||
const service = new PaymentsService(
|
||||
getPaymentsUseCase as any,
|
||||
@@ -57,18 +38,6 @@ describe('PaymentsService', () => {
|
||||
getWalletUseCase as any,
|
||||
processWalletTransactionUseCase as any,
|
||||
logger as any,
|
||||
getPaymentsPresenter as any,
|
||||
createPaymentPresenter as any,
|
||||
updatePaymentStatusPresenter as any,
|
||||
getMembershipFeesPresenter as any,
|
||||
upsertMembershipFeePresenter as any,
|
||||
updateMemberPaymentPresenter as any,
|
||||
getPrizesPresenter as any,
|
||||
createPrizePresenter as any,
|
||||
awardPrizePresenter as any,
|
||||
deletePrizePresenter as any,
|
||||
getWalletPresenter as any,
|
||||
processWalletTransactionPresenter as any,
|
||||
);
|
||||
|
||||
return {
|
||||
@@ -85,26 +54,13 @@ describe('PaymentsService', () => {
|
||||
deletePrizeUseCase,
|
||||
getWalletUseCase,
|
||||
processWalletTransactionUseCase,
|
||||
getPaymentsPresenter,
|
||||
createPaymentPresenter,
|
||||
updatePaymentStatusPresenter,
|
||||
getMembershipFeesPresenter,
|
||||
upsertMembershipFeePresenter,
|
||||
updateMemberPaymentPresenter,
|
||||
getPrizesPresenter,
|
||||
createPrizePresenter,
|
||||
awardPrizePresenter,
|
||||
deletePrizePresenter,
|
||||
getWalletPresenter,
|
||||
processWalletTransactionPresenter,
|
||||
};
|
||||
}
|
||||
|
||||
it('getPayments returns presenter model on success', async () => {
|
||||
const { service, getPaymentsUseCase, getPaymentsPresenter } = makeService();
|
||||
const { service, getPaymentsUseCase } = makeService();
|
||||
await expect(service.getPayments({ leagueId: 'l1' } as any)).resolves.toEqual({ payments: [] });
|
||||
expect(getPaymentsUseCase.execute).toHaveBeenCalledWith({ leagueId: 'l1' });
|
||||
expect(getPaymentsPresenter.getResponseModel).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('getPayments throws when use case returns error (code message)', async () => {
|
||||
@@ -115,12 +71,9 @@ describe('PaymentsService', () => {
|
||||
});
|
||||
|
||||
it('createPayment returns presenter model on success', async () => {
|
||||
const { service, createPaymentUseCase, createPaymentPresenter } = makeService({
|
||||
createPaymentPresenter: { getResponseModel: vi.fn(() => ({ paymentId: 'p1' })) },
|
||||
});
|
||||
const { service, createPaymentUseCase } = makeService();
|
||||
await expect(service.createPayment({ leagueId: 'l1' } as any)).resolves.toEqual({ paymentId: 'p1' });
|
||||
expect(createPaymentUseCase.execute).toHaveBeenCalledWith({ leagueId: 'l1' });
|
||||
expect(createPaymentPresenter.getResponseModel).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('createPayment throws when use case returns error', async () => {
|
||||
@@ -131,12 +84,9 @@ describe('PaymentsService', () => {
|
||||
});
|
||||
|
||||
it('updatePaymentStatus returns presenter model on success', async () => {
|
||||
const { service, updatePaymentStatusUseCase, updatePaymentStatusPresenter } = makeService({
|
||||
updatePaymentStatusPresenter: { getResponseModel: vi.fn(() => ({ success: true })) },
|
||||
});
|
||||
const { service, updatePaymentStatusUseCase } = makeService();
|
||||
await expect(service.updatePaymentStatus({ paymentId: 'p1' } as any)).resolves.toEqual({ success: true });
|
||||
expect(updatePaymentStatusUseCase.execute).toHaveBeenCalledWith({ paymentId: 'p1' });
|
||||
expect(updatePaymentStatusPresenter.getResponseModel).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('updatePaymentStatus throws when use case returns error', async () => {
|
||||
@@ -147,8 +97,8 @@ describe('PaymentsService', () => {
|
||||
});
|
||||
|
||||
it('getMembershipFees returns viewModel on success', async () => {
|
||||
const { service, getMembershipFeesUseCase, getMembershipFeesPresenter } = makeService({
|
||||
getMembershipFeesPresenter: { viewModel: { fee: { amount: 1 }, payments: [] } },
|
||||
const { service, getMembershipFeesUseCase } = makeService({
|
||||
getMembershipFeesUseCase: { execute: vi.fn(async () => Result.ok({ fee: { amount: 1 }, payments: [] })) }
|
||||
});
|
||||
|
||||
await expect(service.getMembershipFees({ leagueId: 'l1', driverId: 'd1' } as any)).resolves.toEqual({
|
||||
@@ -156,7 +106,6 @@ describe('PaymentsService', () => {
|
||||
payments: [],
|
||||
});
|
||||
expect(getMembershipFeesUseCase.execute).toHaveBeenCalledWith({ leagueId: 'l1', driverId: 'd1' });
|
||||
expect(getMembershipFeesPresenter.viewModel).toBeDefined();
|
||||
});
|
||||
|
||||
it('getMembershipFees throws when use case returns error', async () => {
|
||||
@@ -167,9 +116,7 @@ describe('PaymentsService', () => {
|
||||
});
|
||||
|
||||
it('upsertMembershipFee returns viewModel on success', async () => {
|
||||
const { service, upsertMembershipFeeUseCase } = makeService({
|
||||
upsertMembershipFeePresenter: { viewModel: { success: true } },
|
||||
});
|
||||
const { service, upsertMembershipFeeUseCase } = makeService();
|
||||
|
||||
await expect(service.upsertMembershipFee({ leagueId: 'l1' } as any)).resolves.toEqual({ success: true });
|
||||
expect(upsertMembershipFeeUseCase.execute).toHaveBeenCalledWith({ leagueId: 'l1' });
|
||||
@@ -186,9 +133,7 @@ describe('PaymentsService', () => {
|
||||
});
|
||||
|
||||
it('updateMemberPayment returns viewModel on success', async () => {
|
||||
const { service, updateMemberPaymentUseCase } = makeService({
|
||||
updateMemberPaymentPresenter: { viewModel: { success: true } },
|
||||
});
|
||||
const { service, updateMemberPaymentUseCase } = makeService();
|
||||
|
||||
await expect(service.updateMemberPayment({ leagueId: 'l1' } as any)).resolves.toEqual({ success: true });
|
||||
expect(updateMemberPaymentUseCase.execute).toHaveBeenCalledWith({ leagueId: 'l1' });
|
||||
@@ -203,10 +148,9 @@ describe('PaymentsService', () => {
|
||||
});
|
||||
|
||||
it('getPrizes maps seasonId optional', async () => {
|
||||
const getPrizesUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const getPrizesUseCase = { execute: vi.fn(async () => Result.ok({ prizes: [] })) };
|
||||
const { service } = makeService({
|
||||
getPrizesUseCase,
|
||||
getPrizesPresenter: { viewModel: { prizes: [] } },
|
||||
});
|
||||
|
||||
await expect(service.getPrizes({ leagueId: 'l1' } as any)).resolves.toEqual({ prizes: [] });
|
||||
@@ -217,10 +161,9 @@ describe('PaymentsService', () => {
|
||||
});
|
||||
|
||||
it('createPrize calls use case and returns viewModel', async () => {
|
||||
const createPrizeUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const createPrizeUseCase = { execute: vi.fn(async () => Result.ok({ success: true })) };
|
||||
const { service } = makeService({
|
||||
createPrizeUseCase,
|
||||
createPrizePresenter: { viewModel: { success: true } },
|
||||
});
|
||||
|
||||
await expect(service.createPrize({ leagueId: 'l1' } as any)).resolves.toEqual({ success: true });
|
||||
@@ -228,10 +171,9 @@ describe('PaymentsService', () => {
|
||||
});
|
||||
|
||||
it('awardPrize calls use case and returns viewModel', async () => {
|
||||
const awardPrizeUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const awardPrizeUseCase = { execute: vi.fn(async () => Result.ok({ success: true })) };
|
||||
const { service } = makeService({
|
||||
awardPrizeUseCase,
|
||||
awardPrizePresenter: { viewModel: { success: true } },
|
||||
});
|
||||
|
||||
await expect(service.awardPrize({ prizeId: 'p1' } as any)).resolves.toEqual({ success: true });
|
||||
@@ -239,10 +181,9 @@ describe('PaymentsService', () => {
|
||||
});
|
||||
|
||||
it('deletePrize calls use case and returns viewModel', async () => {
|
||||
const deletePrizeUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const deletePrizeUseCase = { execute: vi.fn(async () => Result.ok({ success: true })) };
|
||||
const { service } = makeService({
|
||||
deletePrizeUseCase,
|
||||
deletePrizePresenter: { viewModel: { success: true } },
|
||||
});
|
||||
|
||||
await expect(service.deletePrize({ prizeId: 'p1' } as any)).resolves.toEqual({ success: true });
|
||||
@@ -250,10 +191,9 @@ describe('PaymentsService', () => {
|
||||
});
|
||||
|
||||
it('getWallet calls use case and returns viewModel', async () => {
|
||||
const getWalletUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const getWalletUseCase = { execute: vi.fn(async () => Result.ok({ balance: 10 })) };
|
||||
const { service } = makeService({
|
||||
getWalletUseCase,
|
||||
getWalletPresenter: { viewModel: { balance: 10 } },
|
||||
});
|
||||
|
||||
await expect(service.getWallet({ leagueId: 'l1' } as any)).resolves.toEqual({ balance: 10 });
|
||||
@@ -261,10 +201,9 @@ describe('PaymentsService', () => {
|
||||
});
|
||||
|
||||
it('processWalletTransaction calls use case and returns viewModel', async () => {
|
||||
const processWalletTransactionUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const processWalletTransactionUseCase = { execute: vi.fn(async () => Result.ok({ success: true })) };
|
||||
const { service } = makeService({
|
||||
processWalletTransactionUseCase,
|
||||
processWalletTransactionPresenter: { viewModel: { success: true } },
|
||||
});
|
||||
|
||||
await expect(service.processWalletTransaction({ leagueId: 'l1' } as any)).resolves.toEqual({ success: true });
|
||||
|
||||
Reference in New Issue
Block a user