diff --git a/src/NetDevPack.Brasil/Documentos/CNPJ.cs b/src/NetDevPack.Brasil/Documentos/CNPJ.cs index 410d12a..7e09dd7 100644 --- a/src/NetDevPack.Brasil/Documentos/CNPJ.cs +++ b/src/NetDevPack.Brasil/Documentos/CNPJ.cs @@ -11,7 +11,7 @@ public class Cnpj public Cnpj(string numero) { - Numero = numero.OnlyNumbers(numero); + Numero = numero.OnlyNumbers(); if (!EstaValido()) throw new DomainException("CNPJ Invalido"); } diff --git a/src/NetDevPack.Brasil/Documentos/Cpf.cs b/src/NetDevPack.Brasil/Documentos/Cpf.cs index 86d51a3..77b6a2f 100644 --- a/src/NetDevPack.Brasil/Documentos/Cpf.cs +++ b/src/NetDevPack.Brasil/Documentos/Cpf.cs @@ -11,7 +11,7 @@ public class Cpf public Cpf(string numero) { - Numero = numero.OnlyNumbers(numero); + Numero = numero.OnlyNumbers(); if (!EstaValido()) throw new DomainException("CPF Invalido"); } diff --git a/src/NetDevPack.Brasil/Documentos/Validacao/CnpjValidador.cs b/src/NetDevPack.Brasil/Documentos/Validacao/CnpjValidador.cs index 8acb269..73145d3 100644 --- a/src/NetDevPack.Brasil/Documentos/Validacao/CnpjValidador.cs +++ b/src/NetDevPack.Brasil/Documentos/Validacao/CnpjValidador.cs @@ -1,5 +1,5 @@ -using System.Collections.Generic; -using NetDevPack.Utilities; +using NetDevPack.Utilities; +using System.Collections.Generic; namespace NetDevPack.Brasil.Documentos.Validacao { @@ -21,7 +21,7 @@ public class CnpjValidador "99999999999999" }; - public CnpjValidador(string cnpj) => _cpnjTratado = cnpj.OnlyNumbers(cnpj); + public CnpjValidador(string cnpj) => _cpnjTratado = cnpj.OnlyNumbers(); public bool EstaValido() { diff --git a/src/NetDevPack.Brasil/Documentos/Validacao/CpfValidador.cs b/src/NetDevPack.Brasil/Documentos/Validacao/CpfValidador.cs index f0aaebc..fb8f505 100644 --- a/src/NetDevPack.Brasil/Documentos/Validacao/CpfValidador.cs +++ b/src/NetDevPack.Brasil/Documentos/Validacao/CpfValidador.cs @@ -1,5 +1,5 @@ -using System.Collections.Generic; -using NetDevPack.Utilities; +using NetDevPack.Utilities; +using System.Collections.Generic; namespace NetDevPack.Brasil.Documentos.Validacao { @@ -21,7 +21,7 @@ public class CpfValidador "99999999999" }; - public CpfValidador(string numero) => _cpfTratado = numero.OnlyNumbers(numero); + public CpfValidador(string numero) => _cpfTratado = numero.OnlyNumbers(); public bool EstaValido() { diff --git a/src/NetDevPack.Brasil/Localizacao/Cep.cs b/src/NetDevPack.Brasil/Localizacao/Cep.cs index 54293da..24c2164 100644 --- a/src/NetDevPack.Brasil/Localizacao/Cep.cs +++ b/src/NetDevPack.Brasil/Localizacao/Cep.cs @@ -1,7 +1,6 @@ -using System; -using NetDevPack.Brasil.Localizacao.Validacao; +using NetDevPack.Brasil.Localizacao.Validacao; using NetDevPack.Domain; -using NetDevPack.Utilities; +using System; namespace NetDevPack.Brasil.Localizacao { @@ -63,13 +62,10 @@ public class Cep : IEquatable /// CEP (Código de Endereçamento Postal) inválido. public Cep(string codigo) { - Codigo = codigo?.OnlyNumbers(codigo); - _validador = new CepValidador(Codigo); - if (!EstaValido()) - { - throw new DomainException("CEP Inválido"); - } - PreencherEstrutura(); + Codigo = codigo; + _validador = new CepValidador(codigo); + if (EstaValido()) + PreencherEstrutura(); } /// diff --git a/src/NetDevPack.Brasil/Localizacao/Validacao/CepValidador.cs b/src/NetDevPack.Brasil/Localizacao/Validacao/CepValidador.cs index 5866591..79b58c0 100644 --- a/src/NetDevPack.Brasil/Localizacao/Validacao/CepValidador.cs +++ b/src/NetDevPack.Brasil/Localizacao/Validacao/CepValidador.cs @@ -1,4 +1,5 @@ using NetDevPack.Utilities; +using System.Text.RegularExpressions; namespace NetDevPack.Brasil.Localizacao.Validacao { @@ -16,11 +17,19 @@ public class CepValidador /// private readonly string _cepTratado; + private readonly string _cepOriginal; + + private readonly Regex _formatoEsperado = new Regex(@"^(\d{5}-\d{3})|(\d{8})$", RegexOptions.Compiled); + /// /// Inicializa uma instância da classe . /// /// O CEP (Código de Endereçamento Postal). - public CepValidador(string codigo) => _cepTratado = codigo.OnlyNumbers(codigo); + public CepValidador(string codigo) + { + _cepTratado = codigo.OnlyNumbers(); + _cepOriginal = codigo; + } /// /// Verifica se o CEP atende o critério de tamanho definido. @@ -28,7 +37,7 @@ public class CepValidador /// se o CEP atende o critério de tamanho definido; caso contrário, . public bool EstaValido() { - return PossuiTamanhoValido(); + return PossuiTamanhoValido() && _formatoEsperado.IsMatch(_cepOriginal); } /// diff --git a/src/NetDevPack.Brasil/NetDevPack.Brasil.csproj b/src/NetDevPack.Brasil/NetDevPack.Brasil.csproj index 662384b..3b5ea24 100644 --- a/src/NetDevPack.Brasil/NetDevPack.Brasil.csproj +++ b/src/NetDevPack.Brasil/NetDevPack.Brasil.csproj @@ -18,7 +18,7 @@ - + diff --git a/tests/NetDevPack.Brasil.Tests/Localizacao/CepTests.cs b/tests/NetDevPack.Brasil.Tests/Localizacao/CepTests.cs new file mode 100644 index 0000000..c869737 --- /dev/null +++ b/tests/NetDevPack.Brasil.Tests/Localizacao/CepTests.cs @@ -0,0 +1,36 @@ +using FluentAssertions; +using NetDevPack.Brasil.Localizacao; +using Xunit; + +namespace NetDevPack.Brasil.Tests.Localizacao +{ + public class CepTests + { + + [Theory] + [InlineData("87970-000")] + [InlineData("86039-215")] + [InlineData("01000-000")] + [InlineData("01000000")] + [InlineData("87970000")] + [InlineData("86039215")] + public void Should_Validate_Ceps(string codigo) + { + var cep = new Cep(codigo); + cep.EstaValido().Should().BeTrue(); + } + + [Theory] + [InlineData("87970O00")] + [InlineData("860321o5")] + [InlineData("0100000")] + [InlineData("01-00000")] + [InlineData("879aoe700^0-0")] + [InlineData("8603a9215")] + public void Should_Not_Validate_Ceps(string codigo) + { + var cep = new Cep(codigo); + cep.EstaValido().Should().BeFalse(); + } + } +} diff --git a/tests/NetDevPack.Brasil.Tests/NetDevPack.Brasil.Tests.csproj b/tests/NetDevPack.Brasil.Tests/NetDevPack.Brasil.Tests.csproj index bace3f3..07845dd 100644 --- a/tests/NetDevPack.Brasil.Tests/NetDevPack.Brasil.Tests.csproj +++ b/tests/NetDevPack.Brasil.Tests/NetDevPack.Brasil.Tests.csproj @@ -1,4 +1,4 @@ - + net5.0