SuperX-Kernmodul
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.
 
 
 
 
 
 

276 lines
10 KiB

package de.superx.bianalysis;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Optional;
import org.junit.After;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.init.ScriptException;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.superx.BIATestUtils;
import de.superx.BaseDbTest;
import de.superx.bianalysis.models.Dimension;
import de.superx.bianalysis.models.FactTable;
import de.superx.bianalysis.models.Right;
import de.superx.bianalysis.models.RightParam;
import de.superx.bianalysis.repository.dto.MeasureDto;
import de.superx.bianalysis.rest.BiAnalysisApi;
import de.superx.bianalysis.service.DbMetaAdapter;
import de.superx.common.AccessDeniedException;
import de.superx.common.NotYetImplementedException;
public class BiAnalysisApiTest extends BaseDbTest {
@Autowired
BiAnalysisApi biAnalysis;
@Autowired
DbMetaAdapter dbAdapter;
public void init() throws ScriptException {
user.setRights(new HashMap<>(), null);
}
@After
public void after() {
user.getRightsMap().clear();
}
@Test
public void noAccess() {
user.setRights(new HashMap<>(), null);
String json = """
{
"factTableId": "res_pub:1",
"filters": [
{
"dimensionAttributeId": "conf_res:20",
"filterValues": [
"ja",
"nein"
]
},
{
"dimensionAttributeId": "conf_res:21",
"filterValues": [
"Fachzeitschrift für Produktions- und Verfahrenstechnik",
"Financial Review",
"Finanzwissenschaft",
"Genetic Review",
"International Journal of Financial Studies"
]
},
{
"dimensionAttributeId": "res_pub:38",
"filterValues": [
"2021",
"2022",
"2023"
]
}
],
"leftDimensionAttributeIds": [
"res_pub:38"
],
"measureIds": [
"res_pub:21037",
"res_pub:21031"
],
"topDimensionAttributeIds": [
"conf_res:20",
"conf_res:26"
]
}
""";
assertThrows(AccessDeniedException.class, () -> {
ReportDefinition definition = new ObjectMapper().readValue(json, ReportDefinition.class);
biAnalysis.getReport(definition);
});
}
@Test
public void noPersistAccess() {
String file = "storedReport";
assertThrows(AccessDeniedException.class, () -> {
StoredReport expectedStoredReport = BIATestUtils.readStoredReportFromJson(file);
biAnalysis.persistReportDefinition(expectedStoredReport);
});
}
@Test
public void showOnlyThemesForSachgebiet() throws NotYetImplementedException {
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.TOPIC_AREA, "441,450");
List<FactTable> facts = biAnalysis.listFactTables();
assertTrue(!facts.isEmpty());
for (FactTable fact : facts) {
assertTrue(fact.getSachgebiettid() == 441 || fact.getSachgebiettid() == 450);
}
}
@Test
public void failOnUnallowedSachgebietDimension() {
setRight(Right.CREATE_ANALYSIS);
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.TOPIC_AREA, "130");
List<Dimension> dimensions = biAnalysis.listDimensions("res_nom:1");
assertEquals(0, dimensions.size());
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.TOPIC_AREA, "130,240");
dimensions = biAnalysis.listDimensions("res_nom:1");
assertTrue(dimensions.size() > 0);
}
@Test
public void failOnUnallowedSachgebietMeasure() {
setRight(Right.CREATE_ANALYSIS);
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.TOPIC_AREA, "240");
List<MeasureDto> measures = biAnalysis.listMeasures("app_basic:1");
assertEquals(0, measures.size());
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.TOPIC_AREA, "130,240");
measures = biAnalysis.listMeasures("app_basic:1");
assertTrue(measures.size() > 0);
}
@Test
public void testValidFactTables() throws NotYetImplementedException {
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.TOPIC_AREA, "130,240");
List<FactTable> factTables = dbAdapter.getFactTables();
for (FactTable factTable : factTables) {
int tid = factTable.getSachgebiettid();
boolean isValidSachgebiet = (tid == 130 || tid == 240);
assertTrue("Invalid Sachgebiet " + tid + " for Fact Table "
+ "'" + factTable.getCaption() + "'", isValidSachgebiet);
}
}
@Test
public void showOnlySearchResultsForValidFactTables() {
truncateSavedReports();
saveDummyReportForFactTable("res_nom:1", "my report");
saveDummyReportForFactTable("res_nom:1", "huhu");
saveDummyReportForFactTable("res_pub:1", "was");
saveDummyReportForFactTable("app_basic:1", "ist report");
saveDummyReportForFactTable("app_basic:1", "test for das is here");
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.TOPIC_AREA, "240,130");
List<StoredReport> reports;
reports = biAnalysis.findReportDefinition(
Optional.of("das"),
Optional.ofNullable(null),
Optional.ofNullable(null));
assertEquals(1, reports.size());
reports = biAnalysis.findReportDefinition(
Optional.of("das"),
Optional.of(Integer.valueOf(130)),
Optional.of(Arrays.asList("app_basic:1")));
assertEquals(1, reports.size());
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.TOPIC_AREA, "240");
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.TOPIC, "res_nom:1");
reports = biAnalysis.findReportDefinition(
Optional.of("das"),
Optional.of(Integer.valueOf(130)),
Optional.of(Arrays.asList("app_basic:1")));
assertEquals(0, reports.size());
reports = biAnalysis.findReportDefinition(
Optional.of("report"),
Optional.ofNullable(null),
Optional.ofNullable(null));
assertEquals(1, reports.size());
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.TOPIC, "res_nom:1,app_basic:1");
reports = biAnalysis.findReportDefinition(
Optional.of("report"),
Optional.ofNullable(null),
Optional.ofNullable(null));
assertEquals(2, reports.size());
}
@Test
public void showOnlySearchResultsForValidSachgebiete() {
truncateSavedReports();
saveDummyReportForFactTable("res_nom:1", "my report");
saveDummyReportForFactTable("res_nom:1", "huhu");
saveDummyReportForFactTable("res_pub:1", "was");
saveDummyReportForFactTable("app_basic:1", "ist report");
saveDummyReportForFactTable("app_basic:1", "test for das is here");
assertThrows(AccessDeniedException.class, () -> {
biAnalysis.findReportDefinition(
Optional.ofNullable(null),
Optional.ofNullable(null),
Optional.of(Arrays.asList("res_pub:1")));
});
assertThrows(AccessDeniedException.class, () -> {
biAnalysis.findReportDefinition(
Optional.ofNullable(null),
Optional.of(Integer.valueOf(240)),
Optional.ofNullable(null));
});
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.TOPIC_AREA, "240");
List<StoredReport> reports;
reports = biAnalysis.findReportDefinition(
Optional.ofNullable(null),
Optional.ofNullable(null),
Optional.of(Arrays.asList("res_pub:1")));
assertEquals(1, reports.size());
reports = biAnalysis.findReportDefinition(
Optional.ofNullable(null),
Optional.ofNullable(null),
Optional.of(Arrays.asList("res_pub:1", "app_basic:1")));
assertEquals(1, reports.size());
reports = biAnalysis.findReportDefinition(
Optional.ofNullable(null),
Optional.of(Integer.valueOf(240)),
Optional.ofNullable(null));
assertEquals(3, reports.size());
reports = biAnalysis.findReportDefinition(
Optional.of("das"),
Optional.ofNullable(null),
Optional.ofNullable(null));
assertEquals(0, reports.size());
}
@Test
public void showFactTablesForValidTopicsAndSachgebiete() throws NotYetImplementedException {
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.TOPIC_AREA, "240,450");
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.TOPIC, "exa:25", false);
List<FactTable> facts = biAnalysis.listFactTables();
assertEquals(11, facts.size()); // 1 für exa, 5 für res
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.TOPIC, "exa:25,res:105,res_nom:1");
facts = biAnalysis.listFactTables();
assertEquals(3, facts.size()); // 1 für exa, 2 für res
}
private int saveDummyReportForFactTable(String factId, String name) {
StoredReport report = new StoredReport();
report.definition = "{\"factTableId\": \"" + factId + "\" }";
report.name = name;
return dbAdapter.saveReportDefinition(report);
}
private void truncateSavedReports() {
new JdbcTemplate(dataSource).execute("truncate table metadata.rw_report_definitions");
}
}