From d08361004959e1d623c4aedf106d3d9c81fe8f77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20M=2E=20Queiroz?= Date: Wed, 13 Aug 2025 20:21:01 -0300 Subject: [PATCH] fix: improve email validation regex and enhance test coverage --- .../validations/valid_email_validation.dart | 3 ++- .../valid_email_validation_test.dart | 22 ++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/src/validations/valid_email_validation.dart b/lib/src/validations/valid_email_validation.dart index 8eed883..2266d8e 100644 --- a/lib/src/validations/valid_email_validation.dart +++ b/lib/src/validations/valid_email_validation.dart @@ -24,7 +24,8 @@ extension ValidEmailValidation on SimpleValidationBuilder { /// SimpleValidationBuilder validEmail({String? message, String? code}) { return use((value, entity) { - if (RegExp(r'^[\w\.-]+@[a-zA-Z\d\.-]+\.[a-zA-Z]{2,}$').hasMatch(value)) { + if (RegExp(r'^[\w\.-]+@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$') + .hasMatch(value)) { return null; } diff --git a/test/src/validations/valid_email_validation_test.dart b/test/src/validations/valid_email_validation_test.dart index a6bfc38..f20d713 100644 --- a/test/src/validations/valid_email_validation_test.dart +++ b/test/src/validations/valid_email_validation_test.dart @@ -31,10 +31,30 @@ void main() { .ruleFor((e) => e.email, key: 'email', label: 'E-mail') // .validEmailOrNull(); - final user = UserNullableModel()..email = null; + final user = UserNullableModel()..email = null; final result = validator.validate(user); expect(result.isValid, true); }); + + test('valid email validation...', () { + final validator = TestLucidValidator(); + + validator + .ruleFor((e) => e.email, key: 'email', label: 'E-mail') // + .validEmail(); + + final user = UserModel()..email = 'test@.123.com'; + + final result = validator.validate(user); + + expect(result.isValid, false); + + expect(result.exceptions.length, 1); + + final error = result.exceptions.first; + + expect(error.message, "'E-mail' is not a valid email address."); + }); }