Pull request #626: RED-6310
Merge in RED/persistence-service from RED-6310 to master * commit 'ac5406291ab286d793a23c674ecfe10b069cc734': RED-6310: Fixed and cleaned up test after the merge from release 3.6 RED-6310: Changed element-collection fetch to eager because lazy loading runs into timing based errors RED-6310: Updated test for download preparation test to execute all preparation steps.
This commit is contained in:
commit
33dafca80e
@ -6,6 +6,7 @@ import java.util.List;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.ElementCollection;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
|
||||
@ -39,11 +40,11 @@ public class NotificationPreferencesEntity {
|
||||
@Column
|
||||
private EmailNotificationType emailNotificationType;
|
||||
|
||||
@ElementCollection
|
||||
@ElementCollection(fetch = FetchType.EAGER)
|
||||
@Fetch(FetchMode.SUBSELECT)
|
||||
private List<String> emailNotifications = new ArrayList<>();
|
||||
|
||||
@ElementCollection
|
||||
@ElementCollection(fetch = FetchType.EAGER)
|
||||
@Fetch(FetchMode.SUBSELECT)
|
||||
private List<String> inAppNotifications = new ArrayList<>();
|
||||
|
||||
|
||||
@ -143,7 +143,7 @@ public class DownloadPreparationService {
|
||||
addReports(reportResultMessage.getDownloadId(), storedFileInformations, fileSystemBackedArchiver);
|
||||
storeZipFile(downloadStatus, fileSystemBackedArchiver);
|
||||
|
||||
downloadStatusPersistenceService.updateStatus(downloadStatus.getStorageId(), DownloadStatusValue.READY, fileSystemBackedArchiver.getContentLength());
|
||||
updateStatusToReady(downloadStatus, fileSystemBackedArchiver);
|
||||
|
||||
notificationPersistenceService.insertNotification(AddNotificationRequest.builder()
|
||||
.userId(downloadStatus.getUserId())
|
||||
@ -163,6 +163,15 @@ public class DownloadPreparationService {
|
||||
}
|
||||
|
||||
|
||||
private void updateStatusToReady(DownloadStatusEntity downloadStatus, FileSystemBackedArchiver fileSystemBackedArchiver) {
|
||||
|
||||
downloadStatusPersistenceService.updateStatus(downloadStatus.getStorageId(), DownloadStatusValue.READY, fileSystemBackedArchiver.getContentLength());
|
||||
if (!Objects.equals(downloadStatus.getStatus(), DownloadStatusValue.READY)) {
|
||||
downloadStatus.setStatus(DownloadStatusValue.READY);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void generateAndAddFiles(DownloadStatusEntity downloadStatus, RedactionResultMessage reportResultMessage, FileSystemBackedArchiver fileSystemBackedArchiver) {
|
||||
|
||||
int i = 1;
|
||||
|
||||
@ -40,6 +40,12 @@ public class RedactionResultMessageReceiver {
|
||||
redactionResultMessage.getDownloadId()));
|
||||
}
|
||||
|
||||
receive(redactionResultMessage);
|
||||
}
|
||||
|
||||
|
||||
public void receive(RedactionResultMessage redactionResultMessage) {
|
||||
|
||||
log.info("Received redaction results for downloadId:{}", redactionResultMessage.getDownloadId());
|
||||
|
||||
downloadPreparationService.createDownload(redactionResultMessage);
|
||||
|
||||
@ -5,13 +5,17 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.mock.web.MockMultipartFile;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultMessage;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.FileClient;
|
||||
@ -21,118 +25,206 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTes
|
||||
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadReportMessageReceiver;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.download.RedactionResultMessageReceiver;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierRequest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.FileStatus;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.ReportTemplate;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.download.DownloadStatus;
|
||||
import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage;
|
||||
import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation;
|
||||
import com.iqser.red.storage.commons.service.StorageService;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.experimental.FieldDefaults;
|
||||
|
||||
@FieldDefaults(level = AccessLevel.PRIVATE)
|
||||
public class DownloadPreparationTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
protected static final String USER_ID = "1";
|
||||
@Autowired
|
||||
private DownloadReportMessageReceiver downloadReportMessageReceiver;
|
||||
DownloadReportMessageReceiver downloadReportMessageReceiver;
|
||||
|
||||
@Autowired
|
||||
private StorageService storageService;
|
||||
RedactionResultMessageReceiver redactionResultMessageReceiver;
|
||||
|
||||
@Autowired
|
||||
private FileTesterAndProvider fileTesterAndProvider;
|
||||
StorageService storageService;
|
||||
|
||||
@Autowired
|
||||
private DossierTesterAndProvider dossierTesterAndProvider;
|
||||
FileTesterAndProvider fileTesterAndProvider;
|
||||
|
||||
@Autowired
|
||||
private DownloadClient downloadClient;
|
||||
DossierTesterAndProvider dossierTesterAndProvider;
|
||||
|
||||
@Autowired
|
||||
private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider;
|
||||
DownloadClient downloadClient;
|
||||
|
||||
@Autowired
|
||||
private ReportTemplateClient reportTemplateClient;
|
||||
DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider;
|
||||
|
||||
@Autowired
|
||||
private DossierClient dossierClient;
|
||||
ReportTemplateClient reportTemplateClient;
|
||||
|
||||
@Autowired
|
||||
private FileClient fileClient;
|
||||
DossierClient dossierClient;
|
||||
|
||||
@Autowired
|
||||
FileClient fileClient;
|
||||
|
||||
DossierWithSingleFile testData;
|
||||
|
||||
|
||||
@BeforeEach
|
||||
public void createTestData() {
|
||||
|
||||
testData = new DossierWithSingleFile();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
@SneakyThrows
|
||||
public void testReceiveDownloadPackage() {
|
||||
|
||||
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
|
||||
testData.forwardFileToApprovedState();
|
||||
|
||||
var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate);
|
||||
uploadMockReportTemplate(testData);
|
||||
|
||||
var file = fileTesterAndProvider.testAndProvideFile(dossier);
|
||||
|
||||
fileTesterAndProvider.markFileAsProcessed(file.getFileId());
|
||||
|
||||
fileClient.setStatusApproved(dossier.getId(), file.getId());
|
||||
var file11 = fileClient.getFileStatus(dossier.getId(), file.getId());
|
||||
assertThat(file11.getWorkflowStatus()).isEqualTo(WorkflowStatus.APPROVED);
|
||||
|
||||
var template = new MockMultipartFile("test.docx", "zzz".getBytes());
|
||||
reportTemplateClient.uploadTemplate(template, dossierTemplate.getDossierTemplateId(), true, true);
|
||||
|
||||
var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId());
|
||||
var availableTemplates = reportTemplateClient.getAvailableReportTemplates(testData.getDossierTemplateId());
|
||||
assertThat(availableTemplates).isNotEmpty();
|
||||
|
||||
dossierClient.createDossierOrUpdateDossier(DossierRequest.builder()
|
||||
.dossierId(dossier.getId())
|
||||
.dossierName(dossier.getDossierName())
|
||||
.description(dossier.getDescription())
|
||||
.ownerId(dossier.getOwnerId())
|
||||
.memberIds(dossier.getMemberIds())
|
||||
.approverIds(dossier.getApproverIds())
|
||||
.downloadFileTypes(dossier.getDownloadFileTypes())
|
||||
.watermarkId(dossier.getWatermarkId())
|
||||
.dueDate(dossier.getDueDate())
|
||||
.dossierTemplateId(dossier.getDossierTemplateId())
|
||||
.reportTemplateIds(availableTemplates.stream().map(ReportTemplate::getTemplateId).collect(Collectors.toSet()))
|
||||
.build());
|
||||
createDossierInService(testData, availableTemplates);
|
||||
|
||||
var updatedDossier = dossierClient.getDossier(dossier.getId(), false, false);
|
||||
var updatedDossier = dossierClient.getDossier(testData.getDossierId(), false, false);
|
||||
assertThat(updatedDossier.getReportTemplateIds()).isNotEmpty();
|
||||
|
||||
downloadClient.prepareDownload(PrepareDownloadWithOptionRequest.builder()
|
||||
.dossierId(dossier.getId())
|
||||
.dossierId(testData.getDossierId())
|
||||
.downloadFileTypes(Set.of(DownloadFileType.ORIGINAL))
|
||||
.fileIds(Collections.singletonList(file.getId()))
|
||||
.fileIds(Collections.singletonList(testData.file.getId()))
|
||||
.redactionPreviewColor("#aaaaaa")
|
||||
.build());
|
||||
|
||||
var statuses = downloadClient.getDownloadStatus();
|
||||
assertThat(statuses.getDownloadStatus()).isNotEmpty();
|
||||
assertThat(statuses.getDownloadStatus().iterator().next().getLastDownload()).isNull();
|
||||
|
||||
// FIXME Check if this is still needed.
|
||||
// This variable seems to do nothing, if it is not needed it can be removed.
|
||||
DownloadStatus firstDownloadStatus = statuses.getDownloadStatus().iterator().next();
|
||||
assertThat(firstDownloadStatus.getLastDownload()).isNull();
|
||||
|
||||
String downloadId = firstDownloadStatus.getStorageId();
|
||||
|
||||
addStoredFileInformationToStorage(testData.file, availableTemplates, downloadId);
|
||||
|
||||
setupTenantContext();
|
||||
|
||||
ReportResultMessage reportResultMessage = new ReportResultMessage();
|
||||
reportResultMessage.setUserId(USER_ID);
|
||||
reportResultMessage.setDownloadId(downloadId);
|
||||
downloadReportMessageReceiver.receive(reportResultMessage);
|
||||
|
||||
redactionResultMessageReceiver.receive(RedactionResultMessage.builder()
|
||||
.downloadId(downloadId)
|
||||
.dossierId(testData.getDossierId())
|
||||
.redactionResultDetails(Collections.emptyList())
|
||||
.build());
|
||||
|
||||
clearTenantContext();
|
||||
}
|
||||
|
||||
|
||||
private void createDossierInService(DossierWithSingleFile testData, List<ReportTemplate> availableTemplates) {
|
||||
|
||||
dossierClient.createDossierOrUpdateDossier(DossierRequest.builder()
|
||||
.dossierId(testData.getDossierId())
|
||||
.dossierName(testData.dossier.getDossierName())
|
||||
.description(testData.dossier.getDescription())
|
||||
.ownerId(testData.dossier.getOwnerId())
|
||||
.memberIds(testData.dossier.getMemberIds())
|
||||
.approverIds(testData.dossier.getApproverIds())
|
||||
.downloadFileTypes(testData.dossier.getDownloadFileTypes())
|
||||
.watermarkId(testData.dossier.getWatermarkId())
|
||||
.dueDate(testData.dossier.getDueDate())
|
||||
.dossierTemplateId(testData.dossier.getDossierTemplateId())
|
||||
.reportTemplateIds(availableTemplates.stream().map(ReportTemplate::getTemplateId).collect(Collectors.toSet()))
|
||||
.build());
|
||||
}
|
||||
|
||||
|
||||
private void uploadMockReportTemplate(DossierWithSingleFile testData) {
|
||||
|
||||
var template = new MockMultipartFile("test.docx", "zzz".getBytes());
|
||||
reportTemplateClient.uploadTemplate(template, testData.getDossierTemplateId(), true, true);
|
||||
}
|
||||
|
||||
|
||||
@SneakyThrows
|
||||
private void addStoredFileInformationToStorage(FileStatus file, List<ReportTemplate> availableTemplates, String downloadId) {
|
||||
|
||||
var storedFileInformationstorageId = downloadId.substring(0, downloadId.length() - 3) + "/REPORT_INFO.json";
|
||||
String reportStorageId = "XYZ";
|
||||
var sivList = new ArrayList<StoredFileInformation>();
|
||||
|
||||
var siv = new StoredFileInformation();
|
||||
siv.setFileId(file.getId());
|
||||
siv.setStorageId("XYZ");
|
||||
siv.setStorageId(reportStorageId);
|
||||
siv.setTemplateId(availableTemplates.iterator().next().getTemplateId());
|
||||
sivList.add(siv);
|
||||
|
||||
// FIXME Check if this is still needed.
|
||||
storageService.storeObject(TenantContext.getTenantId(), "XYZ", new ByteArrayInputStream(new byte[]{1, 2, 3, 4}));
|
||||
storageService.storeObject(TenantContext.getTenantId(), storedFileInformationstorageId, new ByteArrayInputStream(new ObjectMapper().writeValueAsBytes(sivList)));
|
||||
storageService.storeObject(TenantContext.getTenantId(), reportStorageId, new ByteArrayInputStream(new byte[]{1, 2, 3, 4}));
|
||||
}
|
||||
|
||||
ReportResultMessage reportResultMessage = new ReportResultMessage();
|
||||
reportResultMessage.setUserId("1");
|
||||
reportResultMessage.setDownloadId(statuses.getDownloadStatus().iterator().next().getStorageId());
|
||||
|
||||
TenantContext.setTenantId("redaction");
|
||||
downloadReportMessageReceiver.receive(reportResultMessage);
|
||||
TenantContext.clear();
|
||||
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
|
||||
private final class DossierWithSingleFile {
|
||||
|
||||
DossierTemplateModel dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
|
||||
|
||||
Dossier dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate);
|
||||
|
||||
FileStatus file = fileTesterAndProvider.testAndProvideFile(dossier);
|
||||
|
||||
|
||||
public String getDossierTemplateId() {
|
||||
|
||||
return dossierTemplate.getId();
|
||||
}
|
||||
|
||||
|
||||
public String getDossierId() {
|
||||
|
||||
return dossier.getId();
|
||||
}
|
||||
|
||||
|
||||
public String getFileId() {
|
||||
|
||||
return file.getFileId();
|
||||
}
|
||||
|
||||
|
||||
public void forwardFileToApprovedState() {
|
||||
|
||||
fileTesterAndProvider.markFileAsProcessed(getFileId());
|
||||
|
||||
fileClient.setStatusApproved(getDossierId(), getFileId());
|
||||
|
||||
assertThatTestFileIsApproved();
|
||||
}
|
||||
|
||||
|
||||
private void assertThatTestFileIsApproved() {
|
||||
|
||||
var persistedFileStatus = fileClient.getFileStatus(getDossierId(), file.getId());
|
||||
assertThat(persistedFileStatus.getWorkflowStatus()).isEqualTo(WorkflowStatus.APPROVED);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -19,18 +19,14 @@ import org.keycloak.adapters.springboot.KeycloakSpringBootProperties;
|
||||
import org.mockito.Mockito;
|
||||
import org.springframework.amqp.core.AmqpAdmin;
|
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.ObjectFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
import org.springframework.boot.test.util.TestPropertyValues;
|
||||
import org.springframework.cloud.openfeign.EnableFeignClients;
|
||||
import org.springframework.cloud.openfeign.support.SpringEncoder;
|
||||
import org.springframework.context.ApplicationContextInitializer;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@ -43,7 +39,6 @@ import org.springframework.jdbc.core.StatementCallback;
|
||||
import org.springframework.jdbc.datasource.SingleConnectionDataSource;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import com.iqser.red.keycloak.commons.KeyCloakAdminClientService;
|
||||
import com.iqser.red.keycloak.commons.KeyCloakSettings;
|
||||
@ -218,16 +213,21 @@ public abstract class AbstractPersistenceServerServiceTest {
|
||||
@Autowired
|
||||
private TokenService tokenService;
|
||||
|
||||
|
||||
@BeforeEach
|
||||
public void setTenant(){
|
||||
public void setupTenantContext() {
|
||||
|
||||
TenantContext.setTenantId("redaction");
|
||||
}
|
||||
|
||||
|
||||
@AfterEach
|
||||
public void clearTenant(){
|
||||
public void clearTenantContext() {
|
||||
|
||||
TenantContext.clear();
|
||||
}
|
||||
|
||||
|
||||
public void createUsers() {
|
||||
|
||||
when(keyCloakAdminClientService.getAdminClient()).thenReturn(KeyCloakTestContainer.getInstance().getKeycloakAdminClient());
|
||||
@ -262,6 +262,7 @@ public abstract class AbstractPersistenceServerServiceTest {
|
||||
return user.getUserId();
|
||||
}
|
||||
|
||||
|
||||
@BeforeEach
|
||||
public void setupOptimize() {
|
||||
|
||||
@ -269,11 +270,7 @@ public abstract class AbstractPersistenceServerServiceTest {
|
||||
|
||||
TenantContext.setTenantId("redaction");
|
||||
|
||||
ApplicationConfig appConfig = new ApplicationConfig().builder()
|
||||
.downloadCleanupDownloadFilesHours(8)
|
||||
.downloadCleanupNotDownloadFilesHours(72)
|
||||
.softDeleteCleanupTime(96)
|
||||
.build();
|
||||
ApplicationConfig appConfig = ApplicationConfig.builder().downloadCleanupDownloadFilesHours(8).downloadCleanupNotDownloadFilesHours(72).softDeleteCleanupTime(96).build();
|
||||
applicationConfigService.saveApplicationConfiguration(MagicConverter.convert(appConfig, ApplicationConfigurationEntity.class));
|
||||
|
||||
TenantContext.clear();
|
||||
@ -295,10 +292,10 @@ public abstract class AbstractPersistenceServerServiceTest {
|
||||
|
||||
private void createDefaultTenant() {
|
||||
|
||||
if (!tenantRepository.findById("redaction").isPresent()) {
|
||||
if (tenantRepository.findById("redaction").isEmpty()) {
|
||||
var postgreSQLContainerMaster = SpringPostgreSQLTestContainer.getInstance().withDatabaseName("integration-tests-db-master").withUsername("sa").withPassword("sa");
|
||||
|
||||
var jdbcUrl = postgreSQLContainerMaster.getJdbcUrl().substring(0, postgreSQLContainerMaster.getJdbcUrl().lastIndexOf('/') + 1) + "redaction?currentSchema=myschema";
|
||||
String jdbcUrl = postgreSQLContainerMaster.getJdbcUrl().substring(0, postgreSQLContainerMaster.getJdbcUrl().lastIndexOf('/') + 1) + "redaction?currentSchema=myschema";
|
||||
var port = postgreSQLContainerMaster.getJdbcUrl().substring(0, postgreSQLContainerMaster.getJdbcUrl().lastIndexOf('/')).split(":")[3];
|
||||
|
||||
createDatabase("redaction", "redaction");
|
||||
@ -336,6 +333,7 @@ public abstract class AbstractPersistenceServerServiceTest {
|
||||
.build();
|
||||
|
||||
tenantManagementService.createTenant(tenantRequest);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user