diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java index 3615f6c95..f0d7dbce9 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java @@ -18,6 +18,7 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.NotFo import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.WatermarkRepository; +import com.iqser.red.service.persistence.management.v1.processor.utils.ColorUtils; import com.iqser.red.service.persistence.service.v1.api.shared.model.WatermarkModel; import lombok.RequiredArgsConstructor; @@ -28,6 +29,8 @@ import lombok.extern.slf4j.Slf4j; @RequiredArgsConstructor public class WatermarkService { + private final static String DEFAULT_HEX_COLOR = "#000000"; + private final static int DEFAULT_OPACITY = 30; private final WatermarkRepository watermarkRepository; private final DossierRepository dossierRepository; private final DossierTemplatePersistenceService dossierTemplatePersistenceService; @@ -53,7 +56,9 @@ public class WatermarkService { @Transactional public WatermarkEntity createOrUpdateWatermark(WatermarkModel watermark) { - validateWatermark(watermark); + validateWatermarkNameIsPresent(watermark); + validateHexColorAndSetDefaultIfNeeded(watermark); + validateOpacityAndSetDefaultIfNeeded(watermark); if (watermark.getId() != null) { // update Optional loadedWatermark = watermarkRepository.findById(watermark.getId()); if (loadedWatermark.isPresent()) { @@ -87,7 +92,21 @@ public class WatermarkService { } - private void validateWatermark(WatermarkModel watermark) { + private void validateOpacityAndSetDefaultIfNeeded(WatermarkModel watermark) { + if (watermark.getOpacity() < 0) { + watermark.setOpacity(DEFAULT_OPACITY); + } + } + + private void validateHexColorAndSetDefaultIfNeeded(WatermarkModel watermark) { + if (StringUtils.isBlank(watermark.getHexColor())) { + watermark.setHexColor(DEFAULT_HEX_COLOR); + } + + ColorUtils.validateColor(watermark.getHexColor()); + } + + private void validateWatermarkNameIsPresent(WatermarkModel watermark) { if (StringUtils.isBlank(watermark.getName())) { throw new BadRequestException("The watermark name must not be empty"); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/WatermarkTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/WatermarkTest.java index 07ca9b4d6..5f59db92c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/WatermarkTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/WatermarkTest.java @@ -2,6 +2,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -198,6 +199,72 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { var loadedWatermark2 = watermarkClient.getWatermark(saved.getId()); } + @Test + public void testCreateWatermarkWithInvalidHexColor() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + var color = "000000"; + var watermark = new WatermarkModel(); + watermark.setName("watermark name"); + watermark.setText("Minions ipsum chasy para tu la bodaaa bananaaaa hana dul sae. Chasy hana dul sae pepete hana dul sae belloo! Tatata bala tu ti aamoo! Jeje."); + watermark.setFontSize(12); + watermark.setFontType("font"); + watermark.setHexColor(color); + watermark.setOrientation(WatermarkOrientation.DIAGONAL); + watermark.setDossierTemplateId(dossierTemplate.getId()); + + Exception exception = Assertions.assertThrows(FeignException.BadRequest.class, () -> { + watermarkClient.saveWatermark(watermark); + }); + + String expectedMessage = "The specified color: " + color + " is malformed."; + String actualMessage = exception.getMessage(); + + assertThat(actualMessage).contains(expectedMessage); + + watermark.setHexColor(null); + var saved2 = watermarkClient.saveWatermark(watermark); + + assertThat(saved2.getHexColor()).isEqualTo("#000000"); + } + + + @Test + public void testCreateWatermarkWithDifferentOpacities() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + // create watermark with no opacity set + var color = "#000000"; + var watermark = new WatermarkModel(); + watermark.setName("watermark name"); + watermark.setText("Minions ipsum chasy para tu la bodaaa bananaaaa hana dul sae. Chasy hana dul sae pepete hana dul sae belloo! Tatata bala tu ti aamoo! Jeje."); + watermark.setFontSize(12); + watermark.setFontType("font"); + watermark.setHexColor(color); + watermark.setOrientation(WatermarkOrientation.DIAGONAL); + watermark.setDossierTemplateId(dossierTemplate.getId()); + assertThat(watermark.getOpacity()).isEqualTo(0); + + var saved2 = watermarkClient.saveWatermark(watermark); + + assertThat(saved2.getOpacity()).isEqualTo(0); + + // create watermark with invalid opacity + var watermark2 = new WatermarkModel(); + watermark2.setName("watermark name2"); + watermark2.setText("Minions ipsum chasy para tu la bodaaa bananaaaa hana dul sae. Chasy hana dul sae pepete hana dul sae belloo! Tatata bala tu ti aamoo! Jeje."); + watermark2.setFontSize(14); + watermark2.setFontType("font"); + watermark2.setHexColor(color); + watermark2.setOrientation(WatermarkOrientation.DIAGONAL); + watermark2.setDossierTemplateId(dossierTemplate.getId()); + watermark2.setOpacity(-1); + + saved2 = watermarkClient.saveWatermark(watermark2); + + assertThat(saved2.getOpacity()).isEqualTo(30); + } @Test public void testWatermarkTextWithJapaneseText() {