From 9edf89d563d14ab575e23a7a58bba80a20b11194 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Wed, 12 Jun 2024 17:01:33 +0200 Subject: [PATCH] RED-9286: added test for checking for skipped values --- .../RedactionReportV2IntegrationTest.java | 128 +++++++++++------- 1 file changed, 77 insertions(+), 51 deletions(-) diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/RedactionReportV2IntegrationTest.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/RedactionReportV2IntegrationTest.java index 2c8bc98..527a784 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/RedactionReportV2IntegrationTest.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/RedactionReportV2IntegrationTest.java @@ -1,48 +1,8 @@ package com.iqser.red.service.redaction.report.v1.server; -import static com.iqser.red.service.redaction.report.v1.server.utils.OsUtils.getTemporaryDirectory; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -import java.io.FileOutputStream; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Base64; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import org.apache.commons.io.IOUtils; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; -import org.springframework.boot.test.autoconfigure.actuate.observability.AutoConfigureObservability; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.FilterType; -import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.Primary; -import org.springframework.core.io.ClassPathResource; -import org.springframework.test.context.junit.jupiter.SpringExtension; - import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; -import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLogEntry; -import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryState; -import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryType; -import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Position; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.*; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DossierAttributeConfig; 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; @@ -54,14 +14,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.redaction.report.v1.api.model.ReportRequestMessage; import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation; -import com.iqser.red.service.redaction.report.v1.server.client.DictionaryClient; -import com.iqser.red.service.redaction.report.v1.server.client.DossierAttributesClient; -import com.iqser.red.service.redaction.report.v1.server.client.DossierAttributesConfigClient; -import com.iqser.red.service.redaction.report.v1.server.client.DossierClient; -import com.iqser.red.service.redaction.report.v1.server.client.EntityLogClient; -import com.iqser.red.service.redaction.report.v1.server.client.FileAttributesConfigClient; -import com.iqser.red.service.redaction.report.v1.server.client.FileStatusClient; -import com.iqser.red.service.redaction.report.v1.server.client.ReportTemplateClient; +import com.iqser.red.service.redaction.report.v1.server.client.*; import com.iqser.red.service.redaction.report.v1.server.configuration.MessagingConfiguration; import com.iqser.red.service.redaction.report.v1.server.service.ReportGenerationService; import com.iqser.red.service.redaction.report.v1.server.storage.ReportStorageService; @@ -72,10 +25,42 @@ import com.iqser.red.storage.commons.StorageAutoConfiguration; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantsClient; - import io.micrometer.prometheus.PrometheusMeterRegistry; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; +import org.springframework.boot.test.autoconfigure.actuate.observability.AutoConfigureObservability; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.*; +import org.springframework.core.io.ClassPathResource; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.io.ByteArrayInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import static com.iqser.red.service.redaction.report.v1.server.utils.OsUtils.getTemporaryDirectory; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.when; @Slf4j @ExtendWith(SpringExtension.class) @@ -206,7 +191,9 @@ public class RedactionReportV2IntegrationTest { @SneakyThrows - private void processRequest(ReportRequestMessage reportRequestMessage, String fileEnding) { + private List processRequest(ReportRequestMessage reportRequestMessage, String fileEnding) { + + List createdOutputFileNames = new ArrayList<>(); var id = reportGenerationService.generateReports(reportRequestMessage); @@ -223,9 +210,11 @@ public class RedactionReportV2IntegrationTest { try (FileOutputStream fileOutputStream = new FileOutputStream(outputPath)) { fileOutputStream.write(reportInfo); } + createdOutputFileNames.add(outputPath); System.out.println("Created temporary output file: " + outputPath); i++; } + return createdOutputFileNames; } @@ -315,6 +304,43 @@ public class RedactionReportV2IntegrationTest { } + @Test + @SneakyThrows + public void testSkippedPlaceholder() { + + var reportRequestMessage = prepareFlow(2, "templates/Excel QC (incl. Skipped Redactions).xlsx"); + var fileNames = processRequest(reportRequestMessage, ".xlsx"); + + MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_generateReports", 1, null); + MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_generateExcelReport", 1, null); + MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_calculateExcelModel", 1, null); + MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_getReportEntries", 1, null); + + AtomicBoolean containsSkipped = new AtomicBoolean(false); + fileNames.forEach(fileName -> { + try (ByteArrayInputStream is = new ByteArrayInputStream(Files.readAllBytes(Paths.get(fileName)))) { + XSSFWorkbook workbook = new XSSFWorkbook(is); + + for (Sheet sheet : workbook) { + for (Row row : sheet) { + for (Cell cell : row) { + if ("true".equalsIgnoreCase(cell.getStringCellValue())) { + containsSkipped.set(true); + return; + } + } + } + } + } catch (IOException e) { + System.out.println("Error reading file " + fileName); + } + }); + + assertTrue(containsSkipped.get()); + + } + + private List createFileModels(int numOfFileModelsToCreate) { return IntStream.range(1, numOfFileModelsToCreate + 1)