From afb4075fdc8564cbcbb566eae8190ddb1d2de4fb Mon Sep 17 00:00:00 2001 From: devplant Date: Tue, 25 Apr 2023 11:54:20 +0300 Subject: [PATCH] RED-6289 - Validate watermark color - validate the watermark color and in case of missing setting set the default one to black - also set a default opacity in case the setting is an invalid one --- .../processor/service/WatermarkService.java | 23 +++++++ .../integration/tests/WatermarkTest.java | 67 +++++++++++++++++++ 2 files changed, 90 insertions(+) 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..0c71e1d47 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; @@ -59,6 +62,8 @@ public class WatermarkService { if (loadedWatermark.isPresent()) { validateDossierTemplateId(watermark.getDossierTemplateId(), loadedWatermark.get().getDossierTemplateId()); validateWatermarkNameIsUnique(watermark.getName(), loadedWatermark.get().getDossierTemplateId(), loadedWatermark.get().getId()); + validateHexColorAndSetDefaultIfNeeded(watermark); + validateOpacityAndSetDefaultIfNeeded(watermark); BeanUtils.copyProperties(watermark, loadedWatermark.get(), "dossierTemplateId", "createdBy", "dateAdded", "dateModified"); loadedWatermark.get().setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(loadedWatermark.get().getDossierTemplateId()); @@ -67,6 +72,8 @@ public class WatermarkService { } else { // if not found by id -> add it as a new watermark validateDossierTemplateId(watermark.getDossierTemplateId(), null); validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), 0); + validateHexColorAndSetDefaultIfNeeded(watermark); + validateOpacityAndSetDefaultIfNeeded(watermark); WatermarkEntity watermarkEntity = new WatermarkEntity(); BeanUtils.copyProperties(watermark, watermarkEntity, "id", "dateAdded", "dateModified"); watermarkEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); @@ -77,6 +84,8 @@ public class WatermarkService { } else { validateDossierTemplateId(watermark.getDossierTemplateId(), null); validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), 0); + validateHexColorAndSetDefaultIfNeeded(watermark); + validateOpacityAndSetDefaultIfNeeded(watermark); WatermarkEntity watermarkEntity = new WatermarkEntity(); BeanUtils.copyProperties(watermark, watermarkEntity, "id", "dateAdded", "dateModified"); watermarkEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); @@ -87,6 +96,20 @@ public class WatermarkService { } + 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 validateWatermark(WatermarkModel watermark) { if (StringUtils.isBlank(watermark.getName())) { 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() {