SuperX-Kernmodul
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.
 
 
 
 
 
 

156 lines
7.0 KiB

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<String, String> 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<String, String> createParameterMap() {
Map<String, String> 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", '*');
}
}