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.
380 lines
15 KiB
380 lines
15 KiB
package de.superx.rest.kenn; |
|
|
|
import static org.junit.Assert.assertEquals; |
|
import static org.junit.Assert.assertThrows; |
|
import static org.junit.Assert.assertTrue; |
|
|
|
import java.io.File; |
|
import java.sql.Connection; |
|
import java.sql.SQLException; |
|
import java.util.HashMap; |
|
import java.util.Iterator; |
|
import java.util.List; |
|
import java.util.Map; |
|
|
|
import org.junit.Before; |
|
import org.junit.Test; |
|
import org.springframework.beans.factory.annotation.Autowired; |
|
import org.springframework.core.io.FileSystemResource; |
|
import org.springframework.jdbc.datasource.init.ScriptException; |
|
import org.springframework.jdbc.datasource.init.ScriptUtils; |
|
import org.springframework.test.context.ContextConfiguration; |
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
import com.fasterxml.jackson.core.type.TypeReference; |
|
import com.fasterxml.jackson.databind.ObjectMapper; |
|
import com.fasterxml.jackson.databind.json.JsonMapper; |
|
|
|
import de.superx.BaseDbTest; |
|
import de.superx.TestApplicationConfigPg; |
|
import de.superx.common.AccessDeniedException; |
|
import de.superx.common.SxUser; |
|
import de.superx.jdbc.entity.kenn.Stichtag; |
|
import de.superx.jdbc.entity.kennx.Lieferfreigabe; |
|
import de.superx.jdbc.entity.kennx.LieferfreigabeHs; |
|
import de.superx.jdbc.entity.kennx.LieferfreigabeStichtagsart; |
|
import de.superx.jdbc.entity.kennx.LieferfreigabeStichtagsartBezugszeit; |
|
import de.superx.rest.InputValidationError; |
|
import de.superx.rest.KennConfigApi; |
|
import de.superx.spring.TestUserServiceImpl; |
|
import de.superx.spring.service.UserService; |
|
|
|
|
|
@Transactional |
|
public class KennConfigApiTest extends BaseDbTest { |
|
|
|
|
|
static String RW_TEST_PATH = String.join(File.separator, new String[] {"test", "resources", "db", "fixtures", "kennx" }); |
|
private static final String RIGHT_ADMIN = "RIGHT_CS_BIA_STANDARDREPORTS_ADMIN"; |
|
private static final String RIGHT_REPORT_DELIVERY = "RIGHT_CS_BIA_STANDARDREPORTS_MANAGE_REPORTDELIVERY"; |
|
private static final String CREATE_KENNX_TABLES = String.join(File.separator, new String[] {"test", "resources", "db", "fixtures", "kennx", "create_kennx_tables.sql" }); |
|
|
|
@Autowired |
|
private KennConfigApi kennConfigApi; |
|
|
|
@Before |
|
public void init() throws ScriptException, SQLException { |
|
try (Connection con = dataSource.getConnection()) { |
|
ScriptUtils.executeSqlScript(con, new FileSystemResource(new File(CREATE_KENNX_TABLES))); |
|
} |
|
} |
|
|
|
|
|
@Test |
|
public void testSaveLieferfreigabe() { |
|
String file = "lieferfreigabe"; |
|
saveLieferfreigabeFromFile(file); |
|
} |
|
|
|
@Test |
|
public void testSaveLieferfreigabeManyStichtagsarten() { |
|
String file = "lieferfreigabeHochschulerfolgsbericht"; |
|
saveLieferfreigabeFromFile(file); |
|
} |
|
|
|
@Test |
|
public void testSaveLieferfreigabeDateFrom() { |
|
String file = "lieferfreigabeDateFrom"; |
|
saveLieferfreigabeFromFile(file); |
|
} |
|
|
|
@Test |
|
public void testSaveLieferfreigabeDateTo() { |
|
String file = "lieferfreigabeDateTo"; |
|
saveLieferfreigabeFromFile(file); |
|
} |
|
|
|
@Test |
|
public void testSaveLieferfreigabePeriod() { |
|
String file = "lieferfreigabePeriod"; |
|
saveLieferfreigabeFromFile(file); |
|
} |
|
|
|
@Test |
|
public void testSaveLieferfreigabeFilter() { |
|
String file = "lieferfreigabeDateTo"; |
|
saveLieferfreigabeFromFile(file); |
|
} |
|
|
|
@Test |
|
public void testSaveAndDeleteLieferfreigabe() { |
|
String file = "lieferfreigabe"; |
|
saveLieferfreigabeFromFile(file); |
|
int[] ids = {1}; |
|
kennConfigApi.deleteLieferfreigaben(ids); |
|
assertEquals(0, kennConfigApi.getLieferfreigabenConfig().size()); |
|
} |
|
|
|
@Test |
|
public void deleteNotExistingLieferfreigabe() { |
|
String file = "lieferfreigabe"; |
|
saveLieferfreigabeFromFile(file); |
|
int[] ids = {2,3,4}; |
|
kennConfigApi.deleteLieferfreigaben(ids); |
|
assertEquals(1, kennConfigApi.getLieferfreigabenConfig().size()); |
|
} |
|
|
|
@Test |
|
public void testSaveLieferfreigabeWithAdminRights() { |
|
setAdminRights(); |
|
String file = "lieferfreigabeHochschulerfolgsbericht"; |
|
Lieferfreigabe lieferfreigabe = readLieferfreigabeFromJson(file); |
|
//adminrights are not enough a special right is needed |
|
assertThrows(AccessDeniedException.class, () -> { |
|
kennConfigApi.saveLieferfreigabe(lieferfreigabe); |
|
}); |
|
} |
|
|
|
@Test |
|
public void testDeleteLieferfreigabeWithAdminRights() { |
|
setAdminRights(); |
|
//adminrights are not enough a special right is needed |
|
assertThrows(AccessDeniedException.class, () -> { |
|
int[] ids = {1}; |
|
kennConfigApi.deleteLieferfreigaben(ids); |
|
}); |
|
} |
|
|
|
@Test |
|
public void testSaveLieferfreigabePreventOverwrite() { |
|
setReportDeliveryRights(); |
|
saveInvalidLieferfreigabe("lieferfreigabeWithTid"); |
|
} |
|
|
|
@Test |
|
public void testSaveLieferfreigabeInvalidPeriod() { |
|
setReportDeliveryRights(); |
|
saveInvalidLieferfreigabe("lieferfreigabeInvalidPeriod"); |
|
} |
|
|
|
@Test |
|
public void testSaveLieferfreigabeInvalidBezugszeit() { |
|
setReportDeliveryRights(); |
|
saveInvalidLieferfreigabe("lieferfreigabeInvalidBezugszeit"); |
|
} |
|
|
|
|
|
@Test |
|
public void testSaveLieferfreigabeInvalidFilter() { |
|
setReportDeliveryRights(); |
|
saveInvalidLieferfreigabe("lieferfreigabeInvalidFilter"); |
|
} |
|
|
|
@Test |
|
public void testSaveStichtage() { |
|
setAdminRights(); |
|
List<Stichtag> stichtage = readStichtageFromJson("stichtage"); |
|
kennConfigApi.saveStichtageConfig(stichtage); |
|
compareStichtage(stichtage, kennConfigApi.getStichtageConfig()); |
|
} |
|
|
|
@Test |
|
public void testSaveStichtageWithoutDuplicates() { |
|
setAdminRights(); |
|
List<Stichtag> stichtage = readStichtageFromJson("stichtage"); |
|
List<Stichtag> stichtage2 = readStichtageFromJson("stichtage"); |
|
kennConfigApi.saveStichtageConfig(stichtage); |
|
int numberOfStichtage = kennConfigApi.getStichtageConfig().size(); |
|
kennConfigApi.saveStichtageConfig(stichtage2); |
|
assertEquals(numberOfStichtage, kennConfigApi.getStichtageConfig().size()); |
|
compareStichtage(stichtage, kennConfigApi.getStichtageConfig()); |
|
} |
|
|
|
@Test |
|
public void testSaveAndDeleteStichtage() { |
|
setAdminRights(); |
|
List<Stichtag> stichtage = readStichtageFromJson("stichtag"); |
|
kennConfigApi.saveStichtageConfig(stichtage); |
|
int[] ids = {1}; |
|
kennConfigApi.deleteStichtage(ids); |
|
assertEquals(0, kennConfigApi.getStichtageConfig().size()); |
|
} |
|
|
|
|
|
@Test |
|
public void testSaveStichtagPreventOverwrite() { |
|
setAdminRights(); |
|
List<Stichtag> stichtage = readStichtageFromJson("stichtageWithTid"); |
|
assertThrows(InputValidationError.class, () -> { |
|
kennConfigApi.saveStichtageConfig(stichtage); |
|
}); |
|
} |
|
|
|
@Test |
|
public void testSaveStichtageInvalidBezugsart() { |
|
setAdminRights(); |
|
List<Stichtag> stichtage = readStichtageFromJson("stichtageInvalidBezugsart"); |
|
assertThrows(InputValidationError.class, () -> { |
|
kennConfigApi.saveStichtageConfig(stichtage); |
|
}); |
|
} |
|
|
|
@Test |
|
public void testSaveStichtageInvalidBezugszeit() { |
|
setAdminRights(); |
|
List<Stichtag> stichtage = readStichtageFromJson("stichtageInvalidBezugszeit"); |
|
assertThrows(InputValidationError.class, () -> { |
|
kennConfigApi.saveStichtageConfig(stichtage); |
|
}); |
|
} |
|
|
|
@Test |
|
public void testSaveStichtageInvalidStichtagsart() { |
|
setAdminRights(); |
|
List<Stichtag> stichtage = readStichtageFromJson("stichtageInvalidStichtagsart"); |
|
assertThrows(InputValidationError.class, () -> { |
|
kennConfigApi.saveStichtageConfig(stichtage); |
|
}); |
|
} |
|
|
|
@Test |
|
public void testSaveStichtagMissingDate() { |
|
setAdminRights(); |
|
List<Stichtag> stichtage = readStichtageFromJson("stichtageMissingDate"); |
|
assertThrows(InputValidationError.class, () -> { |
|
kennConfigApi.saveStichtageConfig(stichtage); |
|
}); |
|
} |
|
|
|
|
|
|
|
@Test |
|
public void testSaveStichtageNoRights() { |
|
setNoneRights(); |
|
assertThrows(AccessDeniedException.class, () -> { |
|
List<Stichtag> stichtage = readStichtageFromJson("stichtage"); |
|
kennConfigApi.saveStichtageConfig(stichtage); |
|
}); |
|
} |
|
|
|
@Test |
|
public void testDeleteStichtageNoRights() { |
|
setNoneRights(); |
|
assertThrows(AccessDeniedException.class, () -> { |
|
int[] ids = {1}; |
|
kennConfigApi.deleteStichtage(ids); |
|
}); |
|
} |
|
|
|
|
|
public void saveInvalidLieferfreigabe(String file) { |
|
Lieferfreigabe lieferfreigabe = readLieferfreigabeFromJson(file); |
|
assertThrows(InputValidationError.class, () -> { |
|
kennConfigApi.saveLieferfreigabe(lieferfreigabe); |
|
}); |
|
} |
|
|
|
private void saveLieferfreigabeFromFile(String file) { |
|
setReportDeliveryRights(); |
|
Lieferfreigabe lieferfreigabe = readLieferfreigabeFromJson(file); |
|
List<Lieferfreigabe> freigaben = kennConfigApi.getLieferfreigabenConfig(); |
|
kennConfigApi.saveLieferfreigabe(lieferfreigabe); |
|
freigaben = kennConfigApi.getLieferfreigabenConfig(); |
|
Lieferfreigabe lieferfreigabe2 = freigaben.get(0); |
|
compareLieferfreigabe(lieferfreigabe, lieferfreigabe2); |
|
} |
|
|
|
private static Lieferfreigabe readLieferfreigabeFromJson(String name) { |
|
String path = String.join(File.separator, new String[] {RW_TEST_PATH, "req", name + ".json"}); |
|
ObjectMapper mapper = JsonMapper.builder().findAndAddModules().build(); |
|
Lieferfreigabe lieferfreigabe = null; |
|
File test = new File (path); |
|
try { |
|
lieferfreigabe = mapper.readValue(test, Lieferfreigabe.class); |
|
} catch (Exception e) { |
|
e.printStackTrace(); |
|
} |
|
return lieferfreigabe; |
|
} |
|
|
|
private static List<Stichtag> readStichtageFromJson(String name) { |
|
String path = String.join(File.separator, new String[] {RW_TEST_PATH, "req", name + ".json"}); |
|
ObjectMapper mapper = JsonMapper.builder().findAndAddModules().build(); |
|
List<Stichtag> stichtage = null; |
|
File test = new File (path); |
|
try { |
|
stichtage = mapper.readValue(test, new TypeReference<List<Stichtag>>(){}); |
|
} catch (Exception e) { |
|
e.printStackTrace(); |
|
} |
|
return stichtage; |
|
} |
|
|
|
/* |
|
* Ein direkter Vergleich der einzelnen Objekte ist nicht möglich, da einige IDs von Objekten |
|
* erst beim Speichern gesetzt werden. |
|
* Zudem unterschieden sich die gespeicherten Strings von denen, die aus der Datenbank geholt werden durch |
|
* trailing space. Dies wird hoffentlich nach und nach noch in der Datenbank angepasst. |
|
* Die Anpassung von equals() in den einzelnen Objekten würde auch die Anpassung von hashcode() erfordern |
|
* um Vergleichsfunktionen wie containsAll() für Sets zu nutzen. |
|
* Der Vorteil dieser umfangreichen Funktion ist, dass eine Fehlerursache innerhalb eines Objektes direkt |
|
* erkannt werden kann. |
|
* Nachteil ist, dass die Reihenfolge der Hochschulen, Stichtagsarten und Bezugszeiten der |
|
* zu vergleichenden Lieferfreigaben identisch sein müssen. |
|
*/ |
|
private static void compareLieferfreigabe(Lieferfreigabe lieferfreigabe1, Lieferfreigabe lieferfreigabe2) { |
|
assertEquals(lieferfreigabe1.report_name, lieferfreigabe2.report_name); |
|
assertEquals(lieferfreigabe1.additional_filter_name, lieferfreigabe2.additional_filter_name); |
|
assertEquals(lieferfreigabe1.gueltig_bis, lieferfreigabe2.gueltig_bis); |
|
assertEquals(lieferfreigabe1.gueltig_von, lieferfreigabe2.gueltig_von); |
|
assertEquals(lieferfreigabe1.lieferfreigabeHs.size(), lieferfreigabe2.lieferfreigabeHs.size()); |
|
assertEquals(lieferfreigabe1.lieferfreigabeStichtagsart.size(), lieferfreigabe2.lieferfreigabeStichtagsart.size()); |
|
|
|
Iterator<LieferfreigabeHs> hsItr1 = lieferfreigabe1.lieferfreigabeHs.iterator(); |
|
Iterator<LieferfreigabeHs> hsItr2 = lieferfreigabe2.lieferfreigabeHs.iterator(); |
|
while(hsItr1.hasNext() && hsItr2.hasNext()){ |
|
LieferfreigabeHs hochschule1 = hsItr1.next(); |
|
LieferfreigabeHs hochschule2 = hsItr2.next(); |
|
assertEquals(hochschule1.hochschule_name.trim(), hochschule2.hochschule_name.trim()); |
|
assertEquals(hochschule1.hsNr, hochschule2.hsNr); |
|
} |
|
|
|
Iterator<LieferfreigabeStichtagsart> sItr1 = lieferfreigabe1.lieferfreigabeStichtagsart.iterator(); |
|
Iterator<LieferfreigabeStichtagsart> sItr2 = lieferfreigabe2.lieferfreigabeStichtagsart.iterator(); |
|
while(sItr1.hasNext() && sItr2.hasNext()){ |
|
LieferfreigabeStichtagsart stichtagsart1 = sItr1.next(); |
|
LieferfreigabeStichtagsart stichtagsart2 = sItr2.next(); |
|
assertEquals(stichtagsart1.datum_wird_ausgewertet, stichtagsart2.datum_wird_ausgewertet); |
|
assertEquals(stichtagsart1.kennxLieferfreigabeStichtagsartBezugszeit.size(), stichtagsart2.kennxLieferfreigabeStichtagsartBezugszeit.size()); |
|
assertEquals(stichtagsart1.stichtagsart_name, stichtagsart2.stichtagsart_name); |
|
assertEquals(stichtagsart1.stichtagsartId, stichtagsart2.stichtagsartId.trim()); |
|
Iterator<LieferfreigabeStichtagsartBezugszeit> bItr1 = stichtagsart1.kennxLieferfreigabeStichtagsartBezugszeit.iterator(); |
|
Iterator<LieferfreigabeStichtagsartBezugszeit> bItr2 = stichtagsart2.kennxLieferfreigabeStichtagsartBezugszeit.iterator(); |
|
while(bItr1.hasNext()) { |
|
LieferfreigabeStichtagsartBezugszeit bezugszeit1 = bItr1.next(); |
|
LieferfreigabeStichtagsartBezugszeit bezugszeit2 = bItr2.next(); |
|
assertEquals(bezugszeit1.bezugsartId, bezugszeit2.bezugsartId); |
|
assertEquals(bezugszeit1.value, bezugszeit2.value); |
|
} |
|
} |
|
} |
|
|
|
/* |
|
* Das equals() von Stichtage wurde überschrieben, sodass trailing space nicht entscheidend für unterschiedliche |
|
* Objekte sind. |
|
*/ |
|
private static void compareStichtage(List<Stichtag> stichtage1, List<Stichtag> stichtage2) { |
|
assertEquals(stichtage1.size(), stichtage2.size()); |
|
assertTrue(stichtage1.containsAll(stichtage2)); |
|
assertTrue(stichtage2.containsAll(stichtage1)); |
|
} |
|
|
|
|
|
private void setAdminRights() { |
|
Map<String, Map<String,String>> rightsMap = new HashMap<>(); |
|
rightsMap.put(RIGHT_ADMIN, null); |
|
user.setRights(rightsMap, null); |
|
} |
|
|
|
private void setReportDeliveryRights() { |
|
Map<String, Map<String,String>> rightsMap = new HashMap<>(); |
|
rightsMap.put(RIGHT_REPORT_DELIVERY, null); |
|
user.setRights(rightsMap, null); |
|
} |
|
|
|
private void setNoneRights() { |
|
Map<String, Map<String,String>> rightsMap = new HashMap<>(); |
|
user.setRights(rightsMap, null); |
|
} |
|
|
|
}
|
|
|