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.
 
 
 
 
 
 

106 lines
4.2 KiB

package de.superx.dbt.model;
import static org.junit.Assert.assertTrue;
import java.nio.file.Path;
import java.util.List;
import java.util.StringJoiner;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import de.superx.BaseDbTest;
import de.superx.dbt.DbtAction;
import de.superx.dbt.DbtRunRequest;
import de.superx.dbt.DbtRunResult;
import de.superx.dbt.DbtWrapper;
import de.superx.dbt.DbtExecutionState;
import de.superx.rest.EtlJobApi;
import de.superx.util.PathAndFileUtils;
public class DbtHookTests extends BaseDbTest {
static Logger logger = LoggerFactory.getLogger(DbtHookTests.class);
@Autowired
EtlJobApi api;
@Autowired
DbtWrapper dbtWrapper;
private JdbcTemplate jt;
@Before
public void setUp() {
jt = new JdbcTemplate(dataSource);
}
/*
* Bewerbernummern sollen mit dem pre_hook "remove_applicantnumber" aus der
* dim_person_applicant gelöscht werden, wenn die Person kein Bewerber mehr ist.
* Bewerber sollen aber weiter in dim_person_applicant erhalten bleiben.
* */
@Test
public void testRemoveApplicantNumber() throws InterruptedException {
// Bewerber hinzufügen
String addPerson = "INSERT INTO staging.person "
+ "(id, k_gender_id) "
+ "VALUES(100, 1); ";
String addApplicant = "INSERT INTO staging.applicant "
+ "(applicantnumber, person_id) "
+ "VALUES(3000, 100);";
jt.execute(addPerson + addApplicant);
// Bewerber nach dim_person_applicant inkrementell laden
DbtRunRequest request = new DbtRunRequest(DbtAction.BUILD, "hisinone", "+dim_person_applicant");
DbtRunResult result = dbtWrapper.execute(request);
if (result.getState() != DbtExecutionState.SUCCESS) {
List<String> errors = result.getErrorMessages();
StringJoiner joiner = new StringJoiner("\n");
for (String error : errors) {
joiner.add(error);
}
Assert.fail(joiner.toString());
}
// Überprüfen, ob Bewerber in dim_person_applicant angekommen ist
Integer person_id = jt.queryForObject("SELECT src_person_id "
+ "FROM presentation.dim_person_applicant "
+ "WHERE applicantnumber = '3000' AND src_person_id = 100;", Integer.class);
assertTrue("Applicant added", person_id.intValue() == 100);
// Bewerber aus dem staging löschen
String deletePerson = "delete from staging.person where id = 100; ";
String deleteApplicant = "delete from staging.applicant where applicantnumber = 3000; ";
jt.execute(deletePerson + deleteApplicant);
// Bewerbernummer von nicht mehr vorhandenen Bewerbern ersetzen lassen
result = dbtWrapper.execute(request);
assertTrue("DBT project run successfull", result.getState() == DbtExecutionState.SUCCESS);
// Überprüfen, ob der Bewerber noch vorhanden ist und die Bewerbernummer ersetzt wurde
person_id = jt.queryForObject("SELECT src_person_id FROM presentation.dim_person_applicant "
+ "WHERE applicantnumber = 'n. v.' AND src_person_id = 100;", Integer.class);
assertTrue("Applicantnumber removed", person_id.intValue() == 100);
}
@After
public void cleanUp() {
String deletePerson = "delete from staging.person where id = 100; ";
String deleteApplicant = "delete from staging.applicant where applicantnumber = 3000; ";
String deleteInCorePerson = "delete from core.core_person where src_person_id = 100; ";
String deleteInPersonApplicant = "delete from presentation.dim_person_applicant where src_person_id = 100; ";
String deleteInSnapshotPerson = "delete from snapshots.person_academicdegree_snapshot where id = 100; ";
jt.execute(deletePerson + deleteApplicant + deleteInPersonApplicant + deleteInCorePerson + deleteInSnapshotPerson);
}
}