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
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); |
|
} |
|
|
|
}
|
|
|