refactor use cases
This commit is contained in:
@@ -7,12 +7,11 @@ import {
|
||||
} from './GetUserFeedUseCase';
|
||||
import type { IFeedRepository } from '../../domain/repositories/IFeedRepository';
|
||||
import type { FeedItem } from '../../domain/types/FeedItem';
|
||||
import type { Logger, UseCaseOutputPort } from '@core/shared/application';
|
||||
import type { Logger } from '@core/shared/application';
|
||||
|
||||
describe('GetUserFeedUseCase', () => {
|
||||
let feedRepository: IFeedRepository & { getFeedForDriver: Mock };
|
||||
let logger: Logger & { debug: Mock; info: Mock; warn: Mock; error: Mock };
|
||||
let output: UseCaseOutputPort<GetUserFeedResult> & { present: Mock };
|
||||
let useCase: GetUserFeedUseCase;
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -28,14 +27,10 @@ describe('GetUserFeedUseCase', () => {
|
||||
error: vi.fn(),
|
||||
} as unknown as Logger & { debug: Mock; info: Mock; warn: Mock; error: Mock };
|
||||
|
||||
output = {
|
||||
present: vi.fn(),
|
||||
} as unknown as UseCaseOutputPort<GetUserFeedResult> & { present: Mock };
|
||||
|
||||
useCase = new GetUserFeedUseCase(feedRepository, logger, output);
|
||||
useCase = new GetUserFeedUseCase(feedRepository, logger);
|
||||
});
|
||||
|
||||
it('presents feed items when repository returns items', async () => {
|
||||
it('returns feed items when repository returns items', async () => {
|
||||
const items: FeedItem[] = [
|
||||
{
|
||||
id: 'item-1',
|
||||
@@ -65,29 +60,26 @@ describe('GetUserFeedUseCase', () => {
|
||||
const result = await useCase.execute(input);
|
||||
|
||||
expect(result.isOk()).toBe(true);
|
||||
expect(result.unwrap()).toBeUndefined();
|
||||
const feedResult = result.unwrap();
|
||||
|
||||
expect(feedRepository.getFeedForDriver).toHaveBeenCalledTimes(1);
|
||||
expect(feedRepository.getFeedForDriver).toHaveBeenCalledWith('driver-1', 10);
|
||||
|
||||
expect(output.present).toHaveBeenCalledTimes(1);
|
||||
const presented = (output.present as Mock).mock.calls[0]![0] as GetUserFeedResult;
|
||||
expect(presented.items).toEqual(items);
|
||||
expect(feedResult.items).toEqual(items);
|
||||
|
||||
expect(logger.warn).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('warns and presents empty list when no items exist', async () => {
|
||||
it('returns empty list when no items exist', async () => {
|
||||
feedRepository.getFeedForDriver.mockResolvedValue([]);
|
||||
|
||||
const input: GetUserFeedInput = { driverId: 'driver-1' };
|
||||
const result = await useCase.execute(input);
|
||||
|
||||
expect(result.isOk()).toBe(true);
|
||||
expect(output.present).toHaveBeenCalledTimes(1);
|
||||
const feedResult = result.unwrap();
|
||||
|
||||
const presented = (output.present as Mock).mock.calls[0]![0] as GetUserFeedResult;
|
||||
expect(presented.items).toEqual([]);
|
||||
expect(feedResult.items).toEqual([]);
|
||||
|
||||
expect(logger.warn).toHaveBeenCalledTimes(1);
|
||||
expect((logger.warn as Mock).mock.calls[0]![0]).toBe(
|
||||
@@ -107,7 +99,6 @@ describe('GetUserFeedUseCase', () => {
|
||||
expect(err.code).toBe('REPOSITORY_ERROR');
|
||||
expect(err.details.message).toBe('DB error');
|
||||
|
||||
expect(output.present).not.toHaveBeenCalled();
|
||||
expect(logger.error).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user