feat: adiciona validações e testes para métodos do data-consult service
- Adiciona validações para stores(), sellers(), billings(), customers(), getAllProducts(), getAllCarriers() e getRegions() - Valida se dados retornados têm propriedades necessárias - Valida se resultado do repository é array válido - Filtra dados incompletos ou com propriedades inválidas - Refatora testes criando helper para reduzir duplicação - Adiciona testes que expõem problemas e validam correções - Melhora tratamento de erros com logging adequado
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { DataConsultService } from '../data-consult.service';
|
||||
import { DataConsultRepository } from '../data-consult.repository';
|
||||
import { ILogger } from '../../Log/ILogger';
|
||||
import { IRedisClient } from '../../core/configs/cache/IRedisClient';
|
||||
import { RedisClientToken } from '../../core/configs/cache/redis-client.adapter.provider';
|
||||
import { DataSource } from 'typeorm';
|
||||
import { DATA_SOURCE } from '../../core/constants';
|
||||
|
||||
export const createMockRepository = (methods: Partial<DataConsultRepository> = {}) => ({
|
||||
findStores: jest.fn(),
|
||||
findSellers: jest.fn(),
|
||||
findBillings: jest.fn(),
|
||||
findCustomers: jest.fn(),
|
||||
findAllProducts: jest.fn(),
|
||||
findAllCarriers: jest.fn(),
|
||||
findRegions: jest.fn(),
|
||||
...methods,
|
||||
} as any);
|
||||
|
||||
export const createMockLogger = () => ({
|
||||
log: jest.fn(),
|
||||
error: jest.fn(),
|
||||
warn: jest.fn(),
|
||||
debug: jest.fn(),
|
||||
} as any);
|
||||
|
||||
export const createMockRedisClient = () => ({
|
||||
get: jest.fn().mockResolvedValue(null),
|
||||
set: jest.fn().mockResolvedValue(undefined),
|
||||
} as any);
|
||||
|
||||
export interface DataConsultServiceTestContext {
|
||||
service: DataConsultService;
|
||||
mockRepository: jest.Mocked<DataConsultRepository>;
|
||||
mockLogger: jest.Mocked<ILogger>;
|
||||
mockRedisClient: jest.Mocked<IRedisClient>;
|
||||
mockDataSource: jest.Mocked<DataSource>;
|
||||
}
|
||||
|
||||
export async function createDataConsultServiceTestModule(
|
||||
repositoryMethods: Partial<DataConsultRepository> = {},
|
||||
redisClientMethods: Partial<IRedisClient> = {}
|
||||
): Promise<DataConsultServiceTestContext> {
|
||||
const mockRepository = createMockRepository(repositoryMethods);
|
||||
const mockLogger = createMockLogger();
|
||||
const mockRedisClient = { ...createMockRedisClient(), ...redisClientMethods } as any;
|
||||
const mockDataSource = {} as any;
|
||||
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
DataConsultService,
|
||||
{
|
||||
provide: DataConsultRepository,
|
||||
useValue: mockRepository,
|
||||
},
|
||||
{
|
||||
provide: RedisClientToken,
|
||||
useValue: mockRedisClient,
|
||||
},
|
||||
{
|
||||
provide: 'LoggerService',
|
||||
useValue: mockLogger,
|
||||
},
|
||||
{
|
||||
provide: DATA_SOURCE,
|
||||
useValue: mockDataSource,
|
||||
},
|
||||
],
|
||||
}).compile();
|
||||
|
||||
const service = module.get<DataConsultService>(DataConsultService);
|
||||
|
||||
return {
|
||||
service,
|
||||
mockRepository,
|
||||
mockLogger,
|
||||
mockRedisClient,
|
||||
mockDataSource,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user