package de.superx.kettle.statistics; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; 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 org.springframework.jdbc.support.rowset.SqlRowSetMetaData; import de.superx.BaseDbTest; import de.superx.KettleTestRunner; import de.superx.stat.StatisticsBase; public class ExaminationEctsAndRszTest extends BaseDbTest { private static final String jobFile = String.join(File.separator, "superx","WEB-INF","conf","edustore","db","module","astat","etl","statistik2016","estatistik.kjb"); private static final String statSelect = "select * from " + StatisticsBase.MODULE_PREFIX + "astat"; private static Map parameters = createParameterMap(); private SqlRowSet originalContentStgLab; private Integer rsz, tid1, tid2, bioTid, matheTid; @Test public void testEctsRsz() throws IOException { loadFixture(); KettleTestRunner.runKettleJob(jobFile, parameters, LogLevel.ERROR); Map expectedResult = new HashMap<>(); expectedResult.put("ef132", "250"); expectedResult.put("ef149", "07"); expectedResult.put("ef150", "026"); expectedResult.put("ef151", "105"); expectedResult.put("ef153", null); expectedResult.put("ef155", "07"); expectedResult.put("ef156", "2020"); expectedResult.put("ef187", null); expectedResult.put("ef188", null); expectedResult.put("ef189", null); expectedResult.put("ef190", null); validateSingleRow(statSelect, expectedResult); unloadFixture(); } private void loadFixture() throws IOException { JdbcTemplate jt = new JdbcTemplate(dataSource); originalContentStgLab = jt.queryForRowSet("select * from sos_lab_stg where matrikel_nr=11202664 and abschnitt=2 and stichtag=4"); jt.execute("delete from sos_lab_stg where matrikel_nr=11202664 and abschnitt=2 and stichtag=4"); loadCsvFileIntoTable(String.join(File.separator, "test","resources","db","fixtures","ects_and_rsz_aggregation","11202664_sos_lab_stg.txt"), "sos_lab_stg"); updateStgTid(); } private void unloadFixture() { JdbcTemplate jt = new JdbcTemplate(dataSource); SqlRowSetMetaData meta = originalContentStgLab.getMetaData(); String[] columns = meta.getColumnNames(); String columnList = String.join(",", columns); while (originalContentStgLab.next()) { List row = new ArrayList<>(); for (String column : columns) { row.add(originalContentStgLab.getObject(column)); } StringBuffer places = new StringBuffer("("); for (int i = 0; i < columns.length; i++) { if (i < columns.length - 1) { places.append("?,"); } else { places.append("?"); } } places.append(")"); String insert = "insert into sos_lab_stg ( " + columnList + " ) values " + places; jt.update(insert, row.toArray()); } undoUpdateStgTid(); } private void updateStgTid() { JdbcTemplate jt = new JdbcTemplate(dataSource); bioTid = jt.queryForObject("select tid from dim_studiengang where stg='026' and pversion=6 and abschluss='35' and kz_fach='H'" , Integer.class); matheTid = jt.queryForObject("select tid from dim_studiengang where stg='105' and pversion=6 and abschluss='35' and kz_fach='H'" , Integer.class); tid1 = jt.queryForObject("select tid_stg from sos_lab_stg where matrikel_nr=11202664 and stichtag=4 and abschnitt=2 and ch30_fach='026' and kz_fach='H'", Integer.class); tid1 = jt.queryForObject("select tid_stg from sos_lab_stg where matrikel_nr=11202664 and stichtag=4 and abschnitt=2 and ch30_fach='105' and kz_fach='H'", Integer.class); jt.update("update sos_lab_stg set tid_stg=? where matrikel_nr=11202664 and stichtag=4 and abschnitt=2 and ch30_fach=? and kz_fach=?", bioTid, "026", "H"); jt.update("update sos_lab_stg set tid_stg=? where matrikel_nr=11202664 and stichtag=4 and abschnitt=2 and ch30_fach=? and kz_fach=?", matheTid, "105", "H"); rsz = jt.queryForObject("select regel from dim_studiengang where tid=?", Integer.class, matheTid); jt.update("update dim_studiengang set regel=7 where tid=?", matheTid); } private void undoUpdateStgTid() { JdbcTemplate jt = new JdbcTemplate(dataSource); jt.update("update sos_lab_stg set tid_stg=? where matrikel_nr=11202664 and stichtag=4 and abschnitt=2 and ch30_fach='026' and kz_fach='H'", tid1); jt.update("update sos_lab_stg set tid_stg=? where matrikel_nr=11202664 and stichtag=4 and abschnitt=2 and ch30_fach='105' and kz_fach='H'", tid2); jt.update("update dim_studiengang set regel=? where tid=?", rsz, matheTid); } private static Map createParameterMap() { Map parameterMap = new HashMap(); parameterMap.put("lieferung", "2"); parameterMap.put("berichtssemester", "20211"); parameterMap.put("stichtagsart_pruef_vorsem", "4"); parameterMap.put("stichtagsart_pruef_berichtssem", "4"); parameterMap.put("stichtagsart_stud_vorsem", "1"); parameterMap.put("stichtagsart_stud_berichtssem", "1"); parameterMap.put("matrikelnr", "11202664"); return parameterMap; } }