Closed DanielCFreitas closed 3 years ago
@DanielCFreitas pode fornecer os testes que comprovem isto? Só ocorre nos decimais?
Sim o problema só ocorre com os decimais, para os outros tipos está funcionando normalmente.
O val que é o que está sendo testado ele precisa ser menor ou igual ao comparer, porém a notificação está sendo adicionada quando ele justamente é menor que o comparer, aqui é como está a lógica atualmente:
if (val < comparer) AddNotification(key, message);
Boas @DanielCFreitas como vai?
Este é o teste que temos hoje para verificar se o IsLowerOrEqualsThan
funciona:
https://github.com/andrebaltieri/Flunt/blob/main/Flunt.Tests/DecimalValidationTests.cs#L149
O que é experado neste teste é que ele adicione uma notificação se (E somente se) o valor for MAIOR que 10 (Neste caso de teste).
O métodos IsLowerOrEqualsThan
requer que um decimal seja menor ou igual a um valor, não ao contrário! Faz sentido?
Logo, para o cenário abaixo, temos 5 seções, cada uma com 6 asserções, sendo que duas são maiores e diferentes de 10, que devem falhar.
var contract = new Contract<SampleEntity>()
.Requires()
.IsLowerOrEqualsThan((decimal)0, (int)10, "Decimal")
.IsLowerOrEqualsThan((decimal)0, (int)10, "Decimal", "Custom message here")
.IsLowerOrEqualsThan((decimal)10, (int)10, "Decimal")
.IsLowerOrEqualsThan((decimal)10, (int)10, "Decimal", "Custom message here")
.IsLowerOrEqualsThan((decimal)20, (int)10, "Decimal")
.IsLowerOrEqualsThan((decimal)20, (int)10, "Decimal", "Custom message here")
.IsLowerOrEqualsThan((decimal)0, (float)10, "Decimal")
.IsLowerOrEqualsThan((decimal)0, (float)10, "Decimal", "Custom message here")
.IsLowerOrEqualsThan((decimal)10, (float)10, "Decimal")
.IsLowerOrEqualsThan((decimal)10, (float)10, "Decimal", "Custom message here")
.IsLowerOrEqualsThan((decimal)20, (float)10, "Decimal")
.IsLowerOrEqualsThan((decimal)20, (float)10, "Decimal", "Custom message here")
.IsLowerOrEqualsThan((decimal)0, (double)10, "Decimal")
.IsLowerOrEqualsThan((decimal)0, (double)10, "Decimal", "Custom message here")
.IsLowerOrEqualsThan((decimal)10, (double)10, "Decimal")
.IsLowerOrEqualsThan((decimal)10, (double)10, "Decimal", "Custom message here")
.IsLowerOrEqualsThan((decimal)20, (double)10, "Decimal")
.IsLowerOrEqualsThan((decimal)20, (double)10, "Decimal", "Custom message here")
.IsLowerOrEqualsThan((decimal)0, (long)10, "Decimal")
.IsLowerOrEqualsThan((decimal)0, (long)10, "Decimal", "Custom message here")
.IsLowerOrEqualsThan((decimal)10, (long)10, "Decimal")
.IsLowerOrEqualsThan((decimal)10, (long)10, "Decimal", "Custom message here")
.IsLowerOrEqualsThan((decimal)20, (long)10, "Decimal")
.IsLowerOrEqualsThan((decimal)20, (long)10, "Decimal", "Custom message here")
.IsLowerOrEqualsThan((decimal)0, (decimal)10, "Decimal")
.IsLowerOrEqualsThan((decimal)0, (decimal)10, "Decimal", "Custom message here")
.IsLowerOrEqualsThan((decimal)10, (decimal)10, "Decimal")
.IsLowerOrEqualsThan((decimal)10, (decimal)10, "Decimal", "Custom message here")
.IsLowerOrEqualsThan((decimal)20, (decimal)10, "Decimal")
.IsLowerOrEqualsThan((decimal)20, (decimal)10, "Decimal", "Custom message here");
Como resultado, podemos esperar 10 notificações (2 para cada sessão):
Assert.AreEqual(contract.Notifications.Count, 10);
Rodei os testes aqui e todos passaram! ![Uploading image.png…]()
Faz sentido?
Opa, tudo bem?
O que é experado neste teste é que ele adicione uma notificação se (E somente se) o valor for MAIOR que 10 (Neste caso de teste).
Então, mas na lógica do código a notificação está sendo adicionada quando o valor é Menor, segue o código: https://github.com/andrebaltieri/Flunt/blob/main/Flunt/Validations/DecimalValidationContract.cs#L364
public Contract<T> IsLowerOrEqualsThan(decimal val, decimal comparer, string key, string message)
{
if (val < comparer)
AddNotification(key, message);
return this;
}
Logo, para o cenário abaixo, temos 5 seções, cada uma com 6 asserções, sendo que duas são maiores e diferentes de 10, que devem falhar.
No teste, se comparar com ">" ou "<" no código acima, o teste acaba passando para os dois casos, troquei a condicional e executei os testes:
Perfeito @DanielCFreitas! Queria só garantir que os testes estavam passando... Realmente passou este sinal, vou gerar uma versáo nova do pacote!
O valor que está sendo testado deve ser menor ou igual ao que está sendo comparado, da forma como estava, o valor que está sendo testado se fosse menor que o comparador estava adicionando notificação