RED-2431 Bugfix: Allow only ASCII character in watermark text and extended watermark test

This commit is contained in:
Philipp Schramm 2021-12-08 08:49:30 +01:00
parent f78cc5816a
commit 1746b1ac44
2 changed files with 88 additions and 18 deletions

View File

@ -1,42 +1,64 @@
package com.iqser.red.service.persistence.management.v1.processor.service; package com.iqser.red.service.persistence.management.v1.processor.service;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity; import javax.transaction.Transactional;
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 org.apache.commons.lang3.StringUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; 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 @Slf4j
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class WatermarkService { public class WatermarkService {
private final WatermarkRepository watermarkRepository; private final WatermarkRepository watermarkRepository;
public void deleteWatermark(String dossierTemplateId) { public void deleteWatermark(String dossierTemplateId) {
watermarkRepository.deleteById(dossierTemplateId); watermarkRepository.deleteById(dossierTemplateId);
} }
public WatermarkEntity getWatermark(String 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 @Transactional
public WatermarkEntity saveWatermark(String dossierTemplateId, WatermarkEntity watermark) { public WatermarkEntity saveWatermark(String dossierTemplateId, WatermarkEntity watermark) {
watermarkRepository.findById(dossierTemplateId).ifPresentOrElse( validateWatermark(watermark);
loadedWatermark -> BeanUtils.copyProperties(watermark, loadedWatermark, "dossierTemplateId") watermarkRepository.findById(dossierTemplateId)
, () -> { .ifPresentOrElse(loadedWatermark -> BeanUtils.copyProperties(watermark, loadedWatermark, "dossierTemplateId"), () -> {
watermark.setDossierTemplateId(dossierTemplateId); watermark.setDossierTemplateId(dossierTemplateId);
watermarkRepository.save(watermark); 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");
}
}
} }

View File

@ -1,15 +1,18 @@
package com.iqser.red.service.peristence.v1.server.integration.tests; 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.client.WatermarkClient;
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; 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.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.Watermark;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.WatermarkOrientation; 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 { public class WatermarkTest extends AbstractPersistenceServerServiceTest {
@ -19,6 +22,7 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest {
@Autowired @Autowired
private WatermarkClient watermarkClient; private WatermarkClient watermarkClient;
@Test @Test
public void testWatermark() { public void testWatermark() {
@ -29,9 +33,8 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest {
assertThat(e.status()).isEqualTo(404); assertThat(e.status()).isEqualTo(404);
} }
Watermark watermark = new Watermark(); 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.setFontSize(12);
watermark.setFontType("font"); watermark.setFontType("font");
watermark.setHexColor("#dddddd"); watermark.setHexColor("#dddddd");
@ -52,8 +55,53 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest {
} catch (FeignException.FeignClientException e) { } catch (FeignException.FeignClientException e) {
assertThat(e.status()).isEqualTo(404); 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);
} }
} }