package de.superx.kettle; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.codehaus.groovy.control.CompilationFailedException; import org.junit.Assert; 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; public class DoctoralCandidateOfficialStatisticsTest extends BaseDbTest { private static final String KETTLE_JOB = String.join(File.separator, "superx","WEB-INF","conf","edustore","db","module", "prom", "etl", "stat_prom2017", "astat_prom.kjb"); private static final String UNLOADS_PATH = String.join(File.separator, "test", "resources", "schema_files", "doctoral_candidate_statistics", "unloads"); private static final String STUDY_STATUS_FIELD_NAME = "study_status_hiskey"; private static final String STUDY_STATUS_VACATION = "'4'"; private static final String STUDY_STATUS_NULL = "null"; private static Map parameters = createParameterMap(); @Test public void testPromStatistics() throws CompilationFailedException, IOException { loadFixture(); // test ef023, ticket 182117 // Job job = runKettleJob(metastore); KettleTestRunner.runKettleJob(KETTLE_JOB, parameters, LogLevel.BASIC); // startDebugWebserver(); SqlRowSet resultSet = getPromAstat(); validateEf007PersonAnne(resultSet); validateEf023ExamPassed(resultSet); // test ef015, ticket 207087 updateAnnesRecordSet(STUDY_STATUS_FIELD_NAME, STUDY_STATUS_VACATION); KettleTestRunner.runKettleJob(KETTLE_JOB, parameters, LogLevel.BASIC); resultSet = getPromAstat(); validateEf007PersonAnne(resultSet); validateEf015Registered(resultSet); validateEf030NoGrade(resultSet); // test ef015, ticket 207515 updateAnnesRecordSet(STUDY_STATUS_FIELD_NAME, STUDY_STATUS_NULL); KettleTestRunner.runKettleJob(KETTLE_JOB, parameters, LogLevel.BASIC); resultSet = getPromAstat(); validateEf007PersonAnne(resultSet); validateEf015NotRegistered(resultSet); // test ef034 - ef038 #210725 // https://hiszilla.his.de/hiszilla/show_bug.cgi?id=210725 updateAnnesRecordSet("doc_ef34", "'12345678910111214151617181920'"); updateAnnesRecordSet("doc_ef35", "'6543210123456'"); updateAnnesRecordSet("doc_ef36", "'ABCDEF_123456_XYZ'"); updateAnnesRecordSet("doc_ef37", "'FEDCBA'"); updateAnnesRecordSet("doc_ef38", "'A1B2C3'"); KettleTestRunner.runKettleJob(KETTLE_JOB, parameters, LogLevel.BASIC); resultSet = getPromAstat(); validateEf034ToEf038(resultSet); // test ef030 #202234 // https://hiszilla.his.de/hiszilla/show_bug.cgi?id=202234 // TODO Es gibt keine Abschlussprüfung zu Anne (his_person_id=2225) // in prom_abschlusspruefungen, das ist aber Voraussetzung, // damit der folgende Test funktioniert. // Prüfen, ob mit wenig Aufwand hier eine Fixture eingefügt werden kann. // JdbcTemplate jt = new JdbcTemplate(dataSource); // jt.execute("UPDATE prom_abschlusspruefungen SET ext_abp_k_work_of_status = 1;"); // jt.execute("UPDATE prom_abschlusspruefungen SET ext_grade = null;"); // KettleTestRunner.runKettleJob(KETTLE_JOB, parameters, LogLevel.BASIC); // resultSet = getPromAstat(); // validateEf030NoGrade(resultSet); } private static Map createParameterMap() { Map parameterMap = new HashMap<>(); parameterMap.put("name", "'Anne'"); parameterMap.put("berichtsjahr", "2018"); return parameterMap; } private static void validateEf015Registered(SqlRowSet resultSet) { String ef015_immatrikuliert = resultSet.getString("ef015"); Assert.assertEquals("'ef015' (immatrikuliert) differs from expected value", "1", ef015_immatrikuliert); } private static void validateEf015NotRegistered(SqlRowSet resultSet) { String ef015_immatrikuliert = resultSet.getString("ef015"); Assert.assertEquals("'ef015' (immatrikuliert) differs from expected value", "0", ef015_immatrikuliert); } private static void validateEf023ExamPassed(SqlRowSet resultSet) { String ef023_pruefungBestanden = resultSet.getString("ef023"); Assert.assertEquals("'ef023' (pruefungBestanden) differs from expected value", "0", ef023_pruefungBestanden); } private static void validateEf007PersonAnne(SqlRowSet resultSet) { int index = resultSet.findColumn("ef007"); String ef007_name = resultSet.getString(index); // String ef007_name = resultSet.getString("ef007"); Assert.assertEquals("'ef007' (name) differs from expected value", "Anne", ef007_name); } private static void validateEf034ToEf038(SqlRowSet resultSet) { String ef034 = resultSet.getString("ef034"); String ef035 = resultSet.getString("ef035"); String ef036 = resultSet.getString("ef036"); String ef037 = resultSet.getString("ef037"); String ef038 = resultSet.getString("ef038"); Assert.assertEquals("ef034 has been cut as expected", "123", ef034); Assert.assertEquals("ef035 has been cut as expected", "654", ef035); Assert.assertEquals("ef036 has been cut as expected", "ABC", ef036); Assert.assertEquals("ef037 has been cut as expected", "FED", ef037); Assert.assertEquals("ef038 has been cut as expected", "A1B", ef038); } private static void validateEf030NoGrade(SqlRowSet resultSet) { String ef030_gesamtnote = resultSet.getString("ef030"); Assert.assertNull(ef030_gesamtnote); } private SqlRowSet getPromAstat() { JdbcTemplate jt = new JdbcTemplate(dataSource); SqlRowSet result = jt.queryForRowSet("SELECT * FROM prom_astat;"); if(!result.next()) { throw new RuntimeException("EMPTY RESULT!"); } return result; } private void updateAnnesRecordSet(String field, String value) { JdbcTemplate jt = new JdbcTemplate(dataSource); jt.execute("UPDATE prom_promovierende SET " + field + "=" + value + ";"); } private void loadFixture() throws IOException { loadCsvFileIntoTable(String.join(File.separator, UNLOADS_PATH, "prom_abschlusspruefungen"), "prom_abschlusspruefungen", '*'); loadCsvFileIntoTable(String.join(File.separator, UNLOADS_PATH, "prom_astat"), "prom_astat"); loadCsvFileIntoTable(String.join(File.separator, UNLOADS_PATH, "prom_promotion_data"), "prom_promotion_data", '*'); loadCsvFileIntoTable(String.join(File.separator, UNLOADS_PATH, "prom_promovierende"), "prom_promovierende", '*'); loadCsvFileIntoTable(String.join(File.separator, UNLOADS_PATH, "prom_promovierende_temporal_status"), "prom_promovierende_temporal_status", '*'); } }