From 1746b1ac4498a191ce61d7dcbc91a39800187fc1 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Wed, 8 Dec 2021 08:49:30 +0100 Subject: [PATCH] RED-2431 Bugfix: Allow only ASCII character in watermark text and extended watermark test --- .../processor/service/WatermarkService.java | 46 ++++++++++---- .../integration/tests/WatermarkTest.java | 60 +++++++++++++++++-- 2 files changed, 88 insertions(+), 18 deletions(-) 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 b4f32a60f..5ca1675e8 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 @@ -1,42 +1,64 @@ package com.iqser.red.service.persistence.management.v1.processor.service; -import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity; -import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.WatermarkRepository; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; +import javax.transaction.Transactional; + +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; -import javax.transaction.Transactional; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity; +import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; +import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.WatermarkRepository; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; @Slf4j @Service @RequiredArgsConstructor public class WatermarkService { - private final WatermarkRepository watermarkRepository; + public void deleteWatermark(String dossierTemplateId) { watermarkRepository.deleteById(dossierTemplateId); } + public WatermarkEntity getWatermark(String dossierTemplateId) { - return watermarkRepository.findById(dossierTemplateId).orElseThrow(() -> new NotFoundException("Watermark Configuration not found")); + + return watermarkRepository.findById(dossierTemplateId) + .orElseThrow(() -> new NotFoundException("Watermark Configuration not found")); } + @Transactional public WatermarkEntity saveWatermark(String dossierTemplateId, WatermarkEntity watermark) { - watermarkRepository.findById(dossierTemplateId).ifPresentOrElse( - loadedWatermark -> BeanUtils.copyProperties(watermark, loadedWatermark, "dossierTemplateId") - , () -> { + validateWatermark(watermark); + watermarkRepository.findById(dossierTemplateId) + .ifPresentOrElse(loadedWatermark -> BeanUtils.copyProperties(watermark, loadedWatermark, "dossierTemplateId"), () -> { watermark.setDossierTemplateId(dossierTemplateId); watermarkRepository.save(watermark); }); - return watermarkRepository.findById(dossierTemplateId).orElseThrow(() -> new NotFoundException("Watermark not found")); + return watermarkRepository.findById(dossierTemplateId) + .orElseThrow(() -> new NotFoundException("Watermark not found")); } + + + private void validateWatermark(WatermarkEntity watermark) { + + if (watermark == null) { + throw new BadRequestException("The watermark may not be null"); + } + if (!StringUtils.isAsciiPrintable(StringUtils.normalizeSpace(watermark.getText()))) { + throw new BadRequestException("The watermark may only contain ASCII characters"); + } + + } + } 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 9e6d36dbd..0d97ea094 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 @@ -1,15 +1,18 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertThrows; + +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + import com.iqser.red.service.peristence.v1.server.integration.client.WatermarkClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Watermark; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.WatermarkOrientation; -import feign.FeignException; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; -import static org.assertj.core.api.Assertions.assertThat; +import feign.FeignException; public class WatermarkTest extends AbstractPersistenceServerServiceTest { @@ -19,6 +22,7 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { @Autowired private WatermarkClient watermarkClient; + @Test public void testWatermark() { @@ -29,9 +33,8 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { assertThat(e.status()).isEqualTo(404); } - Watermark watermark = new Watermark(); - watermark.setText("lorem ipsum"); + 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("#dddddd"); @@ -52,8 +55,53 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { } catch (FeignException.FeignClientException e) { assertThat(e.status()).isEqualTo(404); } + } + @Test + public void testWatermarkTextWithWrongText() { + + // Arrange + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + var watermarkText = "This is not an ASCII text äöüÄÖÜéèê... \nand many more...\r May the force with you! "; + + Watermark watermark = new Watermark(); + watermark.setFontSize(12); + watermark.setFontType("font"); + watermark.setHexColor("#dddddd"); + watermark.setOpacity(20); + watermark.setOrientation(WatermarkOrientation.DIAGONAL); + watermark.setText(watermarkText); + + // Act + FeignException exception = assertThrows(FeignException.class, () -> watermarkClient.saveWatermark(dossierTemplate.getId(), watermark)); + + // Assert + assertThat(exception.status()).isEqualTo(400); + } + + + @Test + public void testWatermarkTextWithCorrectText() { + + // Arrange + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + var watermarkText = "We love ASCII!\n\nThis text contains only ASCII chars and newlines\r\r\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; + + Watermark watermark = new Watermark(); + watermark.setFontSize(12); + watermark.setFontType("font"); + watermark.setHexColor("#dddddd"); + watermark.setOpacity(20); + watermark.setOrientation(WatermarkOrientation.DIAGONAL); + watermark.setText(watermarkText); + + // Act + var saved = watermarkClient.saveWatermark(dossierTemplate.getId(), watermark); + + // Assert + assertThat(watermarkClient.getWatermark(dossierTemplate.getId())).isEqualTo(saved); + assertThat(watermarkClient.getWatermark(dossierTemplate.getId()).getText()).isEqualTo(watermarkText); } }