Conteúdo do item:
Como testar as anotações customizadas ?
Vídeo onde crio essa classe
https://www.byiorio.com.br/product/4/item/31
Agrupamento de vídeos mostrando mais sobre Docker e Sonar
https://www.byiorio.com.br/product/11/item/40
Qual classe vamos realizar o teste ?
package br.com.byiorio.api.infra.validators;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class EmailOwaspValidator implements
ConstraintValidator<EmailOwasp, String> {
private int max=100;
private boolean nullable;
@Override
public void initialize(EmailOwasp emailOwsap) {
this.max = emailOwsap.max();
this.nullable = emailOwsap.nullable();
}
@Override
public boolean isValid(String conteudo, ConstraintValidatorContext contexto) {
if (!nullable && (conteudo == null || "".equals(conteudo.trim()))) {
contexto.disableDefaultConstraintViolation();
contexto.buildConstraintViolationWithTemplate("Campo Obrigatório").addConstraintViolation();
return false;
} else if (nullable && (conteudo == null || "".equals(conteudo.trim()))) {
return true;
} else if (conteudo.length() > this.max) {
contexto.disableDefaultConstraintViolation();
contexto.buildConstraintViolationWithTemplate("Tamanho irregular").addConstraintViolation();
return false;
}
final String regex = "^[a-zA-Z0-9_+&*-]{1,100}(?:\\.[a-zA-Z0-9_+&*-]{1,100}){0,100}@(?:[a-zA-Z0-9-]+\\.){1,100}[a-zA-Z]{2,7}$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(conteudo);
return matcher.matches();
}
}
@Autowired
private Validator validator;
private BindingResult bindingResult;
Colocar antes do início dos testes
// inicio
@BeforeEach
public void setUpClass() {
// teste da anotacao completa
bindingResult = new BindException(new LoginRequest(), "LoginRequest");
}
Testando a anotação através de uma classe que utiliza essa anotação, no meu caso a classe LoginRequest tem o @Email
@Test
void testAnotacao() {
LoginRequest login = new LoginRequest();
login.setPassword("passworddd");
login.setUser("t@t.t");
validator.validate(login, bindingResult);
assertTrue(bindingResult.hasErrors());
assertEquals("E-mail fora do padrão Owsap", bindingResult.getFieldError().getDefaultMessage());
assertEquals("user", bindingResult.getFieldError().getField());
}
// Teste mais rapido
EmailOwaspValidator emailOwaspValidator = new EmailOwaspValidator();
@Mock
ConstraintValidatorContext context;
@Mock
ConstraintViolationBuilder builder;
// inicio
@BeforeEach
public void setUpClass() {
// Teste mais rapido
when(context.buildConstraintViolationWithTemplate(anyString())).thenReturn(builder);
}
Executar o teste como desejar
@Test
void testVariacao() {
assertFalse(emailOwaspValidator.isValid("t@t.t", context));
assertFalse(emailOwaspValidator.isValid("atest@deeeee", context));
assertFalse(emailOwaspValidator.isValid(null, context));
assertFalse(emailOwaspValidator.isValid("lucas..teste@dominio.br", context));
assertFalse(emailOwaspValidator.isValid("lucas..teste@br", context));
assertFalse(emailOwaspValidator.isValid("lucas..teste@", context));
assertFalse(emailOwaspValidator.isValid("lucas.teste@@", context));
assertFalse(emailOwaspValidator.isValid("lucas@teste@com.br", context));
assertFalse(emailOwaspValidator.isValid("lucas.teste@com..br", context));
assertFalse(emailOwaspValidator.isValid("lucas.teste@com.br.", context));
assertFalse(emailOwaspValidator.isValid("usuariousuariousuariousuariousuariousuariousuariousuariousuariousuariousuariousuariousuariousuariousuariousuariousuariousuario@d.br", context));
assertTrue(emailOwaspValidator.isValid("usuario@d.br", context));
assertTrue(emailOwaspValidator.isValid("a@dominio.br", context));
assertTrue(emailOwaspValidator.isValid("lucas.email@dominio.com", context));
assertTrue(emailOwaspValidator.isValid("lucas@dominio.com", context));
assertTrue(emailOwaspValidator.isValid("lucas@dominio.com.br", context));
assertTrue(emailOwaspValidator.isValid("lucas-teste@dominio.com.br", context));
assertTrue(emailOwaspValidator.isValid("lucas@dominio-dominio2.com.br", context));
}
}
package br.com.byiorio.api.infra.validators;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
import javax.validation.ConstraintValidatorContext;
import javax.validation.ConstraintValidatorContext.ConstraintViolationBuilder;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Validator;
import br.com.byiorio.api.login.LoginRequest;
@SpringBootTest
class EmailOwaspValidatorTest {
// teste da anotacao completa
@Autowired
private Validator validator;
private BindingResult bindingResult;
// Teste mais rapido
EmailOwaspValidator emailOwaspValidator = new EmailOwaspValidator();
@Mock
ConstraintValidatorContext context;
@Mock
ConstraintViolationBuilder builder;
// inicio
@BeforeEach
public void setUpClass() {
// teste da anotacao completa
bindingResult = new BindException(new LoginRequest(), "LoginRequest");
// Teste mais rapido
when(context.buildConstraintViolationWithTemplate(anyString())).thenReturn(builder);
}
@Test
void testAnotacao() {
LoginRequest login = new LoginRequest();
login.setPassword("passworddd");
login.setUser("t@t.t");
validator.validate(login, bindingResult);
assertTrue(bindingResult.hasErrors());
assertEquals("E-mail fora do padrão Owsap", bindingResult.getFieldError().getDefaultMessage());
assertEquals("user", bindingResult.getFieldError().getField());
}
@Test
void testVariacao() {
assertFalse(emailOwaspValidator.isValid("t@t.t", context));
assertFalse(emailOwaspValidator.isValid("atest@deeeee", context));
assertFalse(emailOwaspValidator.isValid(null, context));
assertFalse(emailOwaspValidator.isValid("lucas..teste@dominio.br", context));
assertFalse(emailOwaspValidator.isValid("lucas..teste@br", context));
assertFalse(emailOwaspValidator.isValid("lucas..teste@", context));
assertFalse(emailOwaspValidator.isValid("lucas.teste@@", context));
assertFalse(emailOwaspValidator.isValid("lucas@teste@com.br", context));
assertFalse(emailOwaspValidator.isValid("lucas.teste@com..br", context));
assertFalse(emailOwaspValidator.isValid("lucas.teste@com.br.", context));
assertFalse(emailOwaspValidator.isValid("usuariousuariousuariousuariousuariousuariousuariousuariousuariousuariousuariousuariousuariousuariousuariousuariousuariousuario@d.br", context));
assertTrue(emailOwaspValidator.isValid("usuario@d.br", context));
assertTrue(emailOwaspValidator.isValid("a@dominio.br", context));
assertTrue(emailOwaspValidator.isValid("lucas.email@dominio.com", context));
assertTrue(emailOwaspValidator.isValid("lucas@dominio.com", context));
assertTrue(emailOwaspValidator.isValid("lucas@dominio.com.br", context));
assertTrue(emailOwaspValidator.isValid("lucas-teste@dominio.com.br", context));
assertTrue(emailOwaspValidator.isValid("lucas@dominio-dominio2.com.br", context));
}
}
junit; custom validation; tag; teste;