diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/AddRedactionRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/AddRedactionRequest.java index fe3f247f6..f08fb5d35 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/AddRedactionRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/AddRedactionRequest.java @@ -29,4 +29,6 @@ public class AddRedactionRequest { private List positions = new ArrayList<>(); private String comment; + + //TODO: forceAddToDictionary flag? } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/DictionaryEntry.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/DictionaryEntry.java index 50a352277..16be285e6 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/DictionaryEntry.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/DictionaryEntry.java @@ -1,5 +1,6 @@ package com.iqser.red.service.persistence.service.v1.api.model.data.configuration; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import javax.persistence.*; @@ -19,6 +20,7 @@ public class DictionaryEntry { @Column private boolean deleted; + @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) private Type type; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/Type.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/Type.java index fac967464..0aff516a4 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/Type.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/Type.java @@ -1,5 +1,7 @@ package com.iqser.red.service.persistence.service.v1.api.model.data.configuration; +import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierTemplate; import lombok.Data; @@ -16,8 +18,7 @@ import static javax.persistence.CascadeType.ALL; public class Type { @Id - private String id; // das ist jetzt UUID - // type + dossierId oder type + templateId + private String id; @Column private String type; @Column @@ -43,12 +44,16 @@ public class Type { private List entries = new ArrayList<>(); @ManyToOne + @JsonIgnore + @JoinColumn(name = "dossier_template_id") private DossierTemplate dossierTemplate; @Column(updatable = false, insertable = false, name = "dossier_template_id") private String dossierTemplateId; @ManyToOne + @JsonIgnore + @JoinColumn(name = "dossier_id") private Dossier dossier; @Column(updatable = false, insertable = false, name = "dossier_id") diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/DossierTemplate.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/DossierTemplate.java index c35008344..7f1cc17d6 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/DossierTemplate.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/DossierTemplate.java @@ -1,5 +1,6 @@ package com.iqser.red.service.persistence.service.v1.api.model.data.dossier; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.Type; import lombok.Data; @@ -53,8 +54,10 @@ public class DossierTemplate { private List reportTemplates = new ArrayList<>(); @OneToMany + @JsonIgnore private List dossierTypes = new ArrayList<>(); @OneToMany + @JsonIgnore private List dossiers = new ArrayList<>(); } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DictionaryResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DictionaryResource.java index 5bdc3bb2a..3c9d71128 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DictionaryResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DictionaryResource.java @@ -1,6 +1,7 @@ package com.iqser.red.service.persistence.service.v1.api.resources; import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.Colors; +import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.DictionaryEntry; import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.Type; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -26,36 +27,37 @@ public interface DictionaryResource { String COLOR_PATH = "/color"; String VERSION_PATH = "/version"; + String ENTRIES_PATH = "/entries"; @ResponseStatus(HttpStatus.NO_CONTENT) - @PostMapping(value = DICTIONARY_PATH + TYPE_PATH_VARIABLE + DOSSIER_TEMPLATE_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = DICTIONARY_PATH + TYPE_PATH_VARIABLE , consumes = MediaType.APPLICATION_JSON_VALUE) void addEntries(@PathVariable(TYPE_PARAMETER_NAME) String typeId, @RequestBody List entries, @RequestParam(value = "removeCurrent", required = false, defaultValue = "false") boolean removeCurrent); @ResponseStatus(HttpStatus.NO_CONTENT) - @DeleteMapping(value = DICTIONARY_PATH + TYPE_PATH_VARIABLE + DOSSIER_TEMPLATE_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) + @DeleteMapping(value = DICTIONARY_PATH + TYPE_PATH_VARIABLE , consumes = MediaType.APPLICATION_JSON_VALUE) void deleteEntries(@PathVariable(TYPE_PARAMETER_NAME) String typeId, @RequestBody List entries); @ResponseStatus(HttpStatus.NO_CONTENT) - @PostMapping(value = TYPE_PATH + TYPE_PATH_VARIABLE + DOSSIER_TEMPLATE_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = TYPE_PATH + TYPE_PATH_VARIABLE , consumes = MediaType.APPLICATION_JSON_VALUE) void updateTypeValue(@PathVariable(TYPE_PARAMETER_NAME) String typeId, @RequestBody Type typeValue); - @ResponseStatus(HttpStatus.NO_CONTENT) - @PostMapping(value = TYPE_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) - void addType(@RequestBody Type typeValue); + @ResponseStatus(HttpStatus.CREATED) + @PostMapping(value = TYPE_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + Type addType(@RequestBody Type typeValue); @ResponseStatus(HttpStatus.NO_CONTENT) - @DeleteMapping(value = TYPE_PATH + TYPE_PATH_VARIABLE + DOSSIER_TEMPLATE_PATH_VARIABLE) + @DeleteMapping(value = TYPE_PATH + TYPE_PATH_VARIABLE ) void deleteType(@PathVariable(TYPE_PARAMETER_NAME) String typeId); @@ -66,9 +68,12 @@ public interface DictionaryResource { List getAllTypesForDossier(@PathVariable(DOSSIER_ID_PARAMETER_NAME) String dossierId); - @GetMapping(value = DICTIONARY_PATH + TYPE_PATH_VARIABLE + DOSSIER_TEMPLATE_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) + @GetMapping(value = DICTIONARY_PATH + TYPE_PATH_VARIABLE , produces = MediaType.APPLICATION_JSON_VALUE) Type getDictionaryForType(@PathVariable(TYPE_PARAMETER_NAME) String typeId); + @GetMapping(value = DICTIONARY_PATH + TYPE_PATH_VARIABLE+ENTRIES_PATH , produces = MediaType.APPLICATION_JSON_VALUE) + List getEntriesForType(@PathVariable(TYPE_PARAMETER_NAME) String typeId); + @GetMapping(value = VERSION_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE) long getVersion(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AddRedactionPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AddRedactionPersistenceService.java index e6bf7ad59..afe0a16e6 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AddRedactionPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AddRedactionPersistenceService.java @@ -30,6 +30,7 @@ public class AddRedactionPersistenceService { BeanUtils.copyProperties(addRedactionRequest, manualRedactionEntry); manualRedactionEntry.setRequestDate(OffsetDateTime.now()); manualRedactionEntry.setPositions(addRedactionRequest.getPositions()); + manualRedactionEntry.setTypeId(addRedactionRequest.getType()); manualRedactionRepository.save(manualRedactionEntry); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java index b94d2f1f8..4156b34c0 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java @@ -1,12 +1,13 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence; -import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.Type; 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.DossierRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.TypeRepository; +import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.Type; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -32,6 +33,8 @@ public class DictionaryPersistenceService { checkRankAlreadyExists(type, dossierTemplateId, rank, dossierId); Type t = new Type(); + t.setId(type + ":" + getTypeIdSuffix(dossierTemplateId, dossierId)); + t.setType(type); t.setDossier(dossierId == null ? null : dossierRepository.getOne(dossierId)); t.setDossierTemplate(dossierTemplateRepository.getOne(dossierTemplateId)); t.setHexColor(hexColor); @@ -42,17 +45,26 @@ public class DictionaryPersistenceService { t.setRecommendation(isRecommendation); t.setAddToDictionaryAction(addToDictionaryAction); t.setLabel(label); + t.setVersion(1); return typeRepository.save(t); } + private String getTypeIdSuffix(String dossierTemplateId, String dossierId) { + if (StringUtils.isBlank(dossierTemplateId) && StringUtils.isBlank(dossierId)) { + throw new BadRequestException("Either DossierId or DossierTemplateId is required"); + } + return dossierTemplateId != null ? dossierTemplateId + (dossierId != null ? ":" + dossierId : "") : dossierId; + } + @Transactional - public void updateType(String typeId, Type typeValueRequest){ + public void updateType(String typeId, Type typeValueRequest) { typeRepository.findById(typeId).ifPresent((type) -> { + type.setVersion(type.getVersion() + 1); checkRankAlreadyExists(type.getType(), type.getDossierTemplate().getId(), typeValueRequest.getRank(), type.getDossier() == null ? null : type.getDossier().getId()); - BeanUtils.copyProperties(typeValueRequest, type); + BeanUtils.copyProperties(typeValueRequest, type, "dossierTemplateId", "dossierId", "entries", "dossierTemplate", "dossier", "id", "version"); }); } @@ -73,9 +85,6 @@ public class DictionaryPersistenceService { } - - - public List getAllTypesForDossierTemplate(String dossierTemplateId) { return typeRepository.findByDossierTemplateId(dossierTemplateId); @@ -93,7 +102,7 @@ public class DictionaryPersistenceService { public Type getType(String typeId) { - return typeRepository.findById(typeId).orElseThrow(() -> new NotFoundException("No color found for type : " + typeId)); + return typeRepository.findById(typeId).orElseThrow(() -> new NotFoundException("Type: " + typeId + " not found")); } @@ -107,6 +116,7 @@ public class DictionaryPersistenceService { } } + @Transactional public void incrementVersion(String typeId) { typeRepository.updateByIdSetIncrementVersionByOne(typeId); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java index e3372358c..57da87630 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java @@ -4,8 +4,10 @@ import com.iqser.red.service.persistence.service.v1.api.model.data.configuration import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierTemplate; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; +import javax.transaction.Transactional; import java.util.List; import java.util.Optional; @@ -17,6 +19,7 @@ public interface TypeRepository extends JpaRepository { List findByDossierId(String dossierId); + @Modifying @Query("update Type t set t.version = t.version +1 where t.id = :typeId") void updateByIdSetIncrementVersionByOne(String typeId); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java index b1864e30d..5b6344d9e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java @@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import javax.transaction.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -142,7 +143,7 @@ public class DictionaryController implements DictionaryResource { @Override - public void addType(@RequestBody Type typeRequest) { + public Type addType(@RequestBody Type typeRequest) { if (typeRequest.getDossierTemplateId() == null) { throw new BadRequestException("Dossier template id does not exist."); @@ -162,10 +163,9 @@ public class DictionaryController implements DictionaryResource { } String color = typeRequest.getHexColor(); validateColor(color); - var type = dictionaryPersistenceService.addType(typeRequest.getType(), typeRequest.getDossierTemplateId(), color, typeRequest + return dictionaryPersistenceService.addType(typeRequest.getType(), typeRequest.getDossierTemplateId(), color, typeRequest .getRank(), typeRequest.isHint(), typeRequest.isCaseInsensitive(), typeRequest.isRecommendation(), typeRequest .getDescription(), typeRequest.isAddToDictionaryAction(), typeRequest.getLabel(), typeRequest.getDossierId()); - dictionaryPersistenceService.incrementVersion(type.getId()); } @@ -200,10 +200,16 @@ public class DictionaryController implements DictionaryResource { } @Override - public Type getDictionaryForType(String typeId) { + public Type getDictionaryForType(@PathVariable(TYPE_PARAMETER_NAME) String typeId) { return dictionaryPersistenceService.getType(typeId); } + @Override + @Transactional + public List getEntriesForType(@PathVariable(TYPE_PARAMETER_NAME) String typeId) { + return dictionaryPersistenceService.getType(typeId).getEntries(); + } + private void validateEntries(List entries) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DictionaryClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DictionaryClient.java new file mode 100644 index 000000000..386fd6807 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DictionaryClient.java @@ -0,0 +1,9 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.DictionaryResource; +import com.iqser.red.service.persistence.service.v1.api.resources.UploadResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "DictionaryClient", url = "http://localhost:${server.port}") +public interface DictionaryClient extends DictionaryResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/TypeProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/TypeProvider.java new file mode 100644 index 000000000..08b34c420 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/TypeProvider.java @@ -0,0 +1,48 @@ +package com.iqser.red.service.peristence.v1.server.integration.service; + +import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient; +import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.Type; +import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import static org.assertj.core.api.Assertions.assertThat; + +@Service +public class TypeProvider { + + @Autowired + private DictionaryClient dictionaryClient; + + public Type testAndProvideType(DossierTemplate dossierTemplate, String typeName) { + + var type = new Type(); + type.setType(typeName); + type.setDescription("test"); + type.setAddToDictionaryAction(true); + type.setHexColor("#dddddd"); + type.setHint(false); + type.setRank(100); + type.setRecommendation(false); + type.setLabel("test"); + type.setCaseInsensitive(false); + type.setDossierTemplateId(dossierTemplate.getId()); + + + var createdType = dictionaryClient.addType(type); + + + var loadedType = dictionaryClient.getDictionaryForType(createdType.getId()); + + assertThat(loadedType).isNotNull(); + + + return loadedType; + } + + public Type testAndProvideType(DossierTemplate dossierTemplate) { + return testAndProvideType(dossierTemplate, "test"); + } + + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/AuditTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/AuditTest.java index da0a3cd50..32df5310c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/AuditTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/AuditTest.java @@ -24,7 +24,6 @@ public class AuditTest extends AbstractPersistenceServerServiceTest { @Test public void testAudit() { - assertThat(auditClient.getCategories()).isEmpty(); @@ -37,7 +36,7 @@ public class AuditTest extends AbstractPersistenceServerServiceTest { assertThat(auditClient.getCategories().stream().filter(c -> c.getCategory().equals("c1")).findAny().map(CategoryModel::getRecordCount).get()).isEqualTo(2); assertThat(auditClient.getCategories().stream().filter(c -> c.getCategory().equals("c2")).findAny().map(CategoryModel::getRecordCount).get()).isEqualTo(1); - var result =auditClient.search(AuditSearchRequest.builder().category("c1").page(0).pageSize(10).build()); + var result = auditClient.search(AuditSearchRequest.builder().category("c1").page(0).pageSize(10).build()); assertThat(result.getTotalElements()).isEqualTo(2); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java index b94f6c74e..faf6719e3 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java @@ -3,8 +3,10 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import com.iqser.red.service.peristence.v1.server.integration.client.ManualRedactionClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.service.TypeProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; -import com.iqser.red.service.persistence.service.v1.api.model.CommentRequest; +import com.iqser.red.service.persistence.service.v1.api.model.*; +import com.iqser.red.service.persistence.service.v1.api.model.data.annotations.AnnotationStatus; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -18,6 +20,8 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { @Autowired private DossierTesterAndProvider dossierTesterAndProvider; + @Autowired + private TypeProvider typeProvider; @Autowired private ManualRedactionClient manualRedactionClient; @@ -29,9 +33,46 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { var file = fileTesterAndProvider.testAndProvideFile(dossier); + var type = typeProvider.testAndProvideType(dossier.getDossierTemplate(), "manual"); + + var comment = manualRedactionClient.addComment(dossier.getId(), file.getId(), "1", CommentRequest.builder().text("test").user("1").build()); var loadedComment = manualRedactionClient.getComment(comment.getId()); assertThat(loadedComment.getText()).isEqualTo("test"); + + var addRedaction = manualRedactionClient.addAddRedaction(dossier.getId(), file.getId(), AddRedactionRequest.builder().addToDictionary(true) + .addToDossierDictionary(false).status(AnnotationStatus.REQUESTED).type(type.getId()).user("user").reason("1").value("1").legalBasis("1").build()); + var loadedAddRedaction = manualRedactionClient.getAddRedaction(file.getId(), addRedaction.getAnnotationId()); + assertThat(loadedAddRedaction.getUser()).isEqualTo("user"); + assertThat(loadedAddRedaction.getTypeId()).contains("manual"); + + + var removeRedaction = manualRedactionClient.addRemoveRedaction(dossier.getId(), file.getId(), RemoveRedactionRequest.builder() + .annotationId(addRedaction.getAnnotationId()).comment("comment").status(AnnotationStatus.REQUESTED).user("test").removeFromDictionary(false).build()); + manualRedactionClient.updateRemoveRedactionStatus(dossier.getId(), file.getId(), removeRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.REQUESTED)); + var loadedRemoveRedaction = manualRedactionClient.getRemoveRedaction(file.getId(), removeRedaction.getAnnotationId()); + assertThat(loadedRemoveRedaction.isRemoveFromDictionary()).isEqualTo(false); + assertThat(loadedRemoveRedaction.getSoftDeletedTime()).isNull(); + + + var forceRedaction = manualRedactionClient.addForceRedaction(dossier.getId(), file.getId(), ForceRedactionRequest.builder() + .annotationId(addRedaction.getAnnotationId()).comment("comment").status(AnnotationStatus.REQUESTED).user("test").legalBasis("1").build()); + var loadedForceRedaction = manualRedactionClient.getForceRedaction(file.getId(), forceRedaction.getAnnotationId()); + assertThat(loadedForceRedaction.getLegalBasis()).isEqualTo("1"); + + + var legalBasisChange = manualRedactionClient.addLegalBasisChange(dossier.getId(), file.getId(), LegalBasisChangeRequest.builder() + .annotationId(addRedaction.getAnnotationId()).comment("comment").status(AnnotationStatus.REQUESTED).user("test").legalBasis("1").build()); + var loadedLegalBasisChange = manualRedactionClient.getLegalBasisChange(file.getId(), addRedaction.getAnnotationId()); + assertThat(loadedLegalBasisChange.getId().getId()).isEqualTo(legalBasisChange.getAnnotationId()); + + + var imageRecategorization = manualRedactionClient.addImageRecategorization(dossier.getId(), file.getId(), ImageRecategorizationRequest.builder() + .annotationId(addRedaction.getAnnotationId()).comment("comment").status(AnnotationStatus.REQUESTED).user("test").type("new-type").build()); + var loadedImageRecategorization = manualRedactionClient.getImageRecategorization(file.getId(), addRedaction.getAnnotationId()); + assertThat(loadedImageRecategorization.getId().getId()).isEqualTo(imageRecategorization.getAnnotationId()); + + } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java new file mode 100644 index 000000000..8d89ab59d --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java @@ -0,0 +1,94 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.service.TypeProvider; +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.Colors; +import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.DictionaryEntry; +import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.Type; +import org.assertj.core.util.Lists; +import org.junit.Test; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class TypeTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private TypeProvider typeProvider; + + @Autowired + private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + + @Autowired + private DictionaryClient dictionaryClient; + + + @Test + public void testType() { + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + var type = typeProvider.testAndProvideType(dossierTemplate); + + dictionaryClient.addEntries(type.getId(), Lists.newArrayList("aaa", "bbb", "ccc"), true); + + var loadedType = dictionaryClient.getDictionaryForType(type.getId()); + + assertThat(loadedType.getVersion()).isGreaterThan(type.getVersion()); + + List dict = dictionaryClient.getEntriesForType(type.getId()); + + assertThat(dict.size()).isEqualTo(3); + + dictionaryClient.deleteEntries(type.getId(), Lists.newArrayList("aaa", "bbb", "ccc")); + + loadedType = dictionaryClient.getDictionaryForType(type.getId()); + + assertThat(loadedType.getVersion()).isGreaterThan(type.getVersion() + 1); + + + var request = new Type(); + BeanUtils.copyProperties(type, request); + request.setRank(99); + dictionaryClient.updateTypeValue(type.getId(), request); + + loadedType = dictionaryClient.getDictionaryForType(type.getId()); + assertThat(loadedType.getVersion()).isGreaterThan(type.getVersion() + 2); + assertThat(loadedType.getRank()).isEqualTo(99); + + + dictionaryClient.deleteType(type.getId()); + + + var typesForTemplate = dictionaryClient.getAllTypesForDossierTemplate(loadedType.getDossierTemplateId()); + assertThat(typesForTemplate).isEmpty(); + + } + + @Test + public void testColors() { + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + var colors = new Colors(); + colors.setAnalysisColor("#dddddd"); + colors.setDefaultColor("#dddddd"); + colors.setDictionaryRequestColor("#dddddd"); + colors.setPreviewColor("#dddddd"); + colors.setManualRedactionColor("#dddddd"); + colors.setNotRedacted("#dddddd"); + colors.setRequestAdd("#dddddd"); + colors.setRequestRemove("#dddddd"); + colors.setUpdatedColor("#dddddd"); + + colors.setDossierTemplateId(dossierTemplate.getId()); + + dictionaryClient.setColors(dossierTemplate.getId(), colors); + + var savedColors = dictionaryClient.getColors(dossierTemplate.getId()); + assertThat(savedColors).isEqualTo(colors); + } +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index 2c72cb22e..488fcb9ff 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -12,7 +12,6 @@ import com.iqser.red.storage.commons.StorageAutoConfiguration; import com.iqser.red.storage.commons.service.StorageService; import org.junit.After; import org.junit.Before; -import org.junit.ClassRule; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.springframework.amqp.rabbit.core.RabbitTemplate; @@ -28,7 +27,6 @@ import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.*; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; -import org.testcontainers.containers.PostgreSQLContainer; import static org.mockito.Mockito.when; @@ -117,14 +115,42 @@ public abstract class AbstractPersistenceServerServiceTest { @Autowired private AuditRepository auditRepository; + @Autowired + private TypeRepository typeRepository; + + @Autowired + private ManualRedactionRepository manualRedactionRepository; + + @Autowired + private ForceRedactionRepository forceRedactionRepository; + + @Autowired + private RemoveRedactionRepository removeRedactionRepository; + + @Autowired + private LegalBasisChangeRepository legalBasisChangeRepository; + + @Autowired + private ImageRecategorizationRepository imageRecategorizationRepository; + + @Autowired + private LegalBasisMappingRepository legalBasisMappingRepository; + @After public void afterTests() { + typeRepository.deleteAll(); viewedPagesRepository.deleteAll(); fileRepository.deleteAll(); dossierRepository.deleteAll(); dossierTemplateRepository.deleteAll(); notificationRepository.deleteAll(); auditRepository.deleteAll(); + manualRedactionRepository.deleteAll(); + forceRedactionRepository.deleteAll(); + removeRedactionRepository.deleteAll(); + legalBasisChangeRepository.deleteAll(); + imageRecategorizationRepository.deleteAll(); + legalBasisMappingRepository.deleteAll();; } }