BoletoNet / boleto2net

Nova versão do Boleto.Net
Apache License 2.0
162 stars 139 forks source link

Fator Vencimento - Teste Falhando - GeracaoCorretaDeFatorVencimento() #96

Open rafd75 opened 6 years ago

rafd75 commented 6 years ago

Bom dia...

Estou executando os testes do projeto, e o método GeracaoCorretaDeFatorVencimento() (arquivo FatorVencimento.cs - projeto de testes) está falhando...

O teste falha -> Mensagem: System.Exception : Data do vencimento fora do range de utilização proposto pela CENEGESC. Comunicado FEBRABAN de n° 082/2012 de 14/06/2012 - A exceção está sendo disparada na função de extensão FatorVencimento (arquivo DateTimeExtensions.cs)

Para ajudar no diagnóstivo, alterei a mensagem para identificar a data que está dando erro -> Data do vencimento (31/01/2010 00:00:00) fora do range (-3034) de utilização proposto pela CENEGESC. Comunicado FEBRABAN de n° 082/2012 de 14/06/2012

No método de extensão, o aceitável é seria rangeUtilizavel > 5500 || rangeUtilizavel < -3000

Alguém com esse mesmo problema ai?

Obs: A data do computador aqui está OK - 23/05/2018...

tssa88 commented 6 years ago

Estou com esse mesmo problema.

rafd75 commented 6 years ago

@thiagosoeiro , boa tarde.

Eu ajustei o código do teste para esse: (aqui localmente)

        public void GeracaoCorretaDeFatorVencimento()
        {
            var inicio = new DateTime(1997, 10, 07, 0, 0, 0);
            var ajusteRange = (DateTime.Now - inicio).Days - 3000;
            inicio = inicio.AddDays(ajusteRange);

            var totalDiasAnalisados = 25000;
            var fim = inicio.AddDays(totalDiasAnalisados);

            for (int i = 0; i < totalDiasAnalisados; i++)
            {
                var fatorVencimento = ajusteRange + i;
                var dateTime = inicio.AddDays(i);

                Assert.AreEqual(fatorVencimento, dateTime.FatorVencimento());
                if (fatorVencimento == 9999)
                    ajusteRange = 999-i;
            }
            Assert.AreEqual(1000, fim.AddDays(1).FatorVencimento());
            Assert.AreEqual(1001, fim.AddDays(2).FatorVencimento());
        }

resolveu uma parte... se rodar esse teste, vai quebrar dentro do projeto mesmo. Olhando por cima, a função FatorVencimento (Classe DateTimeExtension.cs) tem "fixo" a data base de 07/10/1997 e por isso, quebra em 08/08/2033 (quando o range sai fora do esperado).

Eu parei por ai, não quis mudar a função, pois queria ler a documentação antes... mas no "chute", acredito que, para a data 08/08/2033, a data base não pode ser 07/10/1997, já que o range sai fora do limite definido pela febraban...

Atualiza sua versão (do teste) com essa função acima, e me diga se estou certo no que escrevi...

Então, temos duas saídas.... Limitar o teste até 07/08/2033 e deixar o problema lá para frente, ou adequar a função FatorVencimento...

Limitar o teste em 07/08/2033 parece ser mais fácil e menos arriscado.