diff --git a/CHANGES.md b/CHANGES.md index b1494c7..ed82a82 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,8 +2,10 @@ ## In Development +- Fix: Controllo validità campi Email e PEC ([#405][405]) - Fix: CI workflow file rilasciato col package nuget ([#404][404]) +[405]: https://github.com/FatturaElettronica/FatturaElettronica.NET/issues/405 [404]: https://github.com/FatturaElettronica/FatturaElettronica.NET/issues/404 ## Stable diff --git a/Test/Ordinaria/DatiTrasmissioneValidator.cs b/Test/Ordinaria/DatiTrasmissioneValidator.cs index ae82fdb..55289ff 100644 --- a/Test/Ordinaria/DatiTrasmissioneValidator.cs +++ b/Test/Ordinaria/DatiTrasmissioneValidator.cs @@ -97,10 +97,21 @@ public void CodiceDestinatarioWhenFormatoTrasmissioneHasValueFPR12() } [TestMethod] - public void PECDestinatarioMinMaxLength() + public void PECDestinatarioIsOptional() { - Challenge.CodiceDestinatario = new('0', 7); - AssertMinMaxLength(x => x.PECDestinatario, 7, 256); + AssertOptional(x => x.PECDestinatario); + } + + [TestMethod] + public void PECDestinatarioMustBeValid() + { + Challenge.PECDestinatario = "not really"; + var result = Validator.TestValidate(Challenge); + result.ShouldHaveValidationErrorFor(x => x.PECDestinatario); + + Challenge.PECDestinatario = "maybe@we.can"; + result = Validator.TestValidate(Challenge); + result.ShouldNotHaveValidationErrorFor(x => x.PECDestinatario); } } } \ No newline at end of file diff --git a/Test/Semplificata/DatiTrasmissioneValidator.cs b/Test/Semplificata/DatiTrasmissioneValidator.cs index 12c55ea..3a62c3b 100644 --- a/Test/Semplificata/DatiTrasmissioneValidator.cs +++ b/Test/Semplificata/DatiTrasmissioneValidator.cs @@ -81,10 +81,21 @@ public void CodiceDestinatarioWhenFormatoTrasmissioneHasValueFSM10() } [TestMethod] - public void PECDestinatarioMinMaxLength() + public void PECDestinatarioIsOptional() { - Challenge.CodiceDestinatario = new('0', 7); - AssertMinMaxLength(x => x.PECDestinatario, 7, 256); + AssertOptional(x => x.PECDestinatario); + } + + [TestMethod] + public void PECDestinatarioMustBeValid() + { + Challenge.PECDestinatario = "not really"; + var result = Validator.TestValidate(Challenge); + result.ShouldHaveValidationErrorFor(x => x.PECDestinatario); + + Challenge.PECDestinatario = "maybe@we.can"; + result = Validator.TestValidate(Challenge); + result.ShouldNotHaveValidationErrorFor(x => x.PECDestinatario); } } } \ No newline at end of file diff --git a/Validators/Constants.cs b/Validators/Constants.cs new file mode 100644 index 0000000..d5eb185 --- /dev/null +++ b/Validators/Constants.cs @@ -0,0 +1,8 @@ +namespace FatturaElettronica.Validators; + +public class Constants +{ + // Vedi 'EmailType' in https://www.agenziaentrate.gov.it/portale/documents/20143/4631413/Schema_VFPR12.xsd + public static string EmailRegex = "([!#-'*+/-9=?A-Z^-~-]+(\\.[!#-'*+/-9=?A-Z^-~-]+)*|"(\\[\\]!#-[^-~ \t]|(\\[\t -~]))+")@([!#-'*+/-9=?A-Z^-~-]+(\\.[!#-'*+/-9=?A-Z^-~-]+)*|\\[[\t -Z^-~]*\\])"; + +} diff --git a/Validators/ContattiTrasmittenteValidator.cs b/Validators/ContattiTrasmittenteValidator.cs index 97e9277..fd0fd59 100644 --- a/Validators/ContattiTrasmittenteValidator.cs +++ b/Validators/ContattiTrasmittenteValidator.cs @@ -11,7 +11,8 @@ public ContattiTrasmittenteValidator() .Length(5, 12) .When(x => !string.IsNullOrEmpty(x.Telefono)); RuleFor(dt => dt.Email) - .EmailAddress() + .Length(7, 256) + .Matches(Constants.EmailRegex) .When(x => !string.IsNullOrEmpty(x.Email)); } } diff --git a/Validators/ContattiValidator.cs b/Validators/ContattiValidator.cs index aded89e..221c70b 100644 --- a/Validators/ContattiValidator.cs +++ b/Validators/ContattiValidator.cs @@ -14,7 +14,8 @@ public ContattiValidator() .Length(5, 12) .When(x => !string.IsNullOrEmpty(x.Fax)); RuleFor(x => x.Email) - .EmailAddress() + .Length(7, 256) + .Matches(Constants.EmailRegex) .When(x => !string.IsNullOrEmpty(x.Email)); } } diff --git a/Validators/DatiTrasmissioneValidator.cs b/Validators/DatiTrasmissioneValidator.cs index 65ccdbb..7f5a421 100644 --- a/Validators/DatiTrasmissioneValidator.cs +++ b/Validators/DatiTrasmissioneValidator.cs @@ -36,6 +36,7 @@ public DatiTrasmissioneValidator() .When(x => x.ContattiTrasmittente != null && !x.ContattiTrasmittente.IsEmpty()); RuleFor(dt => dt.PECDestinatario) .Length(7, 256) + .Matches(Constants.EmailRegex) .When(x => !string.IsNullOrEmpty(x.PECDestinatario)); } } diff --git a/Validators/Semplificata/DatiTrasmissioneValidator.cs b/Validators/Semplificata/DatiTrasmissioneValidator.cs index d27f1fa..ac54cb9 100644 --- a/Validators/Semplificata/DatiTrasmissioneValidator.cs +++ b/Validators/Semplificata/DatiTrasmissioneValidator.cs @@ -28,7 +28,7 @@ public DatiTrasmissioneValidator() .When(dt => dt.FormatoTrasmissione == Defaults.FormatoTrasmissione.Semplificata) .WithErrorCode("00311"); RuleFor(dt => dt.PECDestinatario) - .Length(7, 256) + .Matches(Constants.EmailRegex) .When(x => !string.IsNullOrEmpty(x.PECDestinatario)); } }