Skip to content

Commit

Permalink
Allows more than one InitializationPlugin instance of the same type t…
Browse files Browse the repository at this point in the history
…o be run
  • Loading branch information
zapodot committed Jan 17, 2020
1 parent 9cd2b0d commit 9be6862
Show file tree
Hide file tree
Showing 7 changed files with 62 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,13 @@

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Optional;
import java.util.*;

public abstract class AbstractEmbeddedDatabaseCreatorBuilder<C extends EmbeddedDatabaseCreator> implements EmbeddedDatabaseCreatorBuilder<C> {

protected final Map<String, String> properties = new LinkedHashMap<>();

protected final Map<Class<? extends InitializationPlugin>, InitializationPlugin> initializationPlugins = new LinkedHashMap<>();
protected final List<InitializationPlugin> initializationPlugins = new LinkedList<>();

protected String name;

Expand Down Expand Up @@ -107,7 +104,7 @@ public AbstractEmbeddedDatabaseCreatorBuilder<C> withMode(final CompatibilityMod
@Override
public <P extends InitializationPlugin> AbstractEmbeddedDatabaseCreatorBuilder<C> initializedByPlugin(final P plugin) {
if (plugin != null) {
initializationPlugins.put(plugin.getClass(), plugin);
initializationPlugins.add(plugin);
}
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import java.sql.SQLException;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public abstract class EmbeddedDatabaseCreatorImpl implements EmbeddedDatabaseCreator {
Expand All @@ -27,7 +28,7 @@ public abstract class EmbeddedDatabaseCreatorImpl implements EmbeddedDatabaseCre

private final Map<String, String> jdbcUrlProperties;

private final Map<Class<? extends InitializationPlugin>, InitializationPlugin> initializationPlugins;
private final List<InitializationPlugin> initializationPlugins;

private final JdbcUrlFactory jdbcUrlFactory;

Expand All @@ -38,13 +39,13 @@ public abstract class EmbeddedDatabaseCreatorImpl implements EmbeddedDatabaseCre
protected EmbeddedDatabaseCreatorImpl(final boolean autoCommit,
final String name,
final Map<String, String> jdbcUrlProperties,
final Map<Class<? extends InitializationPlugin>, InitializationPlugin> initializationPlugins,
final List<InitializationPlugin> initializationPlugins,
final JdbcUrlFactory jdbcUrlFactory,
final CompatibilityMode compatibilityMode) {
this.autoCommit = autoCommit;
this.predefinedName = name;
this.jdbcUrlProperties = jdbcUrlProperties == null ? Collections.emptyMap() : jdbcUrlProperties;
this.initializationPlugins = initializationPlugins == null ? Collections.emptyMap() : initializationPlugins;
this.initializationPlugins = initializationPlugins == null ? Collections.emptyList() : initializationPlugins;
this.jdbcUrlFactory = jdbcUrlFactory == null ? new H2JdbcUrlFactory() : jdbcUrlFactory;
this.compatibilityMode = compatibilityMode;
}
Expand Down Expand Up @@ -109,9 +110,8 @@ protected void setupConnection(final String name) throws SQLException {
throw e;
}
connection.setAutoCommit(isAutoCommit());
for (final Map.Entry<Class<? extends InitializationPlugin>, InitializationPlugin> entry : initializationPlugins
.entrySet()) {
entry.getValue().connectionMade(name, getConnection());
for (InitializationPlugin entry : initializationPlugins) {
entry.connectionMade(name, getConnection());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import java.sql.SQLException;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import static org.junit.jupiter.api.Assertions.*;
Expand All @@ -19,7 +20,7 @@ public void getConnection() {
Collections
.emptyMap(),
Collections
.emptyMap(),
.emptyList(),
new H2JdbcUrlFactory(),
CompatibilityMode.DB2);
assertNotNull(realEmbeddedDatabaseCreator);
Expand All @@ -33,7 +34,7 @@ public void getDataSource() {
Collections
.emptyMap(),
Collections
.emptyMap(),
.emptyList(),
new H2JdbcUrlFactory(),
CompatibilityMode.DB2);
assertNotNull(realEmbeddedDatabaseCreator);
Expand All @@ -47,7 +48,7 @@ public void isAutoCommit() {
Collections
.emptyMap(),
Collections
.emptyMap(),
.emptyList(),
new H2JdbcUrlFactory(),
CompatibilityMode.DB2);
assertFalse(databaseCreator.isAutoCommit());
Expand All @@ -61,7 +62,7 @@ public void getConnectionJdbcUrl() {
Collections
.emptyMap(),
Collections
.emptyMap(),
.emptyList(),
new H2JdbcUrlFactory(),
CompatibilityMode.DB2);
assertEquals(H2JdbcUrlFactory.H2_IN_MEMORY_JDBC_URL_PREFIX + name + ";MODE=DB2",
Expand All @@ -75,7 +76,7 @@ public void setupConnection() throws SQLException {
Collections
.emptyMap(),
Collections
.emptyMap(),
.emptyList(),
new H2JdbcUrlFactory(),
CompatibilityMode.DB2);
databaseCreator.setupConnection("name");
Expand All @@ -84,13 +85,13 @@ public void setupConnection() throws SQLException {
}

@Test
public void illegalJdbcUrl() throws SQLException {
public void illegalJdbcUrl() {
final RealEmbeddedDatabaseCreatorImpl databaseCreator = new RealEmbeddedDatabaseCreatorImpl(false,
"name",
Collections
.emptyMap(),
Collections
.emptyMap(),
.emptyList(),
new IllegalJdbcUrlFactory(),
CompatibilityMode.DB2);
assertThrows(SQLException.class, () -> databaseCreator.setupConnection("name"));
Expand All @@ -116,7 +117,7 @@ private static class RealEmbeddedDatabaseCreatorImpl extends EmbeddedDatabaseCre
public RealEmbeddedDatabaseCreatorImpl(final boolean autoCommit,
final String name,
final Map<String, String> jdbcUrlProperties,
final Map<Class<? extends InitializationPlugin>, InitializationPlugin> initializationPlugins,
final List<InitializationPlugin> initializationPlugins,
final JdbcUrlFactory jdbcUrlFactory,
final CompatibilityMode compatibilityMode) {
super(autoCommit, name, jdbcUrlProperties, initializationPlugins, jdbcUrlFactory, compatibilityMode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,12 +205,12 @@ private static Optional<InternalEmbeddedDatabaseCreator> tryToCreateFromExtensio
builder.withoutAutoCommit();
}
if (dataSourceConfigValue.initialSqls() != null) {
Arrays.stream(dataSourceConfigValue.initialSqls())
.forEach(sql -> builder.withInitialSql(sql));
Arrays.asList(dataSourceConfigValue.initialSqls())
.forEach(builder::withInitialSql);
}
if (dataSourceConfigValue.initialSqlResources() != null) {
Arrays.stream(dataSourceConfigValue.initialSqlResources())
.forEach(sqlResource -> builder.withInitialSqlFromResource(sqlResource));
Arrays.asList(dataSourceConfigValue.initialSqlResources())
.forEach(builder::withInitialSqlFromResource);
}
return Optional.of(builder.buildInternalEmbeddedDatabaseCreator());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@
import org.zapodot.junit.db.plugin.InitializationPlugin;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

public class InternalEmbeddedDatabaseCreator extends EmbeddedDatabaseCreatorImpl {
public InternalEmbeddedDatabaseCreator(final boolean autoCommit,
final String name,
final Map<String, String> jdbcUrlProperties,
final Map<Class<? extends InitializationPlugin>, InitializationPlugin> initializationPlugins,
final List<InitializationPlugin> initializationPlugins,
final JdbcUrlFactory jdbcUrlFactory,
final CompatibilityMode compatibilityMode) {
super(autoCommit, name, jdbcUrlProperties, initializationPlugins, jdbcUrlFactory, compatibilityMode);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package org.zapodot.junit.db;


import org.junit.jupiter.api.Test;
import org.zapodot.junit.db.annotations.EmbeddedDatabase;
import org.zapodot.junit.db.annotations.EmbeddedDatabaseTest;
import org.zapodot.junit.db.common.Engine;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import static org.junit.jupiter.api.Assertions.assertEquals;

@EmbeddedDatabaseTest(engine = Engine.H2,
initialSqls = {"CREATE TABLE Customer(id INTEGER PRIMARY KEY, firstname VARCHAR(512));",
"INSERT INTO Customer values(1, 'Name');"})
public class EmbeddedDatabaseExtensionDeclarativeWithInitSQLTest {

@EmbeddedDatabase
private DataSource dataSource;

@Test
void checkIfInitialSqlHasRun() throws SQLException {
try (final Connection connection = dataSource.getConnection();
final Statement statement = connection.createStatement();
final ResultSet resultSet = statement.executeQuery("SELECT id,firstname FROM Customer Where id=1")
) {
assertEquals(true, resultSet.next());
assertEquals(1, resultSet.getInt("id"));
assertEquals("Name", resultSet.getString("firstName"));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.zapodot.junit.db.internal.JdbcUrlFactory;
import org.zapodot.junit.db.plugin.InitializationPlugin;

import java.util.List;
import java.util.Map;

/**
Expand All @@ -36,7 +37,7 @@ public EmbeddedDatabaseRule() {
private EmbeddedDatabaseRule(final boolean autoCommit,
final String name,
final Map<String, String> jdbcUrlProperties,
final Map<Class<? extends InitializationPlugin>, InitializationPlugin> initializationPlugins,
final List<InitializationPlugin> initializationPlugins,
final JdbcUrlFactory jdbcUrlFactory,
final CompatibilityMode compatibilityMode) {
super(autoCommit, name, jdbcUrlProperties, initializationPlugins, jdbcUrlFactory, compatibilityMode);
Expand Down

0 comments on commit 9be6862

Please sign in to comment.