From 930656e650cfaccadbd4f7a1136fa4c6aaf49b57 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Wed, 23 Mar 2022 02:54:06 -0300 Subject: [PATCH] Improved tests --- .gitignore | 2 + .../membros/UsuarioDoMembroResource.java | 20 +++- .../validation/DeveSerIdValidoValidator.java | 6 +- .../mizudo/validation/SuportaValidacao.java | 3 +- .../validation/SuportaValidacaoValidator.java | 6 +- .../mizudo/validation/Validacao.java | 7 ++ .../membros/UsuarioDoMembroResourceTest.java | 107 +++++++++++++++++- .../DeveSerIdValidoValidatorTest.java | 10 +- .../SuportaValidacaoValidatorTest.java | 28 +++-- 9 files changed, 160 insertions(+), 29 deletions(-) create mode 100644 src/main/java/io/github/arrudalabs/mizudo/validation/Validacao.java diff --git a/.gitignore b/.gitignore index bdf57ce..29bbec4 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,5 @@ nb-configuration.xml # Local environment .env + +*.pem \ No newline at end of file diff --git a/src/main/java/io/github/arrudalabs/mizudo/resources/membros/UsuarioDoMembroResource.java b/src/main/java/io/github/arrudalabs/mizudo/resources/membros/UsuarioDoMembroResource.java index 0be63ce..3ea6f06 100644 --- a/src/main/java/io/github/arrudalabs/mizudo/resources/membros/UsuarioDoMembroResource.java +++ b/src/main/java/io/github/arrudalabs/mizudo/resources/membros/UsuarioDoMembroResource.java @@ -4,6 +4,8 @@ import io.github.arrudalabs.mizudo.model.Usuario; import io.github.arrudalabs.mizudo.services.GeradorDeHash; import io.github.arrudalabs.mizudo.validation.DeveSerIdValido; +import io.github.arrudalabs.mizudo.validation.SuportaValidacao; +import io.github.arrudalabs.mizudo.validation.Validacao; import javax.inject.Inject; import javax.transaction.Transactional; @@ -12,6 +14,7 @@ import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; +import java.util.Objects; @Path("/membros/{membroId}/user") public class UsuarioDoMembroResource { @@ -29,15 +32,30 @@ public UsuarioRegistrado definirUsuario( @PathParam("membroId") final Long membroId, @Valid final NovoUsuario novoUsuario) { - return new UsuarioRegistrado(Usuario.definirUsuario(Membro.findById(membroId),novoUsuario.username,novoUsuario.senha,geradorDeHash)); + return new UsuarioRegistrado(Usuario.definirUsuario(Membro.findById(membroId), novoUsuario.username, novoUsuario.senha, geradorDeHash)); } + @SuportaValidacao( + message = "senhas não conferem", + classeValidadora = NovoUsuario.NovoUsuarioValidation.class + ) public record NovoUsuario(@NotBlank String username, @NotBlank String senha, @NotBlank String confirmacaoSenha) { + public static class NovoUsuarioValidation implements Validacao { + @Override + public boolean estahValido(Object object) { + if (object instanceof NovoUsuario novoUsuario) { + return Objects.nonNull(novoUsuario) + && Objects.nonNull(novoUsuario.senha) + && novoUsuario.senha.equals(novoUsuario.confirmacaoSenha); + } + return false; + } + } } public record UsuarioRegistrado(String username, String senha) { diff --git a/src/main/java/io/github/arrudalabs/mizudo/validation/DeveSerIdValidoValidator.java b/src/main/java/io/github/arrudalabs/mizudo/validation/DeveSerIdValidoValidator.java index ff78786..b90ca2a 100644 --- a/src/main/java/io/github/arrudalabs/mizudo/validation/DeveSerIdValidoValidator.java +++ b/src/main/java/io/github/arrudalabs/mizudo/validation/DeveSerIdValidoValidator.java @@ -2,21 +2,19 @@ import io.quarkus.hibernate.orm.panache.runtime.JpaOperations; -import javax.enterprise.context.ApplicationScoped; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.io.Serializable; import java.util.Optional; -@ApplicationScoped public class DeveSerIdValidoValidator implements ConstraintValidator { - private DeveSerIdValido constraintAnnotation ; + private DeveSerIdValido constraintAnnotation; @Override public void initialize(DeveSerIdValido constraintAnnotation) { ConstraintValidator.super.initialize(constraintAnnotation); - this.constraintAnnotation=(constraintAnnotation); + this.constraintAnnotation = constraintAnnotation; } @Override diff --git a/src/main/java/io/github/arrudalabs/mizudo/validation/SuportaValidacao.java b/src/main/java/io/github/arrudalabs/mizudo/validation/SuportaValidacao.java index 6ae0735..2a6189c 100644 --- a/src/main/java/io/github/arrudalabs/mizudo/validation/SuportaValidacao.java +++ b/src/main/java/io/github/arrudalabs/mizudo/validation/SuportaValidacao.java @@ -7,7 +7,6 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import java.util.function.Predicate; @Constraint(validatedBy = SuportaValidacaoValidator.class) @Target({ElementType.TYPE,ElementType.FIELD,ElementType.PARAMETER, ElementType.METHOD}) @@ -15,7 +14,7 @@ public @interface SuportaValidacao { String message(); - Class classeValidadora(); + Class classeValidadora(); Class[] payload() default {}; diff --git a/src/main/java/io/github/arrudalabs/mizudo/validation/SuportaValidacaoValidator.java b/src/main/java/io/github/arrudalabs/mizudo/validation/SuportaValidacaoValidator.java index 32fb8fe..5f6e736 100644 --- a/src/main/java/io/github/arrudalabs/mizudo/validation/SuportaValidacaoValidator.java +++ b/src/main/java/io/github/arrudalabs/mizudo/validation/SuportaValidacaoValidator.java @@ -1,11 +1,9 @@ package io.github.arrudalabs.mizudo.validation; -import javax.enterprise.context.ApplicationScoped; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.lang.reflect.InvocationTargetException; -@ApplicationScoped public class SuportaValidacaoValidator implements ConstraintValidator { private SuportaValidacao constraintAnnotation; @@ -13,7 +11,7 @@ public class SuportaValidacaoValidator implements ConstraintValidator Membro.novoMembro(UUID.randomUUID().toString())); + + apiTestSupport + .newAuthenticatedRequest() + .log().everything() + .contentType(ContentType.JSON) + .body(payload) + .put("/resources/membros/{id}/user", Map.of("id", membro.id)) + .then() + .log().everything() + .statusCode(Response.Status.BAD_REQUEST.getStatusCode()); + + + } + + static Stream invalidInputs(){ + return Stream.of( + arguments( + "quando username for omitido", + """ + { + "senha": "abcd", + "confirmacaoSenha": "abcd" + } + """ + ), + arguments( + "quando username for vazio", + """ + { + "username": "", + "senha": "abcd", + "confirmacaoSenha": "abcd" + } + """ + ), + arguments( + "quando username estiver em branco", + """ + { + "username": " ", + "senha": "abcd", + "confirmacaoSenha": "abcd" + } + """ + ), + arguments( + "quando senha for omitida", + """ + { + "username": "ze" + "senha": "abcd", + "confirmacaoSenha": "abcd" + } + """ + ), + arguments( + "quando senha estiver vazia", + """ + { + "username": "ze" + "senha": "", + "confirmacaoSenha": "" + } + """ + ), + arguments( + "quando senha estiver em branco", + """ + { + "username": " ", + "senha": " ", + "confirmacaoSenha": " " + } + """ + ), + arguments( + "quando a senha e confirmacaoSenha não forem iguais", + """ + { + "username": "ze", + "senha": "234234", + "confirmacaoSenha": "fjvdfvfdn" + } + """ + ) + ); + } + } diff --git a/src/test/java/io/github/arrudalabs/mizudo/validation/DeveSerIdValidoValidatorTest.java b/src/test/java/io/github/arrudalabs/mizudo/validation/DeveSerIdValidoValidatorTest.java index 581d9c7..fb520e8 100644 --- a/src/test/java/io/github/arrudalabs/mizudo/validation/DeveSerIdValidoValidatorTest.java +++ b/src/test/java/io/github/arrudalabs/mizudo/validation/DeveSerIdValidoValidatorTest.java @@ -12,6 +12,7 @@ import javax.inject.Inject; import javax.transaction.SystemException; +import javax.validation.Validator; import java.util.UUID; import java.util.stream.Stream; @@ -26,7 +27,7 @@ class DeveSerIdValidoValidatorTest { TestSupport testSupport; @Inject - DeveSerIdValidoValidator validator; + Validator validator; @Test @DisplayName("testando isValid() quando o membroId for válido") @@ -36,7 +37,7 @@ public void testIsValidWhenMembroIdIsValid() { } @AfterEach - public void apagarMembrosCriadosNesteTeste(){ + public void apagarMembrosCriadosNesteTeste() { testSupport.execute(Membro::removerTodosMembros); } @@ -49,7 +50,10 @@ public void testIsValidWhenMembroIdIsInvalid(String cenario, } private void testIsValid(Long membroId, boolean ehValido) { - assertThat(validator.isValid(membroId, null), is(ehValido)); + assertThat(validator.validate(new DTO(membroId)), ehValido ? empty() : not(empty())); + } + + record DTO(@DeveSerIdValido(entityClass = Membro.class, message = "membro inválido") Long membroId) { } static Stream testIsValidWhenMembroIdIsInvalidArgs() throws SystemException { diff --git a/src/test/java/io/github/arrudalabs/mizudo/validation/SuportaValidacaoValidatorTest.java b/src/test/java/io/github/arrudalabs/mizudo/validation/SuportaValidacaoValidatorTest.java index a2eddf3..b64a916 100644 --- a/src/test/java/io/github/arrudalabs/mizudo/validation/SuportaValidacaoValidatorTest.java +++ b/src/test/java/io/github/arrudalabs/mizudo/validation/SuportaValidacaoValidatorTest.java @@ -1,6 +1,7 @@ package io.github.arrudalabs.mizudo.validation; import io.quarkus.test.junit.QuarkusTest; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import javax.inject.Inject; @@ -8,7 +9,6 @@ import javax.validation.constraints.NotBlank; import java.util.Objects; -import java.util.function.Predicate; import static org.junit.jupiter.api.Assertions.*; @@ -19,24 +19,32 @@ class SuportaValidacaoValidatorTest { Validator validator; @Test - void test() { - assertFalse(validator.validate(new Pojo(null,"ewrw")).isEmpty()); + @DisplayName("o TipoA deveria estar inválido") + void test1() { + assertFalse(validator.validate(new TipoA(null, "ewrw")).isEmpty()); + } + + @Test + @DisplayName("o TipoA deveria estar válido") + void test2() { + assertTrue(validator.validate(new TipoA("ewrw", "ewrw")).isEmpty()); } @SuportaValidacao( message = "Pojo invalido - atributos diferentes", - classeValidadora = Pojo.PojoValidator.class + classeValidadora = TipoA.PojoValidator.class ) - static record Pojo(@NotBlank String atributo1, - @NotBlank String atributo2) { + static record TipoA(@NotBlank String atributo1, + @NotBlank String atributo2) { - public static class PojoValidator implements Predicate { + public static class PojoValidator implements Validacao { @Override - public boolean test(Pojo o) { - return Objects.nonNull(o) - && Objects.equals(o.atributo1, o.atributo2); + public boolean estahValido(Object object) { + if(object instanceof TipoA o) + return Objects.equals(o.atributo1, o.atributo2); + return false; } }