==================================================== INICIANDO TESTES DO MÓDULO DE LACRES (TDD) ==================================================== --- 1.1 LacreValidador -> normalizarNumero() --- ✅ [PASS] String com espaços nas bordas → retorna trimada ✅ [PASS] String lowercase → retorna uppercase ✅ [PASS] String mista com espaços e minúsculas → trim + uppercase juntos --- 1.2 LacreValidador -> validarNumeroLacre() --- ✅ [PASS] String vazia → erro "não pode ser vazio" ✅ [PASS] String só de espaços (vira vazia após trim) → erro "não pode ser vazio" ✅ [PASS] String com 1 caractere válido → válido ✅ [PASS] String com 100 caracteres → válido (limite exato) ✅ [PASS] String com 101 caracteres → erro de comprimento máximo ✅ [PASS] Caracteres válidos: letras, números, hífen, barra, ponto → válido ✅ [PASS] Caractere inválido (ex: @, espaço no meio, #) → erro de caracteres ✅ [PASS] Múltiplos erros não ocorrem após vazio (early return verificado) --- 1.3 LacreValidador -> verificarDuplicidade() --- ✅ [PASS] Número inexistente na lista → false ✅ [PASS] Número idêntico na lista → true ✅ [PASS] Número igual mas em case diferente → true (case-insensitive) ✅ [PASS] Lista com objetos (não só arrays) → funciona corretamente ✅ [PASS] Número igual mas com ignorarLacreId correspondente → false (ignora o próprio) ✅ [PASS] Lista vazia → false ✅ [PASS] $ignorarLacreId null com duplicata → true --- 1.4 LacreValidador -> Quantidades --- ✅ [PASS] Atual == mínimo → true ✅ [PASS] Atual < mínimo → false ✅ [PASS] Atual < máximo → true (pode adicionar) ✅ [PASS] Atual == máximo → false (não pode adicionar) ✅ [PASS] Atual > máximo → false --- 1.5 LacreValidador -> validarTransicaoStatus() --- ✅ [PASS] disponivel → utilizado → permitido ✅ [PASS] disponivel → danificado → permitido ✅ [PASS] disponivel → perdido → permitido ✅ [PASS] disponivel → retornado → negado ✅ [PASS] utilizado → retornado → permitido ✅ [PASS] retornado → disponivel → permitido ✅ [PASS] danificado → disponivel → permitido ✅ [PASS] perdido → disponivel → permitido ✅ [PASS] Status atual inexistente/inválido → false --- 1.6 LacreValidador -> validarTransicaoCarregamento() --- ✅ [PASS] EM_PROGRESSO → FINALIZADO → permitido ✅ [PASS] EM_PROGRESSO → CANCELADO → permitido ✅ [PASS] FINALIZADO → qualquer → negado ✅ [PASS] CANCELADO → qualquer → negado ✅ [PASS] Status inválido → false --- 1.7 LacreValidador -> Permissões e Finalização --- ✅ [PASS] podeEditarLacre: EM_PROGRESSO → true ✅ [PASS] podeEditarLacre: FINALIZADO → false ✅ [PASS] podeEditarLacre: CANCELADO → false ✅ [PASS] podeRemoverLacre: Carregamento finalizado → false (independente da quantidade) ✅ [PASS] podeRemoverLacre: (atual - 1) >= mínimo → true ✅ [PASS] podeRemoverLacre: (atual - 1) < mínimo → false ✅ [PASS] podeRemoverLacre: Exatamente no limite (atual == mínimo) → false ✅ [PASS] podeFinalizarCarregamento: quantidade >= mínimo → true ✅ [PASS] podeFinalizarCarregamento: quantidade < mínimo → false ✅ [PASS] podeFinalizarCarregamento: Exatamente no mínimo → true ✅ [PASS] isStatusValido: Cada um dos 5 status válidos → true ✅ [PASS] isStatusValido: String inválida → false ✅ [PASS] obterStatusValidos() retorna array com os 5 status esperados ✅ [PASS] criarLacre: Dados válidos, sem duplicata, abaixo do máximo → sucesso ✅ [PASS] criarLacre: numero_lacre normalizado (uppercase) ✅ [PASS] criarLacre: status = disponivel ✅ [PASS] criarLacre: editado = 0 ✅ [PASS] criarLacre: data_criacao presente ✅ [PASS] criarLacre: numero_lacre inválido (vazio) → falha com erros ✅ [PASS] Mensagem de erro exata ✅ [PASS] criarLacre: Quantidade já no máximo → falha ✅ [PASS] criarLacre: Duplicata de número → falha ✅ [PASS] criarLacre: observacao ausente → campo string vazia --- 2.2 LacreServico -> editarLacre() --- ✅ [PASS] editarLacre: Carregamento finalizado → falha ✅ [PASS] editarLacre: Número inválido → falha ✅ [PASS] editarLacre: Duplicata (outro lacre) → falha ✅ [PASS] editarLacre: Duplicata do próprio lacre (mesmo ID) → sucesso ✅ [PASS] editarLacre: Edição válida → sucesso com editado = 1 e data_edicao --- 2.3 LacreServico -> removerLacre() --- ✅ [PASS] removerLacre: Carregamento finalizado → falha ✅ [PASS] Mensagem: não é possível remover em carregamento finalizado ou cancelado ✅ [PASS] removerLacre: Remoção deixaria abaixo do mínimo → falha ✅ [PASS] Mensagem: quantidade ficaria abaixo do mínimo ✅ [PASS] removerLacre: Remoção válida → sucesso ✅ [PASS] Retorna lacreIdRemovido correto --- 2.4 LacreServico -> finalizarCarregamento() --- ✅ [PASS] finalizarCarregamento: Quantidade abaixo do mínimo → falha ✅ [PASS] Mensagem indica atual e mínimo ✅ [PASS] finalizarCarregamento: Quantidade igual ao mínimo → sucesso ✅ [PASS] Verifica statusCarregamento = FINALIZADO ✅ [PASS] Verifica dataFinalizacao presente --- 3. LacreConfiguracaoServico --- ✅ [PASS] validarConfiguracao: minimo <= 0 → erro ✅ [PASS] validarConfiguracao: maximo <= 0 → erro ✅ [PASS] validarConfiguracao: minimo > maximo → erro ✅ [PASS] validarConfiguracao: minimo == maximo → válido ✅ [PASS] validarConfiguracao: Múltiplos erros (ambos zero) → retorna 2 erros ✅ [PASS] criarConfiguracao: Configuração inválida → falha ✅ [PASS] configuracao = null em falha ✅ [PASS] criarConfiguracao: Configuração válida → sucesso ✅ [PASS] Campos configurados corretamente ✅ [PASS] ativa = true ✅ [PASS] data_criacao presente ==================================================== RESULTADO GERAL: ✅ Testes Passaram: 87 🏆 TODOS OS TESTES PASSARAM COM SUCESSO! ====================================================