You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
185 lines
7.4 KiB
185 lines
7.4 KiB
package de.superx.bianalysis; |
|
|
|
import static org.junit.Assert.assertEquals; |
|
import static org.junit.Assert.assertTrue; |
|
|
|
import java.io.File; |
|
import java.io.FileOutputStream; |
|
import java.io.IOException; |
|
import java.io.InputStream; |
|
import java.nio.file.Files; |
|
import java.nio.file.Path; |
|
import java.util.Base64; |
|
import java.util.Enumeration; |
|
import java.util.regex.Matcher; |
|
import java.util.regex.Pattern; |
|
import java.util.zip.ZipEntry; |
|
import java.util.zip.ZipFile; |
|
|
|
import org.jdom2.Document; |
|
import org.jdom2.input.SAXBuilder; |
|
import org.jdom2.output.XMLOutputter; |
|
import org.junit.Before; |
|
import org.junit.After; |
|
import org.junit.Test; |
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper; |
|
|
|
import de.superx.BIATestUtils; |
|
import de.superx.BaseDbTest; |
|
import de.superx.bianalysis.jasper.JasperReportJson; |
|
import de.superx.bianalysis.jasper.JasperReportJsonWrapper; |
|
import de.superx.bianalysis.models.Right; |
|
import de.superx.bianalysis.models.RightParam; |
|
import de.superx.bianalysis.rest.BiAnalysisApi; |
|
import de.superx.bianalysis.service.DbMetaAdapter; |
|
import de.superx.bianalysis.service.JasperReportExport; |
|
import de.superx.rest.model.Download; |
|
|
|
public class JasperTest extends BaseDbTest{ |
|
|
|
@Autowired |
|
DbMetaAdapter dbMetaAdapter; |
|
|
|
@Autowired |
|
BiAnalysisApi biAnalysis; |
|
|
|
@Autowired |
|
JasperReportExport jasperReportExport; |
|
|
|
JasperReportJson jrj = new JasperReportJson(); |
|
private static String TEST_TEMP_FOLDER = String.join(File.separator, new String[] {"test", "tmp"}); |
|
private static String TEMP_BIANYLSIS_JSON = String.join(File.separator, new String[] {TEST_TEMP_FOLDER, "biAnalysis.json"}); |
|
private static String TEMP_JASPER_REPORT = String.join(File.separator, new String[] {TEST_TEMP_FOLDER, "MainReport.jrxml"}); |
|
private static String JASPER_JSON = String.join(File.separator, new String[] {BIATestUtils.RW_TEST_PATH, "result_jasper", "jasper" + ".json"}); |
|
private static String MAIN_REPORT = String.join(File.separator, new String[] {BIATestUtils.RW_TEST_PATH, "result_jasper", "MainReport" + ".jrxml"}); |
|
private static String DADATA_ADAPTER_REST_0 = String.join(File.separator, new String[] {BIATestUtils.RW_TEST_PATH, "result_jasper", "DataAdapterRest0" + ".jrdax"}); |
|
private static String DADATA_ADAPTER_REST_1 = String.join(File.separator, new String[] {BIATestUtils.RW_TEST_PATH, "result_jasper", "DataAdapterRest1" + ".jrdax"}); |
|
|
|
@Before |
|
public void init() { |
|
user.setHisInOneOrgUnitLidOfRole(Integer.valueOf(2)); |
|
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.TOPIC_AREA, "130"); |
|
setRightParamValue(Right.DELETE_ANALYSIS, RightParam.TOPIC_AREA, "130"); |
|
} |
|
|
|
@After |
|
public void deleteTmpFolder() { |
|
deleteDir(new File(TEST_TEMP_FOLDER)); |
|
} |
|
|
|
@Test |
|
public void testInitJasperReportJson() throws Exception { |
|
String file = "storedReport"; |
|
StoredReport storedReportFromFile = BIATestUtils.readStoredReportFromJson(file); |
|
|
|
int storedReportId = biAnalysis.persistReportDefinition(storedReportFromFile); |
|
|
|
JasperReportJsonWrapper jasperReportJsonWrapper = biAnalysis.getJasperJsonDatasource(storedReportId); |
|
|
|
ObjectMapper mapper = new ObjectMapper(); |
|
|
|
String json = normalizeJsonString(mapper.writeValueAsString(jasperReportJsonWrapper)); |
|
String expectedJson = normalizeJsonString(mapper.readTree(Files.readAllBytes(new File(JASPER_JSON).toPath())).toString()); |
|
boolean reportDeleted = biAnalysis.deleteReportDefinition(storedReportId); |
|
|
|
assertEquals(expectedJson, json); |
|
assertTrue(reportDeleted); |
|
} |
|
|
|
@Test |
|
public void testExportJasperReport() throws Exception { |
|
StoredReport storedReportFromFile = BIATestUtils.readStoredReportFromJson("storedReport"); |
|
int storedReportId = biAnalysis.persistReportDefinition(storedReportFromFile); |
|
|
|
Download download = biAnalysis.getJasperTemplate(storedReportId); |
|
|
|
// unpack zip |
|
byte[] bytes = Base64.getDecoder().decode(download.base64String); |
|
|
|
File zipFile = File.createTempFile("temp", ".zip"); |
|
try (FileOutputStream fos = new FileOutputStream(zipFile)) { |
|
fos.write(bytes); |
|
} |
|
|
|
ZipFile zip = new ZipFile(zipFile); |
|
Enumeration<? extends ZipEntry> entries = zip.entries(); |
|
while (entries.hasMoreElements()) { |
|
ZipEntry entry = entries.nextElement(); |
|
File file2 = new File(String.join(File.separator, new String[] {TEST_TEMP_FOLDER, entry.getName()})); |
|
file2.getParentFile().mkdirs(); |
|
try (InputStream is = zip.getInputStream(entry); |
|
FileOutputStream fos = new FileOutputStream(file2)) { |
|
byte[] buffer = new byte[1024]; |
|
int len; |
|
while ((len = is.read(buffer)) != -1) { |
|
fos.write(buffer, 0, len); |
|
} |
|
} |
|
} |
|
|
|
// compare Json-File |
|
File expectedJsonFile = new File(JASPER_JSON); |
|
File actualJsonFile = new File(TEMP_BIANYLSIS_JSON); |
|
|
|
ObjectMapper mapper = new ObjectMapper(); |
|
String actualJson = normalizeJsonString(mapper.readTree(Files.readAllBytes(actualJsonFile.toPath())).toString()); |
|
String expectedJson = normalizeJsonString(mapper.readTree(Files.readAllBytes(expectedJsonFile.toPath())).toString()); |
|
|
|
assertEquals(expectedJson, actualJson); |
|
|
|
// compare JasperReport-File |
|
File expectedMainReport = new File(MAIN_REPORT); |
|
File actualMainReport = new File(TEMP_JASPER_REPORT); |
|
|
|
SAXBuilder saxBuilder = new SAXBuilder(); |
|
Document expectedReport = saxBuilder.build(expectedMainReport); |
|
Document actualReport = saxBuilder.build(actualMainReport); |
|
|
|
XMLOutputter outputter = new XMLOutputter(); |
|
String expectedReportXML = outputter.outputString(expectedReport); |
|
String actualReportXML = outputter.outputString(actualReport); |
|
|
|
assertEquals(expectedReportXML, actualReportXML); |
|
|
|
assertTrue(biAnalysis.deleteReportDefinition(storedReportId)); |
|
} |
|
|
|
@Test |
|
public void testDataAdapterRest() throws IOException { |
|
jasperReportExport.setJsonRestAdapter(0); |
|
|
|
Path path = new File(JasperReportExport.getPath(JasperReportExport.DATA_ADAPTER_REST)).toPath(); |
|
String dataAdapterContent = String.join("", Files.readAllLines(path)).replace("\r\n", "\n"); |
|
Path path0 = new File(DADATA_ADAPTER_REST_0).toPath(); |
|
String dataAdapterContent0 = String.join("", Files.readAllLines(path0)).replace("\r\n", "\n"); |
|
|
|
assertEquals(dataAdapterContent0, dataAdapterContent); |
|
|
|
jasperReportExport.setJsonRestAdapter(1); |
|
|
|
String dataAdapterContentNew = new String(Files.readAllBytes(new File(JasperReportExport.getPath(JasperReportExport.DATA_ADAPTER_REST)).toPath())).replace("\r\n", "\n"); |
|
String dataAdapterContent1 = new String(Files.readAllBytes(new File(DADATA_ADAPTER_REST_1).toPath())).replace("\r\n", "\n"); |
|
assertEquals(dataAdapterContent1, dataAdapterContentNew); |
|
} |
|
|
|
public static void deleteDir(File path) { |
|
if (path.isDirectory()) { |
|
File[] files = path.listFiles(); |
|
if (files != null) { |
|
for (File file : files) { |
|
deleteDir(file); // Rekursion für Unterordner |
|
} |
|
} |
|
} |
|
path.delete(); // Datei oder leeren Ordner löschen |
|
} |
|
|
|
public static String normalizeJsonString(String jsonString) { |
|
// Entferne alle Zahlen (einschließlich Dezimalstellen) aus dem JSON-String |
|
Pattern pattern = Pattern.compile("-?\\d+(\\.\\d+)?"); // Regex für Zahlen |
|
Matcher matcher = pattern.matcher(jsonString); |
|
return matcher.replaceAll(""); |
|
} |
|
}
|
|
|