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.
184 lines
7.9 KiB
184 lines
7.9 KiB
package de.superx.kettle; |
|
|
|
import java.io.File; |
|
import java.io.IOException; |
|
import java.time.Year; |
|
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 PromOfficialStatisticsAbschlPruefTest 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", |
|
"promovierenden_statistik_202606", "unloads"); |
|
|
|
private static final String STUDY_STATUS_FIELD_NAME = "study_status_hiskey"; |
|
|
|
private static final String STUDY_STATUS_NATIVE = "'3'"; |
|
|
|
private static final String STUDY_STATUS_VACATION = "'4'"; |
|
|
|
private static final String STUDY_STATUS_NULL = "null"; |
|
|
|
private static Map<String, String> parameters = createParameterMap(); |
|
|
|
private static Map<String, String> parametersForNoGrade = createParameterMapForNoGrade(); |
|
|
|
|
|
@Test |
|
public void testPromStatistics() |
|
throws CompilationFailedException, IOException { |
|
|
|
loadFixture(); |
|
// test ef023, ticket 182117 |
|
KettleTestRunner.runKettleJob(KETTLE_JOB, parameters, LogLevel.BASIC); |
|
// startDebugWebserver(); |
|
SqlRowSet resultSet = getPromAstat(); |
|
validateEf007PersonFran(resultSet); |
|
validateEf023ExamPassed(resultSet); |
|
// test ef015, ticket 207087 |
|
updateFransRecordSet(STUDY_STATUS_FIELD_NAME, STUDY_STATUS_VACATION); |
|
KettleTestRunner.runKettleJob(KETTLE_JOB, parameters, LogLevel.BASIC); |
|
resultSet = getPromAstat(); |
|
validateEf007PersonFran(resultSet); |
|
validateEf015Registered(resultSet); |
|
|
|
// test ef015, ticket 207515 |
|
updateFransRecordSet(STUDY_STATUS_FIELD_NAME, STUDY_STATUS_NULL); |
|
KettleTestRunner.runKettleJob(KETTLE_JOB, parameters, LogLevel.BASIC); |
|
resultSet = getPromAstat(); |
|
validateEf007PersonFran(resultSet); |
|
validateEf015NotRegistered(resultSet); |
|
|
|
// test ef034 - ef038 #210725 |
|
// https://hiszilla.his.de/hiszilla/show_bug.cgi?id=210725 |
|
updateFransRecordSet("doc_ef34", "'12345678910111214151617181920'"); |
|
updateFransRecordSet("doc_ef35", "'6543210123456'"); |
|
updateFransRecordSet("doc_ef36", "'ABCDEF_123456_XYZ'"); |
|
updateFransRecordSet("doc_ef37", "'FEDCBA'"); |
|
updateFransRecordSet("doc_ef38", "'A1B2C3'"); |
|
KettleTestRunner.runKettleJob(KETTLE_JOB, parameters, LogLevel.BASIC); |
|
resultSet = getPromAstat(); |
|
validateEf034ToEf038(resultSet); |
|
|
|
// test ef030 #202234 |
|
// test ef030, Z.244194 |
|
updateFransRecordSet(STUDY_STATUS_FIELD_NAME, STUDY_STATUS_NATIVE); |
|
KettleTestRunner.runKettleJob(KETTLE_JOB, parameters, LogLevel.BASIC); |
|
resultSet = getPromAstat(); |
|
validateEf030Grade(resultSet); |
|
|
|
//funktioniert nicht: |
|
// updateFransAbschlPruefRecordSet("ext_grade","null"); |
|
// KettleTestRunner.runKettleJob(KETTLE_JOB, parameters, LogLevel.DETAILED); |
|
// resultSet = getPromAstat(); |
|
// test ef030, Z.244194 |
|
// validateEf030NoGrade(resultSet); |
|
|
|
KettleTestRunner.runKettleJob(KETTLE_JOB, parametersForNoGrade, LogLevel.DETAILED); |
|
SqlRowSet resultSetNoGrade = getPromAstat(); |
|
// test ef030, Z.244194 |
|
validateEf030NoGrade(resultSetNoGrade); |
|
|
|
} |
|
|
|
private static Map<String, String> createParameterMap() { |
|
Map<String, String> parameterMap = new HashMap<>(); |
|
parameterMap.put("name", "'Fran'"); |
|
parameterMap.put("berichtsjahr", "2026"); |
|
return parameterMap; |
|
} |
|
|
|
|
|
private static Map<String, String> createParameterMapForNoGrade() { |
|
Map<String, String> parameterMap = new HashMap<>(); |
|
parameterMap.put("name", "'Yasm'"); |
|
parameterMap.put("berichtsjahr", "2026"); |
|
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", "1", ef023_pruefungBestanden); |
|
} |
|
|
|
private static void validateEf007PersonFran(SqlRowSet resultSet) { |
|
String ef007_name = resultSet.getString("ef007"); |
|
Assert.assertEquals("'ef007' (name) differs from expected value", "Fran", 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) { |
|
int index = resultSet.findColumn("ef030"); |
|
String ef030_gesamtnote = resultSet.getString(index); |
|
Assert.assertNull(ef030_gesamtnote); |
|
} |
|
|
|
private static void validateEf030Grade(SqlRowSet resultSet) { |
|
int index = resultSet.findColumn("ef030"); |
|
String ef030_gesamtnote = resultSet.getString(index); |
|
//Char an der 1.Stelle: |
|
Assert.assertEquals("'ef030' (gesamtnote) expected value", "1", 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 updateFransRecordSet(String field, String value) { |
|
JdbcTemplate jt = new JdbcTemplate(dataSource); |
|
jt.execute("UPDATE prom_promovierende SET " + field + "=" + value + ";"); |
|
} |
|
|
|
private void updateFransAbschlPruefRecordSet(String field, String value) { |
|
JdbcTemplate jt = new JdbcTemplate(dataSource); |
|
jt.execute("UPDATE prom_abschlusspruefungen SET " + field + "=" + value + " WHERE his_person_id IN (3936);"); |
|
} |
|
|
|
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", '*'); |
|
} |
|
|
|
} |