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
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", '*'); |
|
} |
|
|
|
} |