From aca99577f7ceaae949a6172752dc10f7351baa4c Mon Sep 17 00:00:00 2001 From: josdem Date: Mon, 19 Aug 2024 11:03:28 -0400 Subject: [PATCH 1/8] #283 Adding adoption validator --- src/main/resources/i18n/messages.properties | 1 + src/main/resources/i18n/messages_es.properties | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties index e0f5a2ba..771c488e 100644 --- a/src/main/resources/i18n/messages.properties +++ b/src/main/resources/i18n/messages.properties @@ -146,6 +146,7 @@ adoption.mobile=What is your phone number? adoption.email.sent=An email was sent to the owner's pet in adoption, please wait for news adoption.thanks=Hello, thanks for adopting: adoption.wishes=We are glad you found a new family member, we hope you enjoy time together. +adoption.error.uuid.invalid=UUID format is not valid vet.view.search.title=Search by username vet.list=Search diff --git a/src/main/resources/i18n/messages_es.properties b/src/main/resources/i18n/messages_es.properties index 67ab998f..296f0f2c 100644 --- a/src/main/resources/i18n/messages_es.properties +++ b/src/main/resources/i18n/messages_es.properties @@ -149,6 +149,7 @@ adoption.mobile=Proporciona tu teléfono adoption.email.sent=Un correo electrónico fue enviado al propietario de la mascota en adopción, por favor espera por noticias adoption.thanks=Hola, gracias por adoptar adoption.wishes=Estamos felices que has encontrado un nuevo miembro de la familia, esperamos que disfruten de esta nueva etapa juntos. +adoption.error.uuid.invalid=El formato UUID no es válido vet.view.search.title=Buscar por usuario vet.list=Buscar From af281c927d4379a3696d855bf5ff810324c1cc23 Mon Sep 17 00:00:00 2001 From: josdem Date: Mon, 19 Aug 2024 11:03:43 -0400 Subject: [PATCH 2/8] #283 Adding adoption validator --- .../vetlog/validator/AdoptionValidator.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/main/java/com/josdem/vetlog/validator/AdoptionValidator.java diff --git a/src/main/java/com/josdem/vetlog/validator/AdoptionValidator.java b/src/main/java/com/josdem/vetlog/validator/AdoptionValidator.java new file mode 100644 index 00000000..03871852 --- /dev/null +++ b/src/main/java/com/josdem/vetlog/validator/AdoptionValidator.java @@ -0,0 +1,41 @@ +/* +Copyright 2024 Jose Morales contact@josdem.io + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + */ + +package com.josdem.vetlog.validator; + +import com.josdem.vetlog.command.AdoptionCommand; +import org.springframework.stereotype.Component; +import org.springframework.validation.Errors; +import org.springframework.validation.Validator; + +@Component +public class AdoptionValidator implements Validator { + + private static final String REGEX = "[a-f0-9]{8}(?:-[a-f0-9]{4}){4}[a-f0-9]{8}"; + + @Override + public boolean supports(Class clazz) { + return AdoptionCommand.class.equals(clazz); + } + + @Override + public void validate(Object target, Errors errors) { + AdoptionCommand adoptionCommand = (AdoptionCommand) target; + if(!adoptionCommand.getUuid().matches(REGEX)){ + errors.rejectValue("uuid", "adoption.error.uuid.invalid"); + } + } +} \ No newline at end of file From c047be552b83deaaf864aa945221cd3bb922e22c Mon Sep 17 00:00:00 2001 From: josdem Date: Mon, 19 Aug 2024 11:05:24 -0400 Subject: [PATCH 3/8] #293 Adding validator to the controller --- .../java/com/josdem/vetlog/command/AdoptionCommand.java | 2 -- .../com/josdem/vetlog/controller/AdoptionController.java | 9 +++++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/josdem/vetlog/command/AdoptionCommand.java b/src/main/java/com/josdem/vetlog/command/AdoptionCommand.java index 964e6f5d..cbfb30c9 100644 --- a/src/main/java/com/josdem/vetlog/command/AdoptionCommand.java +++ b/src/main/java/com/josdem/vetlog/command/AdoptionCommand.java @@ -14,7 +14,6 @@ package com.josdem.vetlog.command; -import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; import lombok.Getter; import lombok.Setter; @@ -23,7 +22,6 @@ @Setter public class AdoptionCommand implements Command { - @NotNull private String uuid; @Size(min = 1, max = 1000) diff --git a/src/main/java/com/josdem/vetlog/controller/AdoptionController.java b/src/main/java/com/josdem/vetlog/controller/AdoptionController.java index 1a4f791a..87c936f7 100644 --- a/src/main/java/com/josdem/vetlog/controller/AdoptionController.java +++ b/src/main/java/com/josdem/vetlog/controller/AdoptionController.java @@ -21,6 +21,7 @@ import com.josdem.vetlog.model.Pet; import com.josdem.vetlog.service.AdoptionService; import com.josdem.vetlog.service.PetService; +import com.josdem.vetlog.validator.AdoptionValidator; import jakarta.validation.Valid; import java.util.List; import lombok.RequiredArgsConstructor; @@ -28,7 +29,9 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; +import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @@ -41,6 +44,7 @@ public class AdoptionController { private final PetService petService; private final AdoptionService adoptionService; + private final AdoptionValidator adoptionValidator; @Value("${gcpUrl}") private String gcpUrl; @@ -48,6 +52,11 @@ public class AdoptionController { @Value("${imageBucket}") private String imageBucket; + @InitBinder("adoptionCommand") + private void initBinder(WebDataBinder binder) { + binder.addValidators(adoptionValidator); + } + @GetMapping(value = "/descriptionForAdoption") public ModelAndView descriptionForAdoption(AdoptionCommand adoptionCommand) { log.info("Adding description to pet with uuid: " + adoptionCommand.getUuid()); From 3e4848da06f3eee52b672b7d85b37a1562d864f2 Mon Sep 17 00:00:00 2001 From: josdem Date: Mon, 19 Aug 2024 11:21:01 -0400 Subject: [PATCH 4/8] #293 Adding adoption validator test --- .../vetlog/validator/AdoptionValidator.java | 4 +- .../AdoptionCommandValidatorTest.java | 57 +++++++++++++++++++ 2 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/josdem/vetlog/validator/AdoptionCommandValidatorTest.java diff --git a/src/main/java/com/josdem/vetlog/validator/AdoptionValidator.java b/src/main/java/com/josdem/vetlog/validator/AdoptionValidator.java index 03871852..4b9f77c5 100644 --- a/src/main/java/com/josdem/vetlog/validator/AdoptionValidator.java +++ b/src/main/java/com/josdem/vetlog/validator/AdoptionValidator.java @@ -34,8 +34,8 @@ public boolean supports(Class clazz) { @Override public void validate(Object target, Errors errors) { AdoptionCommand adoptionCommand = (AdoptionCommand) target; - if(!adoptionCommand.getUuid().matches(REGEX)){ + if (!adoptionCommand.getUuid().matches(REGEX)) { errors.rejectValue("uuid", "adoption.error.uuid.invalid"); } } -} \ No newline at end of file +} diff --git a/src/test/java/com/josdem/vetlog/validator/AdoptionCommandValidatorTest.java b/src/test/java/com/josdem/vetlog/validator/AdoptionCommandValidatorTest.java new file mode 100644 index 00000000..c65d6025 --- /dev/null +++ b/src/test/java/com/josdem/vetlog/validator/AdoptionCommandValidatorTest.java @@ -0,0 +1,57 @@ +/* +Copyright 2024 Jose Morales contact@josdem.io + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + */ + +package com.josdem.vetlog.validator; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +import com.josdem.vetlog.command.AdoptionCommand; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInfo; +import org.springframework.validation.Errors; + +@Slf4j +class AdoptionCommandValidatorTest { + + private final String UUID = "21740c48-13f9-4bf4-a8a2-ef61b7d3cdc3"; + private final AdoptionValidator adoptionValidator = new AdoptionValidator(); + + @Test + @DisplayName("rejecting adoption command with invalid uuid") + void shouldSupportAdoptionCommand(TestInfo testInfo) { + log.info("Running: {}", testInfo.getDisplayName()); + AdoptionCommand adoptionCommand = new AdoptionCommand(); + Errors errors = mock(Errors.class); + adoptionCommand.setUuid("uuid"); + adoptionValidator.validate(adoptionCommand, errors); + verify(errors).rejectValue("uuid", "adoption.error.uuid.invalid"); + } + + @Test + @DisplayName("validating adoption command with valid uuid") + void shouldValidateWithValidUuid(TestInfo testInfo) { + log.info("Running: {}", testInfo.getDisplayName()); + AdoptionCommand adoptionCommand = new AdoptionCommand(); + Errors errors = mock(Errors.class); + adoptionCommand.setUuid(UUID); + adoptionValidator.validate(adoptionCommand, errors); + verify(errors, never()).rejectValue("uuid", "adoption.error.uuid.invalid"); + } +} From 050118402484b59c81f96088dbbf5925e14166f1 Mon Sep 17 00:00:00 2001 From: josdem Date: Mon, 19 Aug 2024 11:21:28 -0400 Subject: [PATCH 5/8] #293 Updating version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 88f617fc..fa016254 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ ext { } group = 'com.josdem.vetlog' -version = '1.6.6' +version = '1.6.7' configurations { compileOnly { From 93bec3b48b313b6cc4d170188ca09305380e78a5 Mon Sep 17 00:00:00 2001 From: josdem Date: Mon, 19 Aug 2024 11:28:16 -0400 Subject: [PATCH 6/8] #293 Changing method signature --- .../josdem/vetlog/validator/AdoptionCommandValidatorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/josdem/vetlog/validator/AdoptionCommandValidatorTest.java b/src/test/java/com/josdem/vetlog/validator/AdoptionCommandValidatorTest.java index c65d6025..0e113602 100644 --- a/src/test/java/com/josdem/vetlog/validator/AdoptionCommandValidatorTest.java +++ b/src/test/java/com/josdem/vetlog/validator/AdoptionCommandValidatorTest.java @@ -35,7 +35,7 @@ class AdoptionCommandValidatorTest { @Test @DisplayName("rejecting adoption command with invalid uuid") - void shouldSupportAdoptionCommand(TestInfo testInfo) { + void shouldRejectDueToInvalidUuid(TestInfo testInfo) { log.info("Running: {}", testInfo.getDisplayName()); AdoptionCommand adoptionCommand = new AdoptionCommand(); Errors errors = mock(Errors.class); From bb0038cd63e66c9dc221eae0b6be577f1acd7b01 Mon Sep 17 00:00:00 2001 From: josdem Date: Mon, 19 Aug 2024 11:30:33 -0400 Subject: [PATCH 7/8] #293 Adding missing static keyword --- .../josdem/vetlog/validator/AdoptionCommandValidatorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/josdem/vetlog/validator/AdoptionCommandValidatorTest.java b/src/test/java/com/josdem/vetlog/validator/AdoptionCommandValidatorTest.java index 0e113602..137b3d44 100644 --- a/src/test/java/com/josdem/vetlog/validator/AdoptionCommandValidatorTest.java +++ b/src/test/java/com/josdem/vetlog/validator/AdoptionCommandValidatorTest.java @@ -30,7 +30,7 @@ @Slf4j class AdoptionCommandValidatorTest { - private final String UUID = "21740c48-13f9-4bf4-a8a2-ef61b7d3cdc3"; + private static final String UUID = "21740c48-13f9-4bf4-a8a2-ef61b7d3cdc3"; private final AdoptionValidator adoptionValidator = new AdoptionValidator(); @Test From 3a9ed0899d624fc8b59283897d2da0fc996820fc Mon Sep 17 00:00:00 2001 From: josdem Date: Mon, 19 Aug 2024 11:41:32 -0400 Subject: [PATCH 8/8] #293 Choosing a better name --- ...tionCommandValidatorTest.java => AdoptionValidatorTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/test/java/com/josdem/vetlog/validator/{AdoptionCommandValidatorTest.java => AdoptionValidatorTest.java} (98%) diff --git a/src/test/java/com/josdem/vetlog/validator/AdoptionCommandValidatorTest.java b/src/test/java/com/josdem/vetlog/validator/AdoptionValidatorTest.java similarity index 98% rename from src/test/java/com/josdem/vetlog/validator/AdoptionCommandValidatorTest.java rename to src/test/java/com/josdem/vetlog/validator/AdoptionValidatorTest.java index 137b3d44..6e39700a 100644 --- a/src/test/java/com/josdem/vetlog/validator/AdoptionCommandValidatorTest.java +++ b/src/test/java/com/josdem/vetlog/validator/AdoptionValidatorTest.java @@ -28,7 +28,7 @@ import org.springframework.validation.Errors; @Slf4j -class AdoptionCommandValidatorTest { +class AdoptionValidatorTest { private static final String UUID = "21740c48-13f9-4bf4-a8a2-ef61b7d3cdc3"; private final AdoptionValidator adoptionValidator = new AdoptionValidator();