package de.superx.dbt.integration; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.nio.file.Path; import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import de.superx.BaseDbTest; import de.superx.dbt.DbtAction; import de.superx.dbt.DbtRunRequest; import de.superx.dbt.DbtRunResult; import de.superx.dbt.DbtUtils; import de.superx.dbt.DbtWrapper; import de.superx.dbt.DbtExecutionState; import de.superx.dbt.UnsupportedPythonVersionException; import de.superx.rest.EtlJobApi; @SuppressWarnings("static-method") //@ContextConfiguration(classes = { TestApplicationConfigPg.class }) public class DbtCliIntegrationPythonPathTest extends BaseDbTest { static Logger logger = LoggerFactory.getLogger(DbtCliIntegrationPythonPathTest.class); private static final Path DBT_PROJ = Path.of("test/resources/dbt/test_project"); @Autowired EtlJobApi api; @Autowired DbtWrapper dbtWrapper; @After public void afterRun() { DbtUtils.isTestRun = false; } @Before public void beforeRun() { DbtUtils.isTestRun = true; } @Test public void checkPythonVersion() { String version = DbtUtils.getPythonVersion(); logger.error("Python 3 version: "+ version); assertTrue("Python 3 installed", version.startsWith("3")); boolean versionSupported = false; try { DbtUtils.checkPythonCompatability(); versionSupported = true; } catch (UnsupportedPythonVersionException e) { e.printStackTrace(); } assertTrue("Installed python version supported", versionSupported); } @Test public void testRunDbt() { DbtRunRequest request = new DbtRunRequest(DbtAction.BUILD, "test_project", "path:models/example"); DbtRunResult result = dbtWrapper.execute(request); assertTrue("DBT project run successfull", result.getState() == DbtExecutionState.SUCCESS); } @Test public void testSqlFluff() { DbtRunRequest request = new DbtRunRequest(DbtAction.SQLFLUFF_LINT, "test_project", "path:models/linter_models"); DbtRunResult result = dbtWrapper.execute(request); assertEquals(DbtExecutionState.FAILURE, result.getState()); assertTrue("There should be linting errors.", !result.getErrorMessages().isEmpty()); assertEquals(3, result.getErrorMessages().size()); } @Test public void testStagingTables() { DbtRunRequest request = new DbtRunRequest(DbtAction.STAGING_TABLES, "test_project", "+my_third_model"); DbtRunResult result = dbtWrapper.execute(request); List tables = result.getOutputMessages(); assertEquals(DbtExecutionState.SUCCESS, result.getState()); assertEquals(tables.size(), 1); assertEquals(tables.get(0), "cif"); } }