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.
530 lines
28 KiB
530 lines
28 KiB
package de.superx.stat; |
|
|
|
import static org.junit.Assert.assertEquals; |
|
import static org.junit.Assert.assertTrue; |
|
|
|
import java.io.BufferedOutputStream; |
|
import java.io.File; |
|
import java.io.FileInputStream; |
|
import java.io.FileOutputStream; |
|
import java.io.OutputStream; |
|
import java.nio.file.Files; |
|
import java.sql.ResultSet; |
|
import java.sql.SQLException; |
|
import java.util.HashMap; |
|
import java.util.List; |
|
|
|
import org.apache.commons.dbcp.BasicDataSource; |
|
import org.jdom2.Element; |
|
import org.jdom2.Namespace; |
|
import org.junit.BeforeClass; |
|
import org.junit.Ignore; |
|
import org.junit.Test; |
|
import org.slf4j.Logger; |
|
import org.slf4j.LoggerFactory; |
|
|
|
import com.google.common.base.Strings; |
|
|
|
import de.statspez.plausi.generated.Plausi_ERHEBUNG_GASTHOERER_2019; |
|
import de.statspez.plausi.generated.Plausi_ERHEBUNG_PROMOVIERENDE_AB_2017; |
|
import de.statspez.plausi.generated.Plausi_ERHEBUNG_STUDENTEN_PRUEFUNGEN_AB_2017; |
|
import de.superx.db.H2InMemoryCreator; |
|
import de.superx.stat.StatisticExport.ExportFormat; |
|
import de.superx.util.XmlUtil; |
|
|
|
/** |
|
* Method to test {@link de.superx.stat.StatisticExport} |
|
* |
|
* @version 1.0 |
|
*/ |
|
public class StatisticExportTest { |
|
|
|
private final static String EXAMINATION_AND_STUDENTS_PLAUSI_CLASSES_DATE = "20260218_115134"; |
|
|
|
private final static String DOCTORAL_CANDIDATE_PLAUSI_CLASSES_DATE = "20260226_134442"; |
|
|
|
private final static String GUEST_PLAUSI_CLASSES_DATE = "20260226_082349"; |
|
|
|
private static Logger logger = LoggerFactory.getLogger(StatisticExportTest.class); |
|
|
|
private static final String TMP_DIR = System.getProperty("java.io.tmpdir"); // Windows: |
|
// C:\Users\{user}\AppData\Local\Temp\ |
|
|
|
private static BasicDataSource dataSource; |
|
|
|
private static HashMap<DistributionType, StatisticExport> testClassInstances; |
|
|
|
/** |
|
* Generate a map of instances used within this test class (for better |
|
* maintenance). |
|
*/ |
|
@BeforeClass |
|
public static void initTestClassInstances() { |
|
testClassInstances = new HashMap<>(); |
|
testClassInstances.put(DistributionType.STUDENTS2016, |
|
new StatisticExport(DistributionType.STUDENTS2016, new File("superx/WEB-INF/conf/edustore/db/module/astat/etl/statistik2016").getAbsolutePath(), null)); |
|
testClassInstances.put(DistributionType.EXAMINATIONS2016, |
|
new StatisticExport(DistributionType.EXAMINATIONS2016, new File("superx/WEB-INF/conf/edustore/db/module/astat/etl/statistik2016").getAbsolutePath(), null)); |
|
testClassInstances.put(DistributionType.EXAMINATIONS2016_SHORT, |
|
new StatisticExport(DistributionType.EXAMINATIONS2016_SHORT, |
|
new File("superx/WEB-INF/conf/edustore/db/module/astat/etl/statistik2016").getAbsolutePath(), null)); |
|
testClassInstances.put(DistributionType.GUEST_LISTENERS2019, |
|
new StatisticExport(DistributionType.GUEST_LISTENERS2019, |
|
new File("superx/WEB-INF/conf/edustore/db/module/astat/etl/statistik2016").getAbsolutePath(), null)); |
|
testClassInstances.put(DistributionType.DOCTORAL_CANDIDATE, |
|
new StatisticExport(DistributionType.DOCTORAL_CANDIDATE, new File("superx/WEB-INF/conf/edustore/db/module/prom/etl/stat_prom2017").getAbsolutePath(), |
|
null)); } |
|
|
|
/** |
|
* Test case for testing csv export of student statistics 2016 |
|
* <a href="https://hiszilla.his.de/hiszilla/show_bug.cgi?id=186046">#186046</a> |
|
* |
|
* @author hiber |
|
* |
|
* @throws Exception |
|
*/ |
|
@Test |
|
public void testStudentStatistics2016CsvExport() throws Exception { |
|
// create database and check row count |
|
String schemaPath = "test/resources/schema_files/students_and_examination_statistics/schema"; |
|
String viewsPath = "test/resources/schema_files/students_and_examination_statistics/views"; |
|
String unloadsPath = "test/resources/schema_files/students_and_examination_statistics/unloads/students"; |
|
createInMemoryDB(schemaPath, viewsPath, unloadsPath); |
|
|
|
StatisticExport statisticExport = testClassInstances.get(DistributionType.STUDENTS2016); |
|
statisticExport.setDataSource(dataSource); |
|
|
|
// export file |
|
File exportCsvFile = new File(TMP_DIR, "junit_student_statistic_2016.csv"); |
|
OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(exportCsvFile)); |
|
statisticExport.getCsvData(outputStream); |
|
|
|
// read file and check |
|
List<String> fileContent = Files.readAllLines(exportCsvFile.toPath()); |
|
String[] firstRow = fileContent.get(0).split(";", -1); |
|
validateCsvFileStructure(firstRow, StudentAndExaminationStatistics2016.fieldSet, StudentAndExaminationStatistics2016.fieldLength); |
|
|
|
int rowCount = getRowCount(); |
|
assertEquals("database and unload file have the same row count", rowCount, fileContent.size()); |
|
} |
|
|
|
@Ignore |
|
@Test |
|
@SuppressWarnings("static-method") |
|
public void testGetInspectionReportForStudentStatistics2016CsvExport() throws Exception { |
|
// create database and check row count |
|
String schemaPath = "test/resources/schema_files/students_and_examination_statistics/schema"; |
|
String viewsPath = "test/resources/schema_files/students_and_examination_statistics/views"; |
|
String unloadsPath = "test/resources/schema_files/students_and_examination_statistics/unloads/students"; |
|
createInMemoryDB(schemaPath, viewsPath, unloadsPath); |
|
|
|
StatisticExport statisticExport = testClassInstances.get(DistributionType.STUDENTS2016); |
|
statisticExport.setDataSource(dataSource); |
|
|
|
String xmlFileName = "test/resources/schema_files/students_and_examination_statistics/xml_export/Pruefungen_statistik_SoSe_2025_202512.xml"; |
|
statisticExport.getInspectionReport(new FileInputStream(xmlFileName), 4); |
|
} |
|
|
|
/** |
|
* Test case for testing csv export of examination statistics 2016 |
|
* <a href="https://hiszilla.his.de/hiszilla/show_bug.cgi?id=186046">#186046</a> |
|
* |
|
* @author hiber |
|
* |
|
* @throws Exception |
|
*/ |
|
|
|
@Test |
|
public void testExaminationStatistics2016CsvExport() throws Exception { |
|
// create database and check row count |
|
String schemaPath = "test/resources/schema_files/students_and_examination_statistics/schema"; |
|
String viewsPath = "test/resources/schema_files/students_and_examination_statistics/views"; |
|
String unloadsPath = "test/resources/schema_files/students_and_examination_statistics/unloads/examinations"; |
|
createInMemoryDB(schemaPath, viewsPath, unloadsPath); |
|
|
|
StatisticExport statisticExport = testClassInstances.get(DistributionType.EXAMINATIONS2016); |
|
statisticExport.setDataSource(dataSource); |
|
|
|
// export file |
|
File exportCsvFile = new File(TMP_DIR, "junit_examination_statistic_2016.csv"); |
|
OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(exportCsvFile)); |
|
statisticExport.getCsvData(outputStream); |
|
|
|
// read file and check |
|
List<String> fileContent = Files.readAllLines(exportCsvFile.toPath()); |
|
String[] firstRow = fileContent.get(0).split(";", -1); |
|
validateCsvFileStructure(firstRow, StudentAndExaminationStatistics2016.fieldSet, StudentAndExaminationStatistics2016.fieldLength); |
|
|
|
int rowCount = getRowCount(); |
|
assertEquals("database and unload file have the same row count", rowCount, fileContent.size()); |
|
} |
|
|
|
/** |
|
* Test case for testing csv export of examination statistics 2016 (short data set) |
|
* <a href="https://hiszilla.his.de/hiszilla/show_bug.cgi?id=186046">#186046</a> |
|
* |
|
* @author hiber |
|
* |
|
* @throws Exception |
|
*/ |
|
|
|
@Test |
|
public void testExaminationStatistics2016ShortCsvExport() throws Exception { |
|
// create database and check row count |
|
String schemaPath = "test/resources/schema_files/students_and_examination_statistics/schema"; |
|
String viewsPath = "test/resources/schema_files/students_and_examination_statistics/views"; |
|
String unloadsPath = "test/resources/schema_files/students_and_examination_statistics/unloads/examinations"; |
|
createInMemoryDB(schemaPath, viewsPath, unloadsPath); |
|
|
|
StatisticExport statisticExport = testClassInstances.get(DistributionType.EXAMINATIONS2016_SHORT); |
|
statisticExport.setDataSource(dataSource); |
|
|
|
// export file |
|
File exportCsvFile = new File(TMP_DIR, "junit_examination_statistic_short_2016.csv"); |
|
OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(exportCsvFile)); |
|
statisticExport.getCsvData(outputStream); |
|
|
|
// read file and check |
|
List<String> fileContent = Files.readAllLines(exportCsvFile.toPath()); |
|
String[] firstRow = fileContent.get(0).split(";", -1); |
|
validateCsvFileStructure(firstRow, ExaminationStatistics2016Short.SHORT_FIELD_SET, ExaminationStatistics2016Short.SHORT_FIELD_LENGTHS); |
|
|
|
int rowCount = getRowCount(); |
|
assertEquals("database and unload file have the same row count", rowCount, fileContent.size()); |
|
// assert empty fields are empty |
|
for (String row : fileContent) { |
|
String[] columns = row.split(";", -1); |
|
String ef11 = columns[ExaminationStatistics2016Short.SHORT_FIELD_SET.indexOf("EF11")]; |
|
String ef21 = columns[ExaminationStatistics2016Short.SHORT_FIELD_SET.indexOf("EF21")]; |
|
String ef120 = columns[ExaminationStatistics2016Short.SHORT_FIELD_SET.indexOf("EF120")]; |
|
assertTrue("EF11 is null or empty", Strings.isNullOrEmpty(ef11)); |
|
assertTrue("EF21 is null or empty", Strings.isNullOrEmpty(ef21)); |
|
assertTrue("EF120 is null or empty", Strings.isNullOrEmpty(ef120)); |
|
} |
|
} |
|
|
|
/** |
|
* Method to check the structure of a csv row<br> |
|
* <b> Validation: </b><br> |
|
* <ol> |
|
* <li>document has 207 (98 when short data set) columns</li> |
|
* <li>document has no column names</li> |
|
* <li>last column contains 'berichtseinheitid'</li> |
|
* <li>columns have the specified length</li> |
|
* <ol> |
|
* |
|
* @param row |
|
* @param fieldlength |
|
* @param fieldset |
|
* @throws SQLException |
|
*/ |
|
@SuppressWarnings("static-method") |
|
private void validateCsvFileStructure(String[] row, List<String> fieldSet, int[] fieldLength) throws SQLException { |
|
final int COLUMN_COUNT = fieldSet.size(); |
|
|
|
assertEquals("Document has correct column count", COLUMN_COUNT, row.length - 1); // 'row.length -1' because of |
|
// line.split(";", -1); |
|
assertTrue("Document has no column_names", row[0].matches("\\d+")); |
|
assertEquals("First column contains berichtseinheitid", "99910000", row[0]); |
|
|
|
String ASSERTION_TEMPLATE = "Column %s (index %d) has the desired length"; |
|
for (int i = 0; i < fieldSet.size(); i++) { |
|
String content = row[i]; |
|
if (!content.isEmpty()) { |
|
int desiredContentLength = fieldLength[i]; |
|
assertEquals(String.format(ASSERTION_TEMPLATE, fieldSet.get(i), Integer.valueOf(i)), desiredContentLength, content.length()); |
|
} |
|
} |
|
} |
|
|
|
/** |
|
* Method to test xml export of student statistics. |
|
* This test actually fails because the survey.properties has to be updated and -obviously- |
|
* each statistic need its own .properties-file |
|
* @throws Exception |
|
*/ |
|
@Test |
|
@SuppressWarnings("static-method") |
|
public void testStudentStatistics2016XmlExport() throws Exception { |
|
String schemaPath = "test/resources/schema_files/students_and_examination_statistics/schema"; |
|
String viewsPath = "test/resources/schema_files/students_and_examination_statistics/views"; |
|
String unloadsPath = "test/resources/schema_files/students_and_examination_statistics/unloads/students"; |
|
createInMemoryDB(schemaPath, viewsPath, unloadsPath); |
|
|
|
StatisticExport statisticExport = testClassInstances.get(DistributionType.STUDENTS2016); |
|
statisticExport.setDataSource(dataSource); |
|
|
|
File exportXmlFile = new File(TMP_DIR, "junit_student_statistic_2016.xml"); |
|
OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(exportXmlFile)); |
|
|
|
statisticExport.generate(outputStream); |
|
int dbRowCount = getRowCount(); |
|
|
|
Namespace namespace = Namespace.getNamespace("http://www.destatis.de/schema/datml-raw/2.0/de"); |
|
Element xmlRoot = XmlUtil.getRootElement(exportXmlFile); |
|
List<Element> saetze = XmlUtil.traverse(xmlRoot, namespace, "nachricht", "datensegment").getChildren("satz", namespace); |
|
assertEquals("XML and database have the same row count", dbRowCount, saetze.size()); |
|
} |
|
|
|
/** |
|
* Method to test xml export of examination statistics. |
|
* This test actually fails because the survey.properties has to be updated and -obviously- |
|
* each statistic need its own .properties-file |
|
* @throws Exception |
|
*/ |
|
@Test |
|
@SuppressWarnings("static-method") |
|
public void testExaminationStatistics2016XmlExport() throws Exception { |
|
String schemaPath = "test/resources/schema_files/students_and_examination_statistics/schema"; |
|
String viewsPath = "test/resources/schema_files/students_and_examination_statistics/views"; |
|
String unloadsPath = "test/resources/schema_files/students_and_examination_statistics/unloads/examinations"; |
|
createInMemoryDB(schemaPath, viewsPath, unloadsPath); |
|
|
|
StatisticExport statisticExport = testClassInstances.get(DistributionType.EXAMINATIONS2016); |
|
statisticExport.setDataSource(dataSource); |
|
|
|
File exportXmlFile = new File(TMP_DIR, "junit_examination_statistic_2016.xml"); |
|
OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(exportXmlFile)); |
|
|
|
statisticExport.generate(outputStream); |
|
|
|
int dbRowCount = getRowCount(); |
|
|
|
Namespace namespace = Namespace.getNamespace("http://www.destatis.de/schema/datml-raw/2.0/de"); |
|
Element xmlRoot = XmlUtil.getRootElement(exportXmlFile); |
|
List<Element> saetze = XmlUtil.traverse(xmlRoot, namespace, "nachricht", "datensegment").getChildren("satz", namespace); |
|
assertEquals("XML and database have the same row count", dbRowCount, saetze.size()); |
|
} |
|
|
|
private static int getRowCount() throws Exception { |
|
ResultSet resultSet = dataSource.getConnection().createStatement().executeQuery("SELECT count(*) FROM astat_astat"); |
|
resultSet.next(); |
|
return resultSet.getInt(1); |
|
} |
|
|
|
/** |
|
* Actual for developing purposes |
|
* |
|
* @throws Exception |
|
*/ |
|
@Test |
|
@SuppressWarnings("static-method") |
|
public void testDoPlausiMussStudentsStatistics2016() throws Exception { |
|
// create database and check row count |
|
String schemaPath = "test/resources/schema_files/students_and_examination_statistics/schema"; |
|
String viewsPath = "test/resources/schema_files/students_and_examination_statistics/views"; |
|
String unloadsPath = "test/resources/schema_files/students_and_examination_statistics/unloads/students"; |
|
createInMemoryDB(schemaPath, viewsPath, unloadsPath); |
|
// seems like postgres' SERIAL is not supported so change it to H2's auto_increment |
|
dataSource.getConnection().createStatement().execute("ALTER TABLE astat_plausi ALTER COLUMN tid SET GENERATED BY DEFAULT;"); |
|
StatisticExport statisticExport = testClassInstances.get(DistributionType.STUDENTS2016); |
|
statisticExport.setDataSource(dataSource); |
|
String iMussKategorieInMaske="2"; |
|
String iMussKategorie="1"; |
|
statisticExport.doPlausi(iMussKategorieInMaske); |
|
statisticExport.readPlausiFromDb(iMussKategorie, new FileOutputStream(new File(TMP_DIR, "junit_students_statistic_2016_plausi.csv"))); |
|
} |
|
|
|
|
|
/** |
|
* Actual for developing purposes |
|
* TC20844 aendert die Daten in k_field_of_study f. GuestPlausi-Fehler wie im junitTest |
|
* @throws Exception |
|
*/ |
|
@Test |
|
@SuppressWarnings("static-method") |
|
public void testDoPlausiGuestStatistics2019() throws Exception { |
|
// create database and check row count |
|
String schemaPath = "test/resources/schema_files/guest_statistics/schema"; |
|
String viewsPath = "test/resources/schema_files/guest_statistics/views"; |
|
String unloadsPath = "test/resources/schema_files/guest_statistics/unloads"; |
|
createInMemoryDB(schemaPath, viewsPath, unloadsPath); |
|
// seems like postgres' SERIAL is not supported so change it to H2's auto_increment |
|
dataSource.getConnection().createStatement().execute("ALTER TABLE astat_plausi ALTER COLUMN tid SET GENERATED BY DEFAULT;"); |
|
StatisticExport statisticExport = testClassInstances.get(DistributionType.GUEST_LISTENERS2019); |
|
statisticExport.setDataSource(dataSource); |
|
|
|
String iMussKategorieInMaske="2"; |
|
String iMussKategorie="1"; |
|
statisticExport.doPlausi(iMussKategorieInMaske); |
|
statisticExport.readPlausiFromDb(iMussKategorie, new FileOutputStream(new File(TMP_DIR, "junit_guest_statistic_2019_plausi.csv"))); |
|
} |
|
|
|
|
|
/** |
|
* Actual for developing purposes |
|
* |
|
* @throws Exception |
|
*/ |
|
@Test |
|
@SuppressWarnings("static-method") |
|
public void testDoPlausiKannStudentsStatistics2016() throws Exception { |
|
// create database and check row count |
|
String schemaPath = "test/resources/schema_files/students_and_examination_statistics/schema"; |
|
String viewsPath = "test/resources/schema_files/students_and_examination_statistics/views"; |
|
String unloadsPath = "test/resources/schema_files/students_and_examination_statistics/unloads/students"; |
|
createInMemoryDB(schemaPath, viewsPath, unloadsPath); |
|
// seems like postgres' SERIAL is not supported so change it to H2's auto_increment |
|
dataSource.getConnection().createStatement().execute("ALTER TABLE astat_plausi ALTER COLUMN tid SET GENERATED BY DEFAULT;"); |
|
StatisticExport statisticExport = testClassInstances.get(DistributionType.STUDENTS2016); |
|
statisticExport.setDataSource(dataSource); |
|
String iKannMussKategorieInMaske="3"; |
|
String iKannKategorie="KANN"; |
|
statisticExport.doPlausi(iKannMussKategorieInMaske); |
|
statisticExport.readPlausiFromDb(iKannKategorie, new FileOutputStream(new File(TMP_DIR, "junit_students_statistic_2016_plausi.csv"))); |
|
} |
|
|
|
/** |
|
* Actual for developing purposes |
|
* |
|
* @throws Exception |
|
*/ |
|
@Test |
|
@SuppressWarnings("static-method") |
|
public void testDoPlausiMussExaminationStatistics2016() throws Exception { |
|
// create database and check row count |
|
String schemaPath = "test/resources/schema_files/students_and_examination_statistics/schema"; |
|
String viewsPath = "test/resources/schema_files/students_and_examination_statistics/views"; |
|
String unloadsPath = "test/resources/schema_files/students_and_examination_statistics/unloads/examinations"; |
|
createInMemoryDB(schemaPath, viewsPath, unloadsPath); |
|
// seems like postgres' SERIAL is not supported so change it to H2's auto_increment |
|
dataSource.getConnection().createStatement().execute("ALTER TABLE astat_plausi ALTER COLUMN tid SET GENERATED BY DEFAULT;"); |
|
StatisticExport statisticExport = testClassInstances.get(DistributionType.EXAMINATIONS2016); |
|
statisticExport.setDataSource(dataSource); |
|
String iMussKategorieInMaske="2"; |
|
statisticExport.doPlausi(iMussKategorieInMaske); |
|
String iMussKategorie="1"; |
|
statisticExport.readPlausiFromDb(iMussKategorie, new FileOutputStream(new File(TMP_DIR, "junit_examination_statistic_2016_plausi.csv"))); |
|
} |
|
|
|
/** |
|
* Actual for developing purposes |
|
* |
|
* @throws Exception |
|
*/ |
|
// @Ignore |
|
@Test |
|
@SuppressWarnings("static-method") |
|
public void testDoPlausiDoctoralCandidateStatistics() throws Exception { |
|
// create database and check row count |
|
String schemaPath = "test/resources/schema_files/doctoral_candidate_statistics/schema"; |
|
String viewsPath = "test/resources/schema_files/doctoral_candidate_statistics/views"; |
|
String unloadsPath = "test/resources/schema_files/doctoral_candidate_statistics/unloads"; |
|
createInMemoryDB(schemaPath, viewsPath, unloadsPath); |
|
// seems like postgres' SERIAL is not supported so change it to H2's auto_increment |
|
dataSource.getConnection().createStatement().execute("ALTER TABLE prom_stat_plausi ALTER COLUMN tid SET GENERATED BY DEFAULT;"); |
|
StatisticExport statisticExport = testClassInstances.get(DistributionType.DOCTORAL_CANDIDATE); |
|
statisticExport.setDataSource(dataSource); |
|
String dummy="0"; |
|
statisticExport.doPlausi(dummy); |
|
statisticExport.readPlausiFromDb(dummy, new FileOutputStream(new File(TMP_DIR, "junit_doctoral_candidate_statistic_plausi.csv"))); |
|
} |
|
|
|
private static void createInMemoryDB(String schemaPath, String viewsPath, String unloadsPath) throws Exception { |
|
H2InMemoryCreator h2InMemoryCreator = new H2InMemoryCreator(); |
|
h2InMemoryCreator.setSchemaDir(new File(schemaPath).getAbsolutePath()).setViewDir(new File(viewsPath).getAbsolutePath()).setUnlDir(new File(unloadsPath).getAbsolutePath()) |
|
.setUserName("sa").setTablePattern("(astat.*|sos.*|prom.*|hochschulinfo.*|cif.*)").setViewPattern("skipeverything").createH2InMemory(); |
|
dataSource = new BasicDataSource(); |
|
dataSource.setDriverClassName("org.h2.Driver"); |
|
dataSource.setUsername("sa"); |
|
dataSource.setPassword(""); |
|
dataSource.setUrl(H2InMemoryCreator.JDBC_H2_IN_MEMORY_URL); |
|
dataSource.setMaxActive(10); |
|
dataSource.setMaxIdle(5); |
|
dataSource.setInitialSize(5); |
|
dataSource.setValidationQuery("SELECT 42"); |
|
} |
|
|
|
|
|
@Test |
|
@SuppressWarnings("static-method") |
|
public void testPlausibilityClassVersionExaminationAndStudents() throws Exception { |
|
String plausiVersionString = new Plausi_ERHEBUNG_STUDENTEN_PRUEFUNGEN_AB_2017().getPlausiVersionString(); |
|
assertEquals("Plausibility classes are up-to-date", EXAMINATION_AND_STUDENTS_PLAUSI_CLASSES_DATE, plausiVersionString); |
|
} |
|
|
|
@Test |
|
@SuppressWarnings("static-method") |
|
public void testPlausibilityClassVersionGuest() throws Exception { |
|
String plausiVersionString = new Plausi_ERHEBUNG_GASTHOERER_2019().getPlausiVersionString(); |
|
assertEquals("Plausibility classes are up-to-date", GUEST_PLAUSI_CLASSES_DATE, plausiVersionString); |
|
} |
|
|
|
@Test |
|
@SuppressWarnings("static-method") |
|
public void testPlausibilityClassVersionDoctoralCandidate() throws Exception { |
|
String plausiVersionString = new Plausi_ERHEBUNG_PROMOVIERENDE_AB_2017().getPlausiVersionString(); |
|
assertEquals("Plausibility classes are up-to-date", DOCTORAL_CANDIDATE_PLAUSI_CLASSES_DATE, plausiVersionString); |
|
} |
|
|
|
/** |
|
* General method tests |
|
*/ |
|
@Test |
|
@SuppressWarnings("static-method") |
|
public void testExportFormat() { |
|
String contentType = StatisticExport.ExportFormat.XML.getContentType(); |
|
String mimeType = StatisticExport.ExportFormat.XML.getMimeType(); |
|
String extension = StatisticExport.ExportFormat.XML.getExtension(); |
|
assertEquals("ContentType as expected", contentType, "text/xml"); |
|
assertEquals("MimeType as expected", mimeType, "text/xml"); |
|
assertEquals("Extension as expected", extension, "xml"); |
|
assertEquals(ExportFormat.getForMimeType(mimeType), StatisticExport.ExportFormat.XML); |
|
|
|
contentType = StatisticExport.ExportFormat.CSV.getContentType(); |
|
mimeType = StatisticExport.ExportFormat.CSV.getMimeType(); |
|
extension = StatisticExport.ExportFormat.CSV.getExtension(); |
|
assertEquals("ContentType as expected", contentType, "text/comma-separated-values"); |
|
assertEquals("MimeType as expected", mimeType, "text/csv"); |
|
assertEquals("Extension as expected", extension, "csv"); |
|
assertEquals(ExportFormat.getForMimeType(mimeType), StatisticExport.ExportFormat.CSV); |
|
|
|
contentType = StatisticExport.ExportFormat.TXT.getContentType(); |
|
mimeType = StatisticExport.ExportFormat.TXT.getMimeType(); |
|
extension = StatisticExport.ExportFormat.TXT.getExtension(); |
|
assertEquals("ContentType as expected", contentType, "text/plain"); |
|
assertEquals("MimeType as expected", mimeType, "text/plain"); |
|
assertEquals("Extension as expected", extension, "txt"); |
|
assertEquals(ExportFormat.getForMimeType(mimeType), StatisticExport.ExportFormat.TXT); |
|
|
|
contentType = StatisticExport.ExportFormat.ZIP.getContentType(); |
|
mimeType = StatisticExport.ExportFormat.ZIP.getMimeType(); |
|
extension = StatisticExport.ExportFormat.ZIP.getExtension(); |
|
assertEquals("ContentType as expected", contentType, "application/zip"); |
|
assertEquals("MimeType as expected", mimeType, "application/zip"); |
|
assertEquals("Extension as expected", extension, "zip"); |
|
assertEquals(ExportFormat.getForMimeType(mimeType), StatisticExport.ExportFormat.ZIP); |
|
|
|
contentType = StatisticExport.ExportFormat.UNKNOWN.getContentType(); |
|
mimeType = StatisticExport.ExportFormat.UNKNOWN.getMimeType(); |
|
extension = StatisticExport.ExportFormat.UNKNOWN.getExtension(); |
|
assertEquals("ContentType as expected", contentType, ""); |
|
assertEquals("MimeType as expected", mimeType, ""); |
|
assertEquals("Extension as expected", extension, ""); |
|
assertEquals(ExportFormat.getForMimeType(mimeType), StatisticExport.ExportFormat.UNKNOWN); |
|
} |
|
|
|
@Test |
|
@SuppressWarnings("static-method") |
|
public void testConstructorWithWrongSqlParameter() { |
|
final String EXPECTED_SQL = "select berichtseinheitid, ef001 , ef002 , ef003 , ef004 , ef005 , ef006 , ef007 , ef008u1 , ef008u2 , ef008u3 , ef009 , ef010 , ef011 , ef012u1 , ef012u2 , " |
|
+ "ef013u1 , ef013u2 , ef014 , ef015 , ef016 , ef017 , ef018 , ef019 , ef020 , ef021 , ef022 , ef023 , ef024 , ef025 , ef026 , ef027 , ef028 ," |
|
+ " ef029 , ef030 , ef031 , ef032 , ef033 , ef034u1 , ef034u2 , ef035 , ef036 , ef037 , ef038 , ef039 , ef040 , ef041 , ef042 , ef043 , ef044 , " |
|
+ "ef045 , ef046 , ef047 , ef048 , ef049 , ef050u1 , ef050u2 , ef051 , ef052 , ef053 , ef054 , ef055 , ef056 , ef057 , ef058 , ef059 , ef060 ," |
|
+ " ef061 , ef062 , ef063 , ef064 , ef065 , ef066 , ef067 , ef068 , ef069 , ef070 , ef071 , ef072 , ef073 , ef074 , ef075 , ef076 , ef077 ," |
|
+ " ef078 , ef079 , ef080 , ef081 , ef082 , ef083 , ef084 , ef085 , ef086 , ef087 , ef088 , ef089 , ef090 , ef091 , ef092 , ef093 , ef094 , " |
|
+ "ef095 , ef096 , ef097 , ef098 , ef099 , ef100 , ef101 , ef102 , ef103 , ef104 , ef105 , ef106 , ef107 , ef108 , ef109 , ef110 , ef111 , " |
|
+ "ef112 , ef113 , ef114 , ef115 , ef116 , ef117 , ef118 , ef119u1 , ef119u2 , ef120 , ef121 , ef122 , ef123 , ef124 , ef125 , ef126 , ef127 , " |
|
+ "ef128 , ef129 , ef130 , ef131 , ef132 , ef133 , ef134 , ef135 , ef136 , ef137 , ef138 , ef139 , ef140 , ef141 , ef142 , ef143 , ef144 , " |
|
+ "ef145 , ef146 , ef147 , ef148 , ef149 , ef150 , ef151 , ef152 , ef153 , ef154 , ef155 , ef156 , ef157 , ef158 , ef159 , ef160 , ef161 , " |
|
+ "ef162 , ef163 , ef164 , ef165 , ef166 , ef167 , ef168 , ef169 , ef170 , ef171 , ef172 , ef173 , ef174 , ef175 , ef176 , ef177 , ef178 , " |
|
+ "ef179 , ef180 , ef181 , ef182 , ef183 , ef184 , ef185 , ef186 , ef187 , ef188 , ef189 , ef190 , ef191 , ef192 , ef193 , ef194 , ef195 ," |
|
+ " ef196 , ef197 , ef198 , ef199 from astat_astat order by ef006"; |
|
String configDir = new File("superx/WEB-INF/conf/edustore/db/module/sos/etl/statistik2016").getAbsolutePath(); |
|
String sqlFilterClause = null; |
|
|
|
StatisticExport statisticExport = new StatisticExport(DistributionType.STUDENTS2016, configDir, sqlFilterClause); |
|
assertEquals(EXPECTED_SQL.toLowerCase().replaceAll("\\s", ""), statisticExport.sql.toLowerCase().replaceAll("\\s", "")); |
|
} |
|
|
|
} |