TSK-967: Refactor Taskana-Data module to use a SampleDataProvider
This commit is contained in:
parent
91ccf57849
commit
f8443897f6
|
@ -24,8 +24,8 @@ import pro.taskana.TimeInterval;
|
|||
import pro.taskana.configuration.TaskanaEngineConfiguration;
|
||||
import pro.taskana.database.TestDataGenerator;
|
||||
import pro.taskana.exceptions.ClassificationNotFoundException;
|
||||
import pro.taskana.sampledata.DBCleaner;
|
||||
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
|
||||
import pro.taskana.sampledata.DBCleaner;
|
||||
|
||||
/**
|
||||
* Base class for all acceptance tests.
|
||||
|
@ -34,7 +34,6 @@ public abstract class AbstractAccTest {
|
|||
|
||||
protected static TaskanaEngineConfiguration taskanaEngineConfiguration;
|
||||
protected static TaskanaEngine taskanaEngine;
|
||||
private static DBCleaner cleaner = new DBCleaner();
|
||||
protected static TestDataGenerator testDataGenerator = new TestDataGenerator();
|
||||
|
||||
@BeforeAll
|
||||
|
@ -45,16 +44,18 @@ public abstract class AbstractAccTest {
|
|||
|
||||
public static void resetDb(boolean dropTables) throws SQLException, IOException {
|
||||
DataSource dataSource = TaskanaEngineConfigurationTest.getDataSource();
|
||||
String schemaName = TaskanaEngineConfigurationTest.getSchemaName();
|
||||
DBCleaner dbCleaner = new DBCleaner();
|
||||
if (dropTables) {
|
||||
cleaner.clearDb(dataSource, dropTables);
|
||||
dbCleaner.dropDb(dataSource, schemaName);
|
||||
}
|
||||
dataSource = TaskanaEngineConfigurationTest.getDataSource();
|
||||
taskanaEngineConfiguration = new TaskanaEngineConfiguration(dataSource, false,
|
||||
TaskanaEngineConfigurationTest.getSchemaName());
|
||||
schemaName);
|
||||
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
taskanaEngine.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
|
||||
cleaner.clearDb(dataSource, false);
|
||||
testDataGenerator.generateTestData(dataSource);
|
||||
dbCleaner.clearDb(dataSource, schemaName);
|
||||
testDataGenerator.generateTestData(dataSource, schemaName);
|
||||
}
|
||||
|
||||
protected ObjectReference createObjectReference(String company, String system, String systemInstance, String type,
|
||||
|
|
|
@ -147,7 +147,9 @@ public class UpdateClassificationAccTest extends AbstractAccTest {
|
|||
equalTo("PROCESS"));
|
||||
|
||||
assertThat(classification.getCreated(), equalTo(createdBefore));
|
||||
assertTrue(modifiedBefore.isBefore(classification.getModified()));
|
||||
//isBeforeOrEquals in case of too fast execution
|
||||
assertTrue(modifiedBefore.isBefore(classification.getModified()) || modifiedBefore.equals(
|
||||
classification.getModified()));
|
||||
}
|
||||
|
||||
@WithAccessId(
|
||||
|
|
|
@ -11,8 +11,8 @@ import org.junit.jupiter.api.BeforeAll;
|
|||
import pro.taskana.TaskanaEngine;
|
||||
import pro.taskana.configuration.TaskanaEngineConfiguration;
|
||||
import pro.taskana.database.TestDataGenerator;
|
||||
import pro.taskana.sampledata.DBCleaner;
|
||||
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
|
||||
import pro.taskana.sampledata.DBCleaner;
|
||||
|
||||
/**
|
||||
* Abstract test class for all report building tests.
|
||||
|
@ -34,13 +34,14 @@ public class AbstractReportAccTest {
|
|||
|
||||
private static void resetDb() throws SQLException, IOException {
|
||||
DataSource dataSource = TaskanaEngineConfigurationTest.getDataSource();
|
||||
String schemaName = TaskanaEngineConfigurationTest.getSchemaName();
|
||||
DBCleaner cleaner = new DBCleaner();
|
||||
taskanaEngineConfiguration = new TaskanaEngineConfiguration(dataSource, false,
|
||||
TaskanaEngineConfigurationTest.getSchemaName());
|
||||
schemaName);
|
||||
taskanaEngineConfiguration.setGermanPublicHolidaysEnabled(false);
|
||||
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
taskanaEngine.setConnectionManagementMode(TaskanaEngine.ConnectionManagementMode.AUTOCOMMIT);
|
||||
cleaner.clearDb(dataSource, false);
|
||||
cleaner.clearDb(dataSource, schemaName);
|
||||
TestDataGenerator testDataGenerator = new TestDataGenerator();
|
||||
testDataGenerator.generateMonitoringTestData(dataSource);
|
||||
}
|
||||
|
|
|
@ -23,7 +23,6 @@ import org.apache.ibatis.jdbc.ScriptRunner;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import pro.taskana.configuration.DbSchemaCreator;
|
||||
import pro.taskana.impl.TaskanaEngineImpl;
|
||||
|
||||
/**
|
||||
|
@ -31,7 +30,7 @@ import pro.taskana.impl.TaskanaEngineImpl;
|
|||
*/
|
||||
public class TestDataGenerator {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(DbSchemaCreator.class);
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(TestDataGenerator.class);
|
||||
private static final String SQL = "/sql";
|
||||
private static final String TASK = SQL + "/task.sql";
|
||||
private static final String WORKBASKET = SQL + "/workbasket.sql";
|
||||
|
@ -54,11 +53,12 @@ public class TestDataGenerator {
|
|||
this.errorLogWriter = new PrintWriter(this.errorWriter);
|
||||
}
|
||||
|
||||
public void generateTestData(DataSource dataSource) throws SQLException, IOException {
|
||||
public void generateTestData(DataSource dataSource, String schema) throws SQLException, IOException {
|
||||
ScriptRunner runner = null;
|
||||
try {
|
||||
Connection connection = dataSource.getConnection();
|
||||
LOGGER.debug(connection.getMetaData().toString());
|
||||
connection.setSchema(schema);
|
||||
runner = new ScriptRunner(connection);
|
||||
runner.setStopOnError(true);
|
||||
runner.setLogWriter(this.logWriter);
|
||||
|
|
|
@ -31,8 +31,8 @@ import pro.taskana.exceptions.DomainNotFoundException;
|
|||
import pro.taskana.exceptions.InvalidArgumentException;
|
||||
import pro.taskana.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.impl.TaskanaEngineImpl;
|
||||
import pro.taskana.sampledata.DBCleaner;
|
||||
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
|
||||
import pro.taskana.sampledata.DBCleaner;
|
||||
|
||||
/**
|
||||
* Integration Test for ClassificationServiceImpl with connection management mode AUTOCOMMIT.
|
||||
|
@ -49,23 +49,25 @@ public class ClassificationServiceImplIntAutoCommitTest {
|
|||
private TaskanaEngineImpl taskanaEngineImpl;
|
||||
|
||||
@BeforeClass
|
||||
public static void resetDb() {
|
||||
public static void resetDb() throws SQLException {
|
||||
DataSource ds = TaskanaEngineConfigurationTest.getDataSource();
|
||||
DBCleaner cleaner = new DBCleaner();
|
||||
cleaner.clearDb(ds, true);
|
||||
String schemaName = TaskanaEngineConfigurationTest.getSchemaName();
|
||||
cleaner.dropDb(ds, schemaName);
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setup() throws SQLException {
|
||||
dataSource = TaskanaEngineConfigurationTest.getDataSource();
|
||||
String schemaName = TaskanaEngineConfigurationTest.getSchemaName();
|
||||
taskanaEngineConfiguration = new TaskanaEngineConfiguration(dataSource, false, false,
|
||||
TaskanaEngineConfigurationTest.getSchemaName());
|
||||
schemaName);
|
||||
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
classificationService = taskanaEngine.getClassificationService();
|
||||
taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
||||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
|
||||
DBCleaner cleaner = new DBCleaner();
|
||||
cleaner.clearDb(dataSource, false);
|
||||
cleaner.clearDb(dataSource, schemaName);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -38,8 +38,8 @@ import pro.taskana.exceptions.InvalidArgumentException;
|
|||
import pro.taskana.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.impl.ClassificationImpl;
|
||||
import pro.taskana.impl.TaskanaEngineImpl;
|
||||
import pro.taskana.sampledata.DBCleaner;
|
||||
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
|
||||
import pro.taskana.sampledata.DBCleaner;
|
||||
|
||||
/**
|
||||
* Integration Test for ClassificationServiceImpl with connection management mode EXPLICIT.
|
||||
|
@ -58,23 +58,25 @@ public class ClassificationServiceImplIntExplicitTest {
|
|||
private TaskanaEngineImpl taskanaEngineImpl;
|
||||
|
||||
@BeforeClass
|
||||
public static void resetDb() {
|
||||
public static void resetDb() throws SQLException {
|
||||
DataSource ds = TaskanaEngineConfigurationTest.getDataSource();
|
||||
DBCleaner cleaner = new DBCleaner();
|
||||
cleaner.clearDb(ds, true);
|
||||
String schemaName = TaskanaEngineConfigurationTest.getSchemaName();
|
||||
cleaner.dropDb(ds, schemaName);
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setup() throws SQLException {
|
||||
dataSource = TaskanaEngineConfigurationTest.getDataSource();
|
||||
String schemaName = TaskanaEngineConfigurationTest.getSchemaName();
|
||||
taskanaEngineConfiguration = new TaskanaEngineConfiguration(dataSource, false, false,
|
||||
TaskanaEngineConfigurationTest.getSchemaName());
|
||||
schemaName);
|
||||
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
classificationService = taskanaEngine.getClassificationService();
|
||||
taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
||||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.EXPLICIT);
|
||||
DBCleaner cleaner = new DBCleaner();
|
||||
cleaner.clearDb(dataSource, false);
|
||||
cleaner.clearDb(dataSource, schemaName);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -48,9 +48,9 @@ import pro.taskana.impl.TaskImpl;
|
|||
import pro.taskana.impl.TaskServiceImpl;
|
||||
import pro.taskana.impl.TaskanaEngineImpl;
|
||||
import pro.taskana.impl.WorkbasketImpl;
|
||||
import pro.taskana.sampledata.DBCleaner;
|
||||
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
|
||||
import pro.taskana.impl.util.IdGenerator;
|
||||
import pro.taskana.sampledata.DBCleaner;
|
||||
import pro.taskana.security.CurrentUserContext;
|
||||
import pro.taskana.security.JAASExtension;
|
||||
import pro.taskana.security.WithAccessId;
|
||||
|
@ -80,8 +80,9 @@ class TaskServiceImplIntAutocommitTest {
|
|||
@BeforeEach
|
||||
void setup() throws SQLException {
|
||||
dataSource = TaskanaEngineConfigurationTest.getDataSource();
|
||||
String schemaName = TaskanaEngineConfigurationTest.getSchemaName();
|
||||
taskanaEngineConfiguration = new TaskanaEngineConfiguration(dataSource, false, false,
|
||||
TaskanaEngineConfigurationTest.getSchemaName());
|
||||
schemaName);
|
||||
|
||||
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
||||
|
@ -90,7 +91,7 @@ class TaskServiceImplIntAutocommitTest {
|
|||
classificationService = taskanaEngine.getClassificationService();
|
||||
workbasketService = taskanaEngine.getWorkbasketService();
|
||||
DBCleaner cleaner = new DBCleaner();
|
||||
cleaner.clearDb(dataSource, false);
|
||||
cleaner.clearDb(dataSource, schemaName);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -54,9 +54,9 @@ import pro.taskana.impl.TaskServiceImpl;
|
|||
import pro.taskana.impl.TaskanaEngineImpl;
|
||||
import pro.taskana.impl.WorkbasketImpl;
|
||||
import pro.taskana.impl.WorkbasketSummaryImpl;
|
||||
import pro.taskana.sampledata.DBCleaner;
|
||||
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
|
||||
import pro.taskana.impl.util.IdGenerator;
|
||||
import pro.taskana.sampledata.DBCleaner;
|
||||
import pro.taskana.security.CurrentUserContext;
|
||||
import pro.taskana.security.JAASExtension;
|
||||
import pro.taskana.security.WithAccessId;
|
||||
|
@ -107,8 +107,9 @@ class TaskServiceImplIntExplicitTest {
|
|||
}
|
||||
|
||||
@BeforeEach
|
||||
void resetDb() {
|
||||
cleaner.clearDb(dataSource, false);
|
||||
void resetDb() throws SQLException {
|
||||
String schemaName = TaskanaEngineConfigurationTest.getSchemaName();
|
||||
cleaner.clearDb(dataSource, schemaName);
|
||||
}
|
||||
|
||||
@WithAccessId(userName = "Elena", groupNames = {"businessadmin"})
|
||||
|
|
|
@ -37,10 +37,10 @@ import pro.taskana.exceptions.WorkbasketAlreadyExistException;
|
|||
import pro.taskana.exceptions.WorkbasketNotFoundException;
|
||||
import pro.taskana.impl.TaskanaEngineProxyForTest;
|
||||
import pro.taskana.impl.WorkbasketImpl;
|
||||
import pro.taskana.sampledata.DBCleaner;
|
||||
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
|
||||
import pro.taskana.impl.util.IdGenerator;
|
||||
import pro.taskana.mappings.WorkbasketMapper;
|
||||
import pro.taskana.sampledata.DBCleaner;
|
||||
import pro.taskana.security.JAASRunner;
|
||||
import pro.taskana.security.WithAccessId;
|
||||
|
||||
|
@ -60,22 +60,24 @@ public class WorkbasketServiceImplIntAutocommitTest {
|
|||
private Instant now;
|
||||
|
||||
@BeforeClass
|
||||
public static void resetDb() {
|
||||
public static void resetDb() throws SQLException {
|
||||
DataSource ds = TaskanaEngineConfigurationTest.getDataSource();
|
||||
DBCleaner cleaner = new DBCleaner();
|
||||
cleaner.clearDb(ds, true);
|
||||
String schemaName = TaskanaEngineConfigurationTest.getSchemaName();
|
||||
cleaner.dropDb(ds, schemaName);
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setup() throws SQLException {
|
||||
dataSource = TaskanaEngineConfigurationTest.getDataSource();
|
||||
String schemaName = TaskanaEngineConfigurationTest.getSchemaName();
|
||||
taskanaEngineConfiguration = new TaskanaEngineConfiguration(dataSource, false,
|
||||
TaskanaEngineConfigurationTest.getSchemaName());
|
||||
schemaName);
|
||||
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
taskanaEngine.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
|
||||
workBasketService = taskanaEngine.getWorkbasketService();
|
||||
DBCleaner cleaner = new DBCleaner();
|
||||
cleaner.clearDb(dataSource, false);
|
||||
cleaner.clearDb(dataSource, schemaName);
|
||||
now = Instant.now();
|
||||
}
|
||||
|
||||
|
|
|
@ -31,9 +31,9 @@ import pro.taskana.exceptions.WorkbasketAlreadyExistException;
|
|||
import pro.taskana.exceptions.WorkbasketNotFoundException;
|
||||
import pro.taskana.impl.TaskanaEngineImpl;
|
||||
import pro.taskana.impl.WorkbasketImpl;
|
||||
import pro.taskana.sampledata.DBCleaner;
|
||||
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
|
||||
import pro.taskana.impl.util.IdGenerator;
|
||||
import pro.taskana.sampledata.DBCleaner;
|
||||
import pro.taskana.security.JAASRunner;
|
||||
import pro.taskana.security.WithAccessId;
|
||||
|
||||
|
@ -54,22 +54,24 @@ public class WorkbasketServiceImplIntExplicitTest {
|
|||
private WorkbasketService workBasketService;
|
||||
|
||||
@BeforeClass
|
||||
public static void resetDb() {
|
||||
public static void resetDb() throws SQLException {
|
||||
DataSource ds = TaskanaEngineConfigurationTest.getDataSource();
|
||||
DBCleaner cleaner = new DBCleaner();
|
||||
cleaner.clearDb(ds, true);
|
||||
String schemaName = TaskanaEngineConfigurationTest.getSchemaName();
|
||||
cleaner.dropDb(ds, schemaName);
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setup() throws SQLException {
|
||||
dataSource = TaskanaEngineConfigurationTest.getDataSource();
|
||||
String schemaName = TaskanaEngineConfigurationTest.getSchemaName();
|
||||
taskanaEngineConfiguration = new TaskanaEngineConfiguration(dataSource, false,
|
||||
TaskanaEngineConfigurationTest.getSchemaName());
|
||||
schemaName);
|
||||
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
||||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.EXPLICIT);
|
||||
DBCleaner cleaner = new DBCleaner();
|
||||
cleaner.clearDb(dataSource, false);
|
||||
cleaner.clearDb(dataSource, schemaName);
|
||||
}
|
||||
|
||||
@WithAccessId(userName = "Elena", groupNames = {"businessadmin"})
|
||||
|
|
|
@ -16,7 +16,7 @@ class SampleDataGeneratorTest {
|
|||
PooledDataSource pooledDataSource = new PooledDataSource("org.h2.Driver",
|
||||
"jdbc:h2:mem:taskana;IGNORECASE=TRUE;LOCK_MODE=0;INIT=CREATE SCHEMA IF NOT EXISTS TASKANA", "sa", "sa");
|
||||
Assertions.assertDoesNotThrow(() -> new DbSchemaCreator(pooledDataSource, "TASKANA").run());
|
||||
Assertions.assertDoesNotThrow(() -> new SampleDataGenerator(pooledDataSource).generateSampleData("TASKANA"));
|
||||
Assertions.assertDoesNotThrow(() -> new SampleDataGenerator(pooledDataSource, "TASKANA").generateSampleData());
|
||||
pooledDataSource.forceCloseAll();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,59 +1,22 @@
|
|||
package pro.taskana.sampledata;
|
||||
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.apache.ibatis.jdbc.ScriptRunner;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* This class cleans the complete database. Only to be used in Unittest
|
||||
* This class cleans the complete database.
|
||||
*/
|
||||
public class DBCleaner {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(DBCleaner.class);
|
||||
private static final String DB_CLEAR_SCRIPT = "/sql/clear/clear-db.sql";
|
||||
private static final String DB_DROP_TABLES_SCRIPT = "/sql/clear/drop-tables.sql";
|
||||
public void clearDb(DataSource dataSource, String schema) throws SQLException {
|
||||
SampleDataGenerator sampleDataGenerator = new SampleDataGenerator(dataSource, schema);
|
||||
sampleDataGenerator.runScripts(sampleDataGenerator::clearDb);
|
||||
}
|
||||
|
||||
private StringWriter outWriter = new StringWriter();
|
||||
private PrintWriter logWriter = new PrintWriter(outWriter);
|
||||
private StringWriter errorWriter = new StringWriter();
|
||||
private PrintWriter errorLogWriter = new PrintWriter(errorWriter);
|
||||
public void dropDb(DataSource dataSource, String schema) throws SQLException {
|
||||
SampleDataGenerator sampleDataGenerator = new SampleDataGenerator(dataSource, schema);
|
||||
sampleDataGenerator.runScripts(sampleDataGenerator::dropDb);
|
||||
|
||||
/**
|
||||
* Clears the db.
|
||||
*
|
||||
* @param dataSource the datasource
|
||||
* @param dropTables
|
||||
* if true drop tables, else clean tables
|
||||
*/
|
||||
public void clearDb(DataSource dataSource, boolean dropTables) {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
ScriptRunner runner = new ScriptRunner(connection);
|
||||
LOGGER.debug(connection.getMetaData().toString());
|
||||
|
||||
runner.setStopOnError(false);
|
||||
runner.setLogWriter(logWriter);
|
||||
runner.setErrorLogWriter(errorLogWriter);
|
||||
if (dropTables) {
|
||||
runner.runScript(new InputStreamReader(this.getClass().getResourceAsStream(DB_DROP_TABLES_SCRIPT)));
|
||||
} else {
|
||||
runner.runScript(new InputStreamReader(this.getClass().getResourceAsStream(DB_CLEAR_SCRIPT)));
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
LOGGER.error("caught Exception " + e);
|
||||
}
|
||||
LOGGER.debug(outWriter.toString());
|
||||
String errorMsg = errorWriter.toString().trim();
|
||||
|
||||
if (!errorMsg.isEmpty() && !errorMsg.contains("SQLCODE=-204, SQLSTATE=42704")) {
|
||||
LOGGER.error(errorWriter.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import java.sql.SQLException;
|
|||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
@ -29,18 +30,8 @@ public class SampleDataGenerator {
|
|||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(SampleDataGenerator.class);
|
||||
|
||||
private static final String CLEAR = "/sql/clear/clear-db.sql";
|
||||
private static final String CLEAR_HISTORY_EVENTS = "/sql/clear/clear-history-events.sql";
|
||||
|
||||
private static final String TASK = "/sql/sample-data/task.sql";
|
||||
private static final String WORKBASKET = "/sql/sample-data/workbasket.sql";
|
||||
private static final String DISTRIBUTION_TARGETS = "/sql/sample-data/distribution-targets.sql";
|
||||
private static final String WORKBASKET_ACCESS_LIST = "/sql/sample-data/workbasket-access-list.sql";
|
||||
private static final String CLASSIFICATION = "/sql/sample-data/classification.sql";
|
||||
private static final String OBJECT_REFERENCE = "/sql/sample-data/object-reference.sql";
|
||||
private static final String ATTACHMENT = "/sql/sample-data/attachment.sql";
|
||||
private static final String HISTORY_EVENT = "/sql/sample-data/history-event.sql";
|
||||
private static final String CHECK_HISTORY_EVENT_EXIST = "/sql/sample-data/check-history-event-exist.sql";
|
||||
private static final String DB_CLEAR_TABLES_SCRIPT = "/sql/clear/clear-db.sql";
|
||||
private static final String DB_DROP_TABLES_SCRIPT = "/sql/clear/drop-tables.sql";
|
||||
|
||||
static final String RELATIVE_DATE_REGEX = "RELATIVE_DATE\\((-?\\d+)\\)";
|
||||
static final Pattern RELATIVE_DATE_PATTERN = Pattern.compile(RELATIVE_DATE_REGEX);
|
||||
|
@ -49,16 +40,23 @@ public class SampleDataGenerator {
|
|||
private final DataSource dataSource;
|
||||
private final LocalDateTime now;
|
||||
|
||||
public SampleDataGenerator(DataSource dataSource) {
|
||||
this(dataSource, LocalDateTime.now());
|
||||
/**
|
||||
* This value cannot be automatically obtained by connection.getSchema(),
|
||||
* because setting not yet existing schema will result into an SQL Exception.
|
||||
*/
|
||||
private final String schema;
|
||||
|
||||
public SampleDataGenerator(DataSource dataSource, String schema) {
|
||||
this(dataSource, schema, LocalDateTime.now());
|
||||
}
|
||||
|
||||
public SampleDataGenerator(DataSource dataSource, LocalDateTime now) {
|
||||
public SampleDataGenerator(DataSource dataSource, String schema, LocalDateTime now) {
|
||||
this.dataSource = dataSource;
|
||||
this.schema = schema;
|
||||
this.now = now;
|
||||
}
|
||||
|
||||
public void generateSampleData(String schemaName) throws SQLException {
|
||||
public void runScripts(Consumer<ScriptRunner> consumer) throws SQLException {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
|
||||
if (LOGGER.isTraceEnabled()) {
|
||||
|
@ -68,18 +66,8 @@ public class SampleDataGenerator {
|
|||
StringWriter outWriter = new StringWriter();
|
||||
StringWriter errorWriter = new StringWriter();
|
||||
|
||||
ScriptRunner runner = getScriptRunner(schemaName, connection, outWriter, errorWriter);
|
||||
|
||||
Stream<String> scriptsList = getDefaultScripts();
|
||||
try {
|
||||
runner.runScript(getScriptBufferedStream(CHECK_HISTORY_EVENT_EXIST));
|
||||
runner.runScript(getScriptBufferedStream(CLEAR_HISTORY_EVENTS));
|
||||
scriptsList = Stream.concat(scriptsList, Stream.of(HISTORY_EVENT));
|
||||
} catch (Exception e) {
|
||||
LOGGER.error("The HISTORY_EVENTS table is not created");
|
||||
}
|
||||
|
||||
executeScripts(runner, scriptsList);
|
||||
ScriptRunner runner = getScriptRunner(connection, outWriter, errorWriter);
|
||||
consumer.accept(runner);
|
||||
runner.closeConnection();
|
||||
|
||||
if (LOGGER.isTraceEnabled()) {
|
||||
|
@ -92,6 +80,13 @@ public class SampleDataGenerator {
|
|||
}
|
||||
}
|
||||
|
||||
public void generateSampleData() throws SQLException {
|
||||
runScripts((runner) -> {
|
||||
clearDb(runner);
|
||||
executeScripts(runner, SampleDataProvider.getDataProvider(runner));
|
||||
});
|
||||
}
|
||||
|
||||
private void executeScripts(ScriptRunner runner, Stream<String> scriptsList) {
|
||||
scriptsList
|
||||
.map(s -> SampleDataGenerator.parseAndReplace(now, s))
|
||||
|
@ -100,20 +95,28 @@ public class SampleDataGenerator {
|
|||
.forEachOrdered(runner::runScript);
|
||||
}
|
||||
|
||||
private ScriptRunner getScriptRunner(String schemaName, Connection connection, StringWriter outWriter,
|
||||
public void clearDb(ScriptRunner runner) {
|
||||
runner.setStopOnError(false);
|
||||
runner.runScript(getScriptBufferedStream(DB_CLEAR_TABLES_SCRIPT));
|
||||
runner.setStopOnError(true);
|
||||
}
|
||||
|
||||
public void dropDb(ScriptRunner runner) {
|
||||
runner.setStopOnError(false);
|
||||
runner.runScript(getScriptBufferedStream(DB_DROP_TABLES_SCRIPT));
|
||||
runner.setStopOnError(true);
|
||||
}
|
||||
|
||||
ScriptRunner getScriptRunner(Connection connection, StringWriter outWriter,
|
||||
StringWriter errorWriter) throws SQLException {
|
||||
|
||||
PrintWriter logWriter = new PrintWriter(outWriter);
|
||||
PrintWriter errorLogWriter = new PrintWriter(errorWriter);
|
||||
ScriptRunner runner = new ScriptRunner(connection);
|
||||
|
||||
connection.setSchema(schema);
|
||||
String databaseProductName = connection.getMetaData().getDatabaseProductName();
|
||||
|
||||
runner.runScript(selectSchemaScript(databaseProductName, schemaName));
|
||||
runner.setStopOnError(false);
|
||||
runner.runScript(getScriptBufferedStream(CLEAR));
|
||||
|
||||
runner.setStopOnError(true);
|
||||
runner.setLogWriter(logWriter);
|
||||
runner.setErrorLogWriter(errorLogWriter);
|
||||
return runner;
|
||||
|
@ -149,12 +152,6 @@ public class SampleDataGenerator {
|
|||
return "'" + now.plusDays(days).format(DATE_TIME_FORMATTER) + "'";
|
||||
}
|
||||
|
||||
private StringReader selectSchemaScript(String dbProductName, String schemaName) {
|
||||
return new StringReader(isPostgreSQL(dbProductName)
|
||||
? "SET search_path TO " + schemaName + ";"
|
||||
: "SET SCHEMA " + schemaName + ";");
|
||||
}
|
||||
|
||||
private static String parseAndReplace(LocalDateTime now, String script) {
|
||||
return replaceDatePlaceholder(now,
|
||||
getScriptBufferedStream(script).lines().collect(Collectors.joining(System.lineSeparator())));
|
||||
|
@ -166,11 +163,6 @@ public class SampleDataGenerator {
|
|||
new InputStreamReader(inputStream, StandardCharsets.UTF_8))).orElse(null);
|
||||
}
|
||||
|
||||
static Stream<String> getDefaultScripts() {
|
||||
return Stream.of(WORKBASKET, DISTRIBUTION_TARGETS, CLASSIFICATION, TASK, ATTACHMENT, WORKBASKET_ACCESS_LIST,
|
||||
OBJECT_REFERENCE);
|
||||
}
|
||||
|
||||
private static boolean isPostgreSQL(String databaseProductName) {
|
||||
return "PostgreSQL".equals(databaseProductName);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
package pro.taskana.sampledata;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.apache.ibatis.jdbc.ScriptRunner;
|
||||
|
||||
/**
|
||||
* Provides a sample data set.
|
||||
*/
|
||||
public final class SampleDataProvider {
|
||||
|
||||
private static final String CLEAR_HISTORY_EVENTS = "/sql/clear/clear-history-events.sql";
|
||||
private static final String HISTORY_EVENT = "/sql/sample-data/history-event.sql";
|
||||
private static final String CHECK_HISTORY_EVENT_EXIST = "/sql/sample-data/check-history-event-exist.sql";
|
||||
|
||||
private static final String TASK = "/sql/sample-data/task.sql";
|
||||
private static final String WORKBASKET = "/sql/sample-data/workbasket.sql";
|
||||
private static final String DISTRIBUTION_TARGETS = "/sql/sample-data/distribution-targets.sql";
|
||||
private static final String WORKBASKET_ACCESS_LIST = "/sql/sample-data/workbasket-access-list.sql";
|
||||
private static final String CLASSIFICATION = "/sql/sample-data/classification.sql";
|
||||
private static final String OBJECT_REFERENCE = "/sql/sample-data/object-reference.sql";
|
||||
private static final String ATTACHMENT = "/sql/sample-data/attachment.sql";
|
||||
|
||||
private SampleDataProvider() {
|
||||
}
|
||||
|
||||
static Stream<String> getScripts() {
|
||||
return Stream.of(
|
||||
WORKBASKET, DISTRIBUTION_TARGETS, CLASSIFICATION, TASK, ATTACHMENT, WORKBASKET_ACCESS_LIST,
|
||||
OBJECT_REFERENCE);
|
||||
}
|
||||
|
||||
static Stream<String> getScriptsWithEvents() {
|
||||
return Stream.concat(getScripts(), Stream.of(CLEAR_HISTORY_EVENTS, HISTORY_EVENT));
|
||||
}
|
||||
|
||||
public static Stream<String> getDataProvider(ScriptRunner runner) {
|
||||
|
||||
try {
|
||||
//TODO find a better method of testing if a table exists
|
||||
runner.runScript(SampleDataGenerator.getScriptBufferedStream(CHECK_HISTORY_EVENT_EXIST));
|
||||
return SampleDataProvider.getScriptsWithEvents();
|
||||
} catch (Exception e) {
|
||||
return SampleDataProvider.getScripts();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +1,8 @@
|
|||
package pro.taskana.sampledata;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static pro.taskana.sampledata.SampleDataGenerator.DATE_TIME_FORMATTER;
|
||||
import static pro.taskana.sampledata.SampleDataGenerator.RELATIVE_DATE_PATTERN;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.regex.Matcher;
|
||||
|
@ -16,17 +18,19 @@ class SampleDataGeneratorTest {
|
|||
|
||||
@Test
|
||||
void getScriptsNotNull() {
|
||||
Assertions.assertNotNull(SampleDataGenerator.getDefaultScripts());
|
||||
Assertions.assertNotNull(SampleDataProvider.getScripts());
|
||||
Assertions.assertNotNull(SampleDataProvider.getScriptsWithEvents());
|
||||
}
|
||||
|
||||
@Test
|
||||
void getScriptsNotEmpty() {
|
||||
Assertions.assertTrue(SampleDataGenerator.getDefaultScripts().count() > 0);
|
||||
Assertions.assertTrue(SampleDataProvider.getScripts().count() > 0);
|
||||
Assertions.assertTrue(SampleDataProvider.getScriptsWithEvents().count() > 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getScriptsFileExists() {
|
||||
SampleDataGenerator.getDefaultScripts()
|
||||
SampleDataProvider.getScripts()
|
||||
.map(SampleDataGenerator::getScriptBufferedStream)
|
||||
.forEach(Assertions::assertNotNull);
|
||||
}
|
||||
|
@ -34,7 +38,7 @@ class SampleDataGeneratorTest {
|
|||
@Test
|
||||
void replaceRelativeTimeFunctionSameDate() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
String dateFormatted = now.format(SampleDataGenerator.DATE_TIME_FORMATTER);
|
||||
String dateFormatted = now.format(DATE_TIME_FORMATTER);
|
||||
String sqlStringReplaced = SampleDataGenerator.replaceDatePlaceholder(now,
|
||||
"... RELATIVE_DATE(0) ...");
|
||||
assertThat(sqlStringReplaced, CoreMatchers.containsString(dateFormatted));
|
||||
|
@ -43,22 +47,21 @@ class SampleDataGeneratorTest {
|
|||
@Test
|
||||
void testDateRegex() {
|
||||
|
||||
Assertions.assertTrue(SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("RELATIVE_DATE(123)").matches());
|
||||
Assertions.assertTrue(RELATIVE_DATE_PATTERN.matcher("RELATIVE_DATE(123)").matches());
|
||||
|
||||
Assertions.assertTrue(SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("... RELATIVE_DATE(5) ...").find());
|
||||
Assertions.assertTrue(SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("... RELATIVE_DATE(0) ...").find());
|
||||
Assertions.assertTrue(SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("... RELATIVE_DATE(-123) ...").find());
|
||||
Assertions.assertTrue(RELATIVE_DATE_PATTERN.matcher("... RELATIVE_DATE(5) ...").find());
|
||||
Assertions.assertTrue(RELATIVE_DATE_PATTERN.matcher("... RELATIVE_DATE(0) ...").find());
|
||||
Assertions.assertTrue(RELATIVE_DATE_PATTERN.matcher("... RELATIVE_DATE(-123) ...").find());
|
||||
|
||||
Assertions.assertFalse(SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("... RELATIVE_DATE() ...").find());
|
||||
Assertions.assertFalse(
|
||||
SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("... RELATIVE_DATE(ABCDE) ...").find());
|
||||
Assertions.assertFalse(SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("... RELATIVE_NO(5) ...").find());
|
||||
Assertions.assertFalse(SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("...").find());
|
||||
Assertions.assertFalse(RELATIVE_DATE_PATTERN.matcher("... RELATIVE_DATE() ...").find());
|
||||
Assertions.assertFalse(RELATIVE_DATE_PATTERN.matcher("... RELATIVE_DATE(ABCDE) ...").find());
|
||||
Assertions.assertFalse(RELATIVE_DATE_PATTERN.matcher("... RELATIVE_NO(5) ...").find());
|
||||
Assertions.assertFalse(RELATIVE_DATE_PATTERN.matcher("...").find());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDateRegexExtractGroup() {
|
||||
Matcher matcher = SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("RELATIVE_DATE(123)");
|
||||
Matcher matcher = RELATIVE_DATE_PATTERN.matcher("RELATIVE_DATE(123)");
|
||||
Assertions.assertTrue(matcher.find());
|
||||
Assertions.assertEquals("123", matcher.group(1));
|
||||
}
|
||||
|
@ -66,7 +69,7 @@ class SampleDataGeneratorTest {
|
|||
@Test
|
||||
void replaceRelativeTimeFunctionPosDate() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
String dateFormatted = now.plusDays(5).format(SampleDataGenerator.DATE_TIME_FORMATTER);
|
||||
String dateFormatted = now.plusDays(5).format(DATE_TIME_FORMATTER);
|
||||
String sqlStringReplaced = SampleDataGenerator.replaceDatePlaceholder(now,
|
||||
"... RELATIVE_DATE(5) ...");
|
||||
assertThat(sqlStringReplaced, CoreMatchers.containsString(dateFormatted));
|
||||
|
@ -75,7 +78,7 @@ class SampleDataGeneratorTest {
|
|||
@Test
|
||||
void replaceRelativeTimeFunctionNegDate() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
String dateFormatted = now.plusDays(-10).format(SampleDataGenerator.DATE_TIME_FORMATTER);
|
||||
String dateFormatted = now.plusDays(-10).format(DATE_TIME_FORMATTER);
|
||||
String sqlStringReplaced = SampleDataGenerator.replaceDatePlaceholder(now,
|
||||
"... RELATIVE_DATE(-10) ...");
|
||||
assertThat(sqlStringReplaced, CoreMatchers.containsString(dateFormatted));
|
||||
|
|
|
@ -58,7 +58,7 @@ public class ExampleRestApplication {
|
|||
@Bean
|
||||
@DependsOn("getTaskanaEngine") // generate sample data after schema was inserted
|
||||
public SampleDataGenerator generateSampleData(DataSource dataSource) {
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource);
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource, schemaName);
|
||||
return sampleDataGenerator;
|
||||
}
|
||||
|
||||
|
@ -68,7 +68,7 @@ public class ExampleRestApplication {
|
|||
AccessIdController.setLdapCache(ldapCacheTest);
|
||||
}
|
||||
if (generateSampleData) {
|
||||
sampleDataGenerator.generateSampleData(schemaName);
|
||||
sampleDataGenerator.generateSampleData();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ public class ExampleRestApplication {
|
|||
@Bean
|
||||
@DependsOn("getTaskanaEngine") // generate sample data after schema was inserted
|
||||
public SampleDataGenerator generateSampleData(DataSource dataSource) {
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource);
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource, schemaName);
|
||||
return sampleDataGenerator;
|
||||
}
|
||||
|
||||
|
@ -68,7 +68,7 @@ public class ExampleRestApplication {
|
|||
AccessIdController.setLdapCache(ldapCacheTest);
|
||||
}
|
||||
if (generateSampleData) {
|
||||
sampleDataGenerator.generateSampleData(schemaName);
|
||||
sampleDataGenerator.generateSampleData();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -99,7 +99,7 @@ public class TaskanaWildFlyApplication extends SpringBootServletInitializer {
|
|||
@Bean
|
||||
@DependsOn("getTaskanaEngine") // generate sample data after schema was inserted
|
||||
public SampleDataGenerator generateSampleData(DataSource dataSource) {
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource);
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource, schemaName);
|
||||
return sampleDataGenerator;
|
||||
}
|
||||
|
||||
|
@ -109,7 +109,7 @@ public class TaskanaWildFlyApplication extends SpringBootServletInitializer {
|
|||
AccessIdController.setLdapCache(ldapCacheTest);
|
||||
}
|
||||
if (generateSampleData) {
|
||||
sampleDataGenerator.generateSampleData(schemaName);
|
||||
sampleDataGenerator.generateSampleData();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -64,13 +64,13 @@ public class ExampleDocumentationApp {
|
|||
@Bean
|
||||
@DependsOn("getTaskanaEngine") // generate sample data after schema was inserted
|
||||
public SampleDataGenerator generateSampleData(DataSource dataSource) {
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource);
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource, schemaName);
|
||||
return sampleDataGenerator;
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
private void init() throws SQLException {
|
||||
AccessIdController.setLdapCache(new LdapCacheTestImpl());
|
||||
sampleDataGenerator.generateSampleData(schemaName);
|
||||
sampleDataGenerator.generateSampleData();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,8 +73,8 @@ class TaskControllerIntTest {
|
|||
void resetDb() {
|
||||
SampleDataGenerator sampleDataGenerator;
|
||||
try {
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource);
|
||||
sampleDataGenerator.generateSampleData(schemaName);
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource, schemaName);
|
||||
sampleDataGenerator.generateSampleData();
|
||||
} catch (SQLException e) {
|
||||
throw new SystemException("tried to reset DB and caught Exception " + e, e);
|
||||
}
|
||||
|
|
|
@ -37,8 +37,8 @@ class TestSchemaNameCustomizable {
|
|||
schemaName = schemaName.toLowerCase();
|
||||
}
|
||||
new SpringTaskanaEngineConfiguration(dataSource, true, true, schemaName);
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource);
|
||||
sampleDataGenerator.generateSampleData(schemaName);
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource, schemaName);
|
||||
sampleDataGenerator.generateSampleData();
|
||||
} catch (SQLException e) {
|
||||
throw new SystemException("tried to reset DB and caught Exception " + e, e);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue