RED-6310: Fixed and cleaned up test after the merge from release 3.6

This commit is contained in:
Viktor Seifert 2023-03-14 16:17:23 +01:00
parent 550c9c3bf0
commit ac5406291a
2 changed files with 129 additions and 76 deletions

View File

@ -9,10 +9,12 @@ 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;
@ -26,54 +28,63 @@ import com.iqser.red.service.persistence.management.v1.processor.service.downloa
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.file.FileModel;
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 RedactionResultMessageReceiver redactionResultMessageReceiver;
RedactionResultMessageReceiver redactionResultMessageReceiver;
@Autowired
private StorageService storageService;
StorageService storageService;
@Autowired
private FileTesterAndProvider fileTesterAndProvider;
FileTesterAndProvider fileTesterAndProvider;
@Autowired
private DossierTesterAndProvider dossierTesterAndProvider;
DossierTesterAndProvider dossierTesterAndProvider;
@Autowired
private DownloadClient downloadClient;
DownloadClient downloadClient;
@Autowired
private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider;
DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider;
@Autowired
private ReportTemplateClient reportTemplateClient;
ReportTemplateClient reportTemplateClient;
@Autowired
private DossierClient dossierClient;
DossierClient dossierClient;
@Autowired
private FileClient fileClient;
FileClient fileClient;
DossierWithSingleFile testData;
@Before
public void before() {
@BeforeEach
public void createTestData() {
TenantContext.setTenantId("redaction");
testData = new DossierWithSingleFile();
}
@ -81,78 +92,82 @@ public class DownloadPreparationTest extends AbstractPersistenceServerServiceTes
@SneakyThrows
public void testReceiveDownloadPackage() {
String userId = "1";
testData.forwardFileToApprovedState();
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
uploadMockReportTemplate(testData);
var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate);
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();
String downloadId = statuses.iterator().next().getStorageId();
DownloadStatus firstDownloadStatus = statuses.getDownloadStatus().iterator().next();
assertThat(firstDownloadStatus.getLastDownload()).isNull();
addStoredFileInformationToStorage(file, availableTemplates, downloadId);
String downloadId = firstDownloadStatus.getStorageId();
addStoredFileInformationToStorage(testData.file, availableTemplates, downloadId);
setupTenantContext();
ReportResultMessage reportResultMessage = new ReportResultMessage();
reportResultMessage.setUserId(userId);
reportResultMessage.setUserId(USER_ID);
reportResultMessage.setDownloadId(downloadId);
downloadReportMessageReceiver.receive(reportResultMessage);
redactionResultMessageReceiver.receive(RedactionResultMessage.builder()
.downloadId(downloadId)
.dossierId(dossier.getId())
.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(FileModel file, List<ReportTemplate> availableTemplates, String downloadId) {
private void addStoredFileInformationToStorage(FileStatus file, List<ReportTemplate> availableTemplates, String downloadId) {
String reportStorageId = "XYZ";
var storedFileInformationstorageId = downloadId.substring(0, downloadId.length() - 3) + "/REPORT_INFO.json";
String reportStorageId = "XYZ";
var sivList = new ArrayList<StoredFileInformation>();
var siv = new StoredFileInformation();
@ -161,15 +176,55 @@ public class DownloadPreparationTest extends AbstractPersistenceServerServiceTes
siv.setTemplateId(availableTemplates.iterator().next().getTemplateId());
sivList.add(siv);
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);
}
}
}

View File

@ -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);
}
}