TSK-967: Refactor Taskana-Data module to use a SampleDataProvider

This commit is contained in:
Benjamin Eckstein 2019-12-09 11:18:01 +01:00 committed by Mustapha Zorgati
parent 91ccf57849
commit f8443897f6
21 changed files with 178 additions and 159 deletions

View File

@ -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,

View File

@ -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(

View File

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

View File

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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"})

View File

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

View File

@ -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"})

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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