Pull request #680: RED-6289 - Validate watermark color

Merge in RED/persistence-service from RED-6289 to master

* commit '5c83d67e4d53e650f844e02c358a3c2271fef1c2':
  RED-6289 - Validate watermark color - move up the validation of colors and opacity
  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
This commit is contained in:
Corina Olariu 2023-04-26 09:15:54 +02:00
commit 98084fbebd
2 changed files with 88 additions and 2 deletions

View File

@ -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<WatermarkEntity> 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");

View File

@ -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() {