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.
 
 
 
 
 
 

131 lines
5.0 KiB

package de.superx.bianalysis;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import de.superx.BIATestUtils;
import de.superx.BaseDbTest;
import de.superx.bianalysis.models.Right;
import de.superx.bianalysis.models.RightParam;
import de.superx.bianalysis.rest.BiAnalysisApi;
import de.superx.bianalysis.service.UserRestrictionService;
import de.superx.rest.model.Result;
public class ProjectRestrictionTest extends BaseDbTest {
@Autowired
BiAnalysisApi biAnalysisApi;
// Zeig alle Projekte (Titel des Projektes)
private ReportDefinition definition;
private String oldUserName;
private Integer oldUserPersonId;
private Integer oldOrgId;
@Before
public void init() throws Exception {
oldUserName = user.getName();
oldUserPersonId = user.getUserPersonId();
oldOrgId = user.getHisInOneOrgUnitLidOfRole();
// Werner Albrecht, bei einem Projekt Projektleiter (in fact_research_funds)
user.setName("albrecht");
user.setUserPersonId(Integer.valueOf(430));
user.setHisInOneOrgUnitLidOfRole(Integer.valueOf(2));
setRight(Right.CREATE_ANALYSIS);
String reportJson = """
{
"factTableId": "res:105",
"hideEmptyColumns": false,
"leftDimensionAttributeIds": [ "res:608" ],
"measureIds": [ "res:127" ]
}
""";
this.definition = BIATestUtils.getReportDefinitionFromString(reportJson);
}
@After
public void restoreUserValues() {
user.setName(oldUserName);
user.setHisInOneOrgUnitLidOfRole(oldOrgId);
user.setUserPersonId(oldUserPersonId);
}
@Test
public void testPersonIstProjektleiterSiehtEigeneProjekte() throws Exception {
setRight(Right.CREATE_ANALYSIS);
UserRestrictionService builder = new UserRestrictionService(user, dataSource);
builder.calculateDimensionRestrictions(user.getUserPersonId());
Result result = biAnalysisApi.getReport(definition);
assertEquals(2, result.rows.size()); // 1 für das Projekt, 1 für die Gesamtzeile
}
@Test
public void testPersonIstProjektleiterSiehtAlleProjekte() throws Exception {
String rightParamAlleProjekte = "2";
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.PROJECT, rightParamAlleProjekte);
UserRestrictionService builder = new UserRestrictionService(user, dataSource);
builder.calculateDimensionRestrictions(user.getUserPersonId());
Result result = biAnalysisApi.getReport(definition);
assertTrue(result.rows.size() > 2); // Werner sieht jetzt alle Projekte (sollten mehr als zwei sein)
}
@Test
public void testPersonIstKeinProjektleiterSiehtKeineProjekte() throws Exception {
user.setName("neuer testuser");
user.setUserPersonId(Integer.valueOf(3333));
user.setHisInOneOrgUnitLidOfRole(Integer.valueOf(2));
setRight(Right.CREATE_ANALYSIS);
UserRestrictionService builder = new UserRestrictionService(user, dataSource);
builder.calculateDimensionRestrictions(user.getUserPersonId());
Result result = biAnalysisApi.getReport(definition);
assertEquals(1, result.rows.size()); // eine Zeile für die Gesamtzeile
}
@Test
public void testPersonIstProjektleiterMitOrgeinheitEinschränkung() throws Exception {
// Wir setzen die Organisationseinheit bei Werner Albrecht jetzt auf
// "Lehrstuhl Numerische und Angewandte Mathematik" und erstellen die Orgunit
// Restriktion. Da er seine Projekte als Forschungsleiter in einer anderen Orgunit
// betreut hat, sollte er keine Projekte angezeigt bekommen.
String dimOrgunitFlatInProjektFinanzSternId = "res:79126";
try {
setIsRestricted(dimOrgunitFlatInProjektFinanzSternId, true);
user.setHisInOneOrgUnitLidOfRole(Integer.valueOf(100199));
setRight(Right.CREATE_ANALYSIS);
UserRestrictionService builder = new UserRestrictionService(user, dataSource);
builder.calculateDimensionRestrictions(user.getUserPersonId());
builder.applyOrgunitRestrictions(); // Wir setzen die Orgunit Restriktion
Result result = biAnalysisApi.getReport(definition);
assertEquals(1, result.rows.size()); // eine Zeile für die Gesamtzeile
} finally {
setIsRestricted(dimOrgunitFlatInProjektFinanzSternId, false);
}
}
private void setIsRestricted(String dimensionId, boolean isRestricted) {
String sql = "UPDATE metadata.dimension SET is_restricted = ? WHERE id = ?";
int updatedRows = new JdbcTemplate(dataSource).update(sql, Boolean.valueOf(isRestricted), dimensionId);
assertEquals("Expected to update exactly one entry.", 1, updatedRows);
}
}