package de.superx.kettle.statistics; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.time.Year; import java.util.HashMap; import java.util.Map; import org.junit.Before; import org.junit.Test; import org.pentaho.di.core.logging.LogLevel; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.support.rowset.SqlRowSet; import de.superx.BaseDbTest; import de.superx.KettleTestRunner; import de.superx.stat.StatisticsBase; public class ExaminationOfficialStatisticTest extends BaseDbTest { private static final String KETTLE_JOB_FILE = "superx/WEB-INF/conf/edustore/db/module/astat/etl/statistik2016/estatistik.kjb"; private final int year = Year.now().getValue() - 1; private String STICHTAG_STUD_AKTUELLE; private String STICHTAG_STUD_AMTLSTAT; private String STICHTAG_PRUEF_AKTUELLE; private String STICHTAG_PRUEF_AMTLSTAT; @Before public void _init() throws Exception { JdbcTemplate jt = new JdbcTemplate(dataSource); STICHTAG_STUD_AKTUELLE = jt.queryForObject("SELECT tid FROM sos_stichtag where TRIM(stichtagsart)='Studierende'" + " AND TRIM(name)='Aktuelle Zahlen'", String.class); STICHTAG_STUD_AMTLSTAT = jt.queryForObject("SELECT tid FROM sos_stichtag where TRIM(stichtagsart)='Studierende'" + " AND TRIM(name)='Amtl. Statistik Land'", String.class); STICHTAG_PRUEF_AKTUELLE = jt.queryForObject("SELECT tid FROM sos_stichtag where TRIM(stichtagsart)='Prüfungen'" + " AND TRIM(name)='Aktuelle Zahlen'", String.class); STICHTAG_PRUEF_AMTLSTAT = jt.queryForObject("SELECT tid FROM sos_stichtag where TRIM(stichtagsart)='Prüfungen'" + " AND TRIM(name)='Amtl. Statistik Land (Prüf.)'", String.class); } /** * Test to check if statistics contains a column for berichtseinheitid * #186046 * * @author hiber * */ @Test public void testBerichtseinheitId() throws Exception { Map parameter = new HashMap<>() { private static final long serialVersionUID = 1L; { put("lieferung", "2"); put("berichtssemester", year + "1"); put("stichtagsart_stud_berichtssem", STICHTAG_STUD_AMTLSTAT); put("stichtagsart_stud_vorsem", STICHTAG_STUD_AKTUELLE); put("stichtagsart_pruef_berichtssem", STICHTAG_PRUEF_AMTLSTAT); put("stichtagsart_pruef_vorsem", STICHTAG_PRUEF_AKTUELLE); put("finalizePruefStatSql", ""); put("berichtseinheitid", "42"); } }; KettleTestRunner.runKettleJob(KETTLE_JOB_FILE, parameter, LogLevel.BASIC); final String EXPECTED = "4200"; SqlRowSet rs = executeQuery("SELECT distinct berichtseinheitid FROM " + StatisticsBase.MODULE_PREFIX + "astat;"); rs.next(); String berichtseinheitid = rs.getString(1); assertNotNull("berichtseinheitid not null", berichtseinheitid); assertTrue("berichtseinheitid has been right padded", berichtseinheitid.endsWith(EXPECTED)); assertTrue("length berichtseinheitid", berichtseinheitid.length() == 8); } /** * Test to check if gender '3' is set correctly, see * #186046 *
* Attention: this test uses modified unload data at the moment * * @author hiber * * @throws Exception */ @Test public void testGender() throws Exception { Map parameter = new HashMap<>() { private static final long serialVersionUID = 1L; { put("lieferung", "2"); put("berichtssemester", year + "1"); put("stichtagsart_stud_berichtssem", STICHTAG_STUD_AMTLSTAT); put("stichtagsart_stud_vorsem", STICHTAG_STUD_AKTUELLE); put("stichtagsart_pruef_berichtssem", STICHTAG_PRUEF_AMTLSTAT); put("stichtagsart_pruef_vorsem", STICHTAG_PRUEF_AKTUELLE); put("finalizePruefStatSql", ""); put("berichtseinheitid", "42"); } }; KettleTestRunner.runKettleJob(KETTLE_JOB_FILE, parameter, LogLevel.BASIC); SqlRowSet resultSet = executeQuery("SELECT ef007 FROM " + StatisticsBase.MODULE_PREFIX + "astat WHERE ef006 = '000011264819';"); resultSet.next(); int gender = resultSet.getInt("ef007"); assertEquals("Field ef007 contains correct gender", 3, gender); } /** * Test to check if the specified finalizePruefStatSql variable will be executed * @author hiber * */ @Test public void testFinalizePruefStatSql() throws Exception { final String EXPECTED = "42"; Map parameter = new HashMap<>() { private static final long serialVersionUID = 1L; { put("lieferung", "2"); put("berichtssemester", year + "1"); put("matrikelnr", "11244235"); put("stichtagsart_stud_berichtssem", STICHTAG_STUD_AMTLSTAT); put("stichtagsart_stud_vorsem", STICHTAG_STUD_AKTUELLE); put("stichtagsart_pruef_berichtssem", STICHTAG_PRUEF_AMTLSTAT); put("stichtagsart_pruef_vorsem", STICHTAG_PRUEF_AKTUELLE); put("finalizePruefStatSql", "UPDATE " + StatisticsBase.MODULE_PREFIX + "astat SET berichtseinheitid='42' WHERE ef006='000011244235'"); put("berichtseinheitid", "42"); } }; KettleTestRunner.runKettleJob(KETTLE_JOB_FILE, parameter, LogLevel.BASIC); SqlRowSet rs = executeQuery("SELECT berichtseinheitid FROM " + StatisticsBase.MODULE_PREFIX + "astat WHERE ef006='000011244235';"); rs.next(); String berichtseinheitid = rs.getString(1); assertNotNull("berichtseinheitid not null", berichtseinheitid); assertEquals("finalizePruefStatSql has been executed", EXPECTED, berichtseinheitid); } /** * Test to check if the specified finalizeStudStatSql variable will be executed * @author hiber * */ @Test public void testFinalizeStudStatSql() throws Exception { final String EXPECTED = "42"; Map parameter = new HashMap<>() { private static final long serialVersionUID = 1L; { put("lieferung", "1"); put("berichtssemester", year + "1"); put("matrikelnr", "11244235"); put("stichtagsart_stud_berichtssem", STICHTAG_STUD_AMTLSTAT); put("stichtagsart_stud_vorsem", STICHTAG_STUD_AKTUELLE); put("stichtagsart_pruef_berichtssem", STICHTAG_PRUEF_AMTLSTAT); put("stichtagsart_pruef_vorsem", STICHTAG_PRUEF_AKTUELLE); put("finalizeStudStatSql", "UPDATE " + StatisticsBase.MODULE_PREFIX + "astat SET berichtseinheitid='42' WHERE ef006='000011244235'"); put("berichtseinheitid", "42"); } }; KettleTestRunner.runKettleJob(KETTLE_JOB_FILE, parameter, LogLevel.BASIC); SqlRowSet rs = executeQuery("SELECT berichtseinheitid FROM " + StatisticsBase.MODULE_PREFIX + "astat WHERE ef006='000011244235';"); rs.next(); String berichtseinheitid = rs.getString(1); assertNotNull("berichtseinheitid not null", berichtseinheitid); assertEquals("finalizePruefStatSql has been executed", EXPECTED, berichtseinheitid); } /** * BIA TC15976: Studierenden- und Prüfungsstatistik ab SS 2017: Export Prüfungsstatistik * Test to checks the content of the generated small examination Statistic * * @author hase * */ @Test public void testSmallExaminationStatistic() throws Exception { Map parameter = new HashMap<>() { private static final long serialVersionUID = 1L; { put("lieferung", "2"); //ExaminationStatistic put("berichtssemester", year + "1"); put("stichtagsart_stud_berichtssem", STICHTAG_STUD_AMTLSTAT); put("matrikelnr", "11244235"); put("stichtagsart_stud_vorsem", STICHTAG_STUD_AKTUELLE); put("stichtagsart_pruef_berichtssem", STICHTAG_PRUEF_AMTLSTAT); put("stichtagsart_pruef_vorsem", STICHTAG_PRUEF_AKTUELLE); put("finalizePruefStatSql", ""); put("berichtseinheitid", "42"); } }; KettleTestRunner.runKettleJob(KETTLE_JOB_FILE, parameter, LogLevel.ERROR); Integer YEAR = Integer.valueOf(year); final String[] EXPECTED = (String.format("99914200;03;1;%s;9991;000001;000011244235;2;10;04;2006;Simo;000" + ";;;;;;;;;9990;121;1;%s;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;%s;03;05;774;;;;;;;1999106;01;00;0;0;0;030;000;000;;;;" + ";;;;;;;;;168;;04;663;664;;665;;04;%s;1;8;;;;;1999101;03;00;0;0;0;182;000;000;;;;;;;;;;;;" + ";135;;06;026;105;;273;;01;%s;1;8;;;;;" ,YEAR, Integer.valueOf(year - 3), Integer.valueOf(year - 1), YEAR, YEAR)).split(";", -1); SqlRowSet rs = executeQuery("SELECT * FROM " + StatisticsBase.MODULE_PREFIX + "astat"); final int colomnCount = rs.getMetaData().getColumnCount(); assertTrue("Result not empty", rs.next()); for (int i = 0; i < colomnCount - 1; i++) { String s = rs.getString(i + 1); if (s == null) s = ""; //work around (temporarily) faulty sample data, Z.245383/FS-Umstellung: int j =i; if (s.contains("-") && j == 134) s = s.substring(1); if (s.contains("-") && j == 171) s = "03"; assertEquals("Field " + (i+1) + " contains correct value ", EXPECTED[i], s); } } protected SqlRowSet executeQuery(String query) throws Exception { JdbcTemplate jt = new JdbcTemplate(dataSource); return jt.queryForRowSet(query); } }