refactor: atualiza orders repository e remove documentação de cobertura de testes
This commit is contained in:
@@ -1,273 +0,0 @@
|
||||
# Cobertura de Testes - O que ainda pode ser testado
|
||||
|
||||
## 📊 Resumo Atual
|
||||
|
||||
**Testes existentes:**
|
||||
- ✅ `DataConsultService` - stores, sellers, billings, customers, products, getAllProducts, getAllCarriers, getRegions
|
||||
- ✅ `ProductsService` - getProductDetails (busca por codauxiliar)
|
||||
- ✅ `OrdersService` - findOrders
|
||||
- ✅ `DebService` - findByCpfCgcent
|
||||
- ✅ `AuthService` - createToken, createTokenPair, refreshAccessToken, logout
|
||||
|
||||
**Total:** 10 suites de teste, 168 testes passando
|
||||
|
||||
---
|
||||
|
||||
## 🔴 Métodos sem testes
|
||||
|
||||
### 1. ProductsService
|
||||
|
||||
#### `productsValidation`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Busca por codauxiliar
|
||||
- Busca por codprod
|
||||
- Busca por descricao
|
||||
- Busca por todos (tipoBusca = 'todos')
|
||||
- Produto não encontrado (lança HttpException)
|
||||
- Processamento de imagens (com e sem separador `;`)
|
||||
- Imagens null/undefined (retorna array vazio)
|
||||
- Diferentes tipos de produto (AUTOSSERVICO, SHOWROOM, ELETROMOVEIS, OUTROS)
|
||||
|
||||
#### `exposedProduct`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Criação de produto exposto com sucesso
|
||||
- Rollback em caso de erro
|
||||
- Validação de dados de entrada
|
||||
- Tratamento de erros de transação
|
||||
|
||||
#### `getProductDetails` (busca por codprod)
|
||||
- **Status:** ⚠️ Parcial (só tem busca por codauxiliar)
|
||||
- **O que testar:**
|
||||
- Busca por codprod
|
||||
- Busca por codprod e codauxiliar juntos
|
||||
- Validação de parâmetros
|
||||
|
||||
#### `unifiedProductSearch`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Busca por código numérico (codprod e codauxiliar)
|
||||
- Busca por nome/descrição
|
||||
- Termo de busca vazio (lança exceção)
|
||||
- Formatação de preço
|
||||
- Remoção de caracteres não numéricos
|
||||
|
||||
#### `getRotinaA4`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Busca por codprod
|
||||
- Busca por codauxiliar
|
||||
- Busca por codprod e codauxiliar juntos
|
||||
- Validação quando nenhum é informado
|
||||
- Formatação de valores (PRECO_NORMAL, VALOR_VENDA, DECIMAL_VENDA)
|
||||
|
||||
#### `formatarMoedaBrasileira` (método privado)
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Formatação de valores normais
|
||||
- Valores null/undefined (retorna '0,00')
|
||||
- Valores com decimais
|
||||
- Valores grandes (milhares)
|
||||
|
||||
---
|
||||
|
||||
### 2. DataConsultService
|
||||
|
||||
#### `productsByCodauxiliar`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Busca por codauxiliar válido
|
||||
- Codauxiliar inválido (null, undefined, string vazia)
|
||||
- Erro do repositório (log e exceção)
|
||||
- Mapeamento correto para ProductDto
|
||||
|
||||
#### `getCarriersByDate`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Busca com data inicial
|
||||
- Busca com data final
|
||||
- Busca com data inicial e final
|
||||
- Busca com codfilial
|
||||
- Busca sem filtros
|
||||
- Contagem de pedidos (ordersCount)
|
||||
- Cache Redis
|
||||
|
||||
#### `getOrderCarriers`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Busca por orderId válido
|
||||
- OrderId inválido
|
||||
- Retorno vazio quando não há transportadoras
|
||||
- Formatação de dados
|
||||
|
||||
---
|
||||
|
||||
### 3. Outros Serviços sem testes
|
||||
|
||||
#### `OrdersPaymentService`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Processamento de pagamentos
|
||||
- Validação de dados
|
||||
- Tratamento de erros
|
||||
|
||||
#### `LogisticService`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- getExpedicao
|
||||
- getDeliveries
|
||||
- Validação de parâmetros
|
||||
|
||||
#### `PartnersService`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Métodos de busca de parceiros
|
||||
- Validações
|
||||
|
||||
#### `ClientesService`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Busca de clientes
|
||||
- Validações
|
||||
|
||||
#### `UsersService`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Operações de usuários
|
||||
- Validações
|
||||
|
||||
#### `ResetPasswordService`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Reset de senha
|
||||
- Validação de tokens
|
||||
- Expiração de tokens
|
||||
|
||||
#### `ChangePasswordService`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Mudança de senha
|
||||
- Validação de senha atual
|
||||
- Validação de nova senha
|
||||
|
||||
#### `EmailService`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Envio de emails
|
||||
- Templates de email
|
||||
- Tratamento de erros
|
||||
|
||||
#### `RefreshTokenService`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Geração de refresh token
|
||||
- Validação de refresh token
|
||||
- Expiração de tokens
|
||||
|
||||
#### `TokenBlacklistService`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Adicionar token à blacklist
|
||||
- Verificar se token está na blacklist
|
||||
- Expiração de tokens na blacklist
|
||||
|
||||
#### `SessionManagementService`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Criação de sessão
|
||||
- Validação de sessão
|
||||
- Encerramento de sessão
|
||||
|
||||
#### `LoginAuditService`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Registro de tentativas de login
|
||||
- Auditoria de acessos
|
||||
|
||||
#### `RateLimitingService`
|
||||
- **Status:** ❌ Sem testes
|
||||
- **O que testar:**
|
||||
- Limite de requisições
|
||||
- Reset de contadores
|
||||
- Bloqueio temporário
|
||||
|
||||
---
|
||||
|
||||
## 🟡 Casos de borda e cenários adicionais
|
||||
|
||||
### ProductsService
|
||||
|
||||
1. **getProductDetails:**
|
||||
- Busca por codprod (não só codauxiliar)
|
||||
- Busca com codprod e codauxiliar juntos
|
||||
- Validação de numregiao inválido
|
||||
- Validação de codfilial inválido
|
||||
- Preço null/undefined (formatação)
|
||||
|
||||
2. **productsValidation:**
|
||||
- Filtro vazio
|
||||
- Filtro com caracteres especiais
|
||||
- Múltiplos produtos retornados (pega o primeiro)
|
||||
- Tipos de produto diferentes
|
||||
|
||||
3. **unifiedProductSearch:**
|
||||
- Termo com caracteres especiais
|
||||
- Termo muito longo
|
||||
- Termo com apenas espaços
|
||||
- Busca que retorna múltiplos produtos
|
||||
|
||||
### DataConsultService
|
||||
|
||||
1. **productsByCodauxiliar:**
|
||||
- Codauxiliar com caracteres não numéricos
|
||||
- Codauxiliar muito longo
|
||||
- Codauxiliar vazio
|
||||
|
||||
2. **getCarriersByDate:**
|
||||
- Data inicial maior que data final
|
||||
- Datas inválidas
|
||||
- Cache hit/miss
|
||||
- Erro do repositório
|
||||
|
||||
3. **getOrderCarriers:**
|
||||
- OrderId negativo
|
||||
- OrderId zero
|
||||
- OrderId muito grande
|
||||
|
||||
### DebService
|
||||
|
||||
1. **findByCpfCgcent:**
|
||||
- CPF/CGCENT com caracteres não numéricos
|
||||
- CPF/CGCENT muito curto/longo
|
||||
- Matrícula negativa
|
||||
- Cobrança inválida
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Prioridades de Teste
|
||||
|
||||
### Alta Prioridade
|
||||
1. ✅ `ProductsService.productsValidation` - Método crítico usado em validação de produtos
|
||||
2. ✅ `ProductsService.unifiedProductSearch` - Novo método, precisa de testes
|
||||
3. ✅ `ProductsService.getProductDetails` (busca por codprod) - Completar cobertura
|
||||
4. ✅ `DataConsultService.productsByCodauxiliar` - Método usado no sistema
|
||||
|
||||
### Média Prioridade
|
||||
5. ✅ `ProductsService.getRotinaA4` - Método específico de rotina
|
||||
6. ✅ `DataConsultService.getCarriersByDate` - Método com cache
|
||||
7. ✅ `DataConsultService.getOrderCarriers` - Método auxiliar
|
||||
|
||||
### Baixa Prioridade
|
||||
8. ✅ `ProductsService.exposedProduct` - Método de transação
|
||||
9. ✅ Outros serviços menores (Email, ResetPassword, etc.)
|
||||
|
||||
---
|
||||
|
||||
## 📝 Observações
|
||||
|
||||
- **Cobertura atual:** ~40% dos métodos principais
|
||||
- **Foco:** Métodos de negócio críticos primeiro
|
||||
- **Padrão:** Seguir o padrão dos testes existentes (helper + spec)
|
||||
- **Casos de borda:** Sempre testar null, undefined, strings vazias, valores inválidos
|
||||
|
||||
@@ -147,8 +147,7 @@ WHERE 1=1
|
||||
|
||||
if (filters?.dttransfIni && filters?.dttransfEnd) {
|
||||
sql += ` AND DTTRANSF BETWEEN TO_DATE(:dttransfIni, 'YYYY-MM-DD') AND TO_DATE(:dttransfEnd, 'YYYY-MM-DD')`;
|
||||
parameters.push(filters.dttransfIni);
|
||||
parameters.push(filters.dttransfEnd);
|
||||
parameters.push(filters.dttransfIni, filters.dttransfEnd);
|
||||
} else if (filters?.dttransfIni) {
|
||||
sql += ` AND DTTRANSF >= TO_DATE(:dttransfIni, 'YYYY-MM-DD')`;
|
||||
parameters.push(filters.dttransfIni);
|
||||
@@ -199,7 +198,7 @@ WHERE 1=1
|
||||
return results[0] || null;
|
||||
}
|
||||
|
||||
async findOrderWithCheckoutByOrder(orderId: number): Promise<any | null> {
|
||||
async findOrderWithCheckoutByOrder(orderId: number): Promise<any> {
|
||||
const sql = `
|
||||
SELECT
|
||||
e1.NOME AS NOME_FUNCIONARIO_CAIXA,
|
||||
@@ -235,6 +234,7 @@ WHERE
|
||||
,PCPEDC.CODCLI||' - '||PCCLIENT.CLIENTE as "customerName"
|
||||
,PCPEDC.CODUSUR as "sellerId"
|
||||
,PCPEDC.CODUSUR2 as "codusur2"
|
||||
,PCPEDC.CODUSUR2||' - '||PCUSUARI2.NOME as "codusur2Name"
|
||||
,PCPEDC.CODUSUR3 as "partnerId"
|
||||
,PCPEDC.HORAFAT as "HORA FATURAMENTO"
|
||||
,PCPEDC.MINUTOFAT as "MINUTO FATURAMENTO"
|
||||
@@ -356,10 +356,11 @@ WHERE
|
||||
,PCPEDC.CODEMITENTE as "codEmitente"
|
||||
,PCPEDC.CODEMITENTE as "emitenteMatricula"
|
||||
,(SELECT PCEMPR.NOME FROM PCEMPR WHERE PCEMPR.MATRICULA = PCPEDC.CODEMITENTE) as "emitenteNome"
|
||||
FROM PCPEDC, PCCLIENT, PCUSUARI, PCSUPERV, PCCOB, PCPLPAG, PCCARREG, PCNFSAID,
|
||||
FROM PCPEDC, PCCLIENT, PCUSUARI, PCUSUARI PCUSUARI2, PCSUPERV, PCCOB, PCPLPAG, PCCARREG, PCNFSAID,
|
||||
PCEMPR MOTORISTA, PCVEICUL, PCFORNEC, PCPEDCTEMP, PCPEDI, PCPRODUT, PCMARCA, ESTPARCEIRO
|
||||
WHERE PCPEDC.CODCLI = PCCLIENT.CODCLI
|
||||
AND PCPEDC.CODUSUR = PCUSUARI.CODUSUR
|
||||
AND PCPEDC.CODUSUR2 = PCUSUARI2.CODUSUR (+)
|
||||
AND PCPEDC.CODPLPAG = PCPLPAG.CODPLPAG
|
||||
AND PCPEDC.CODCOB = PCCOB.CODCOB
|
||||
AND PCPEDC.NUMPED = PCPEDCTEMP.NUMPED (+)
|
||||
@@ -573,7 +574,7 @@ WHERE
|
||||
|
||||
sql += '\n' + conditions.join('\n');
|
||||
sql +=
|
||||
'\nGROUP BY PCPEDC.DATA, PCPEDC.CODFILIAL, PCPEDC.CODFILIALLOJA, PCPEDC.NUMPED, PCPEDC.CODCLI, PCPEDC.CODENDENTCLI, PCPEDC.CODPRACA, PCPEDC.CODUSUR, PCPEDC.CODUSUR2, PCPEDC.CODUSUR3, PCPEDC.CODSUPERVISOR, PCPEDC.CONDVENDA, PCPEDC.VLATEND, PCPEDC.VLTOTAL, PCPEDC.DTENTREGA, PCPEDC.TIPOPRIORIDADEENTREGA, PCPEDC.NUMCAR, PCPEDC.DTLIBERA, PCPEDC.CODFUNCLIBERA, PCPEDC.NUMTRANSVENDA, PCPEDC.CODPLPAG, PCPEDC.CODCOB, PCPEDC.DTFAT, PCPEDC.HORAFAT, PCPEDC.MINUTOFAT, PCPEDC.NUMNOTA, PCPEDC.MOTIVOPOSICAO, PCPEDC.TOTPESO, PCPEDC.POSICAO, PCPEDC.DTFINALSEP, PCPEDC.NUMPEDENTFUT, PCPEDC.CODFORNECFRETE, PCPEDC.CODEMITENTE, PCCLIENT.CLIENTE, PCUSUARI.NOME, PCSUPERV.NOME, PCCARREG.DTSAIDA, PCCARREG.DATAMON, PCCARREG.DTFECHA, PCCARREG.CODFUNCFAT, PCNFSAID.CODEMITENTE, PCPLPAG.DESCRICAO, PCCOB.COBRANCA, PCNFSAID.DTCANHOTO, MOTORISTA.MATRICULA, MOTORISTA.NOME, PCVEICUL.DESCRICAO, PCVEICUL.PLACA, PCFORNEC.FORNECEDOR, PCPEDCTEMP.DTENTREGAORIG, ESTPARCEIRO.NOME';
|
||||
'\nGROUP BY PCPEDC.DATA, PCPEDC.CODFILIAL, PCPEDC.CODFILIALLOJA, PCPEDC.NUMPED, PCPEDC.CODCLI, PCPEDC.CODENDENTCLI, PCPEDC.CODPRACA, PCPEDC.CODUSUR, PCPEDC.CODUSUR2, PCPEDC.CODUSUR3, PCPEDC.CODSUPERVISOR, PCPEDC.CONDVENDA, PCPEDC.VLATEND, PCPEDC.VLTOTAL, PCPEDC.DTENTREGA, PCPEDC.TIPOPRIORIDADEENTREGA, PCPEDC.NUMCAR, PCPEDC.DTLIBERA, PCPEDC.CODFUNCLIBERA, PCPEDC.NUMTRANSVENDA, PCPEDC.CODPLPAG, PCPEDC.CODCOB, PCPEDC.DTFAT, PCPEDC.HORAFAT, PCPEDC.MINUTOFAT, PCPEDC.NUMNOTA, PCPEDC.MOTIVOPOSICAO, PCPEDC.TOTPESO, PCPEDC.POSICAO, PCPEDC.DTFINALSEP, PCPEDC.NUMPEDENTFUT, PCPEDC.CODFORNECFRETE, PCPEDC.CODEMITENTE, PCCLIENT.CLIENTE, PCUSUARI.NOME, PCUSUARI2.NOME, PCSUPERV.NOME, PCCARREG.DTSAIDA, PCCARREG.DATAMON, PCCARREG.DTFECHA, PCCARREG.CODFUNCFAT, PCNFSAID.CODEMITENTE, PCPLPAG.DESCRICAO, PCCOB.COBRANCA, PCNFSAID.DTCANHOTO, MOTORISTA.MATRICULA, MOTORISTA.NOME, PCVEICUL.DESCRICAO, PCVEICUL.PLACA, PCFORNEC.FORNECEDOR, PCPEDCTEMP.DTENTREGAORIG, ESTPARCEIRO.NOME';
|
||||
sql += '\nORDER BY PCPEDC.NUMPED DESC';
|
||||
sql += '\nFETCH FIRST 5000 ROWS ONLY';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user