package bo.gotthardt.test;
import bo.gotthardt.ebean.EbeanEntities;
import com.avaje.ebean.EbeanServer;
import com.avaje.ebean.EbeanServerFactory;
import com.avaje.ebean.config.DataSourceConfig;
import com.avaje.ebean.config.ServerConfig;
import com.avaje.ebeaninternal.api.SpiEbeanServer;
import com.avaje.ebeaninternal.server.ddl.DdlGenerator;
import lombok.experimental.Delegate;
/**
* In-memory EbeanServer for use in unit/integration tests.
*
* @author Bo Gotthardt
*/
public class InMemoryEbeanServer implements EbeanServer {
@Delegate(types=EbeanServer.class)
private final EbeanServer server;
private final DdlGenerator ddl;
public InMemoryEbeanServer() {
// Create in-memory database configuration.
DataSourceConfig dbConfig = new DataSourceConfig();
dbConfig.setUsername("sa");
dbConfig.setPassword("");
dbConfig.setUrl("jdbc:h2:mem:tests2;DB_CLOSE_DELAY=-1");
dbConfig.setDriver("org.h2.Driver");
ServerConfig config = new ServerConfig();
config.setName("h2");
config.setDataSourceConfig(dbConfig);
config.setDefaultServer(true);
for (Class<?> entity : EbeanEntities.getEntities()) {
config.addClass(entity);
}
config.setDdlGenerate(true);
config.setDdlRun(true);
server = EbeanServerFactory.create(config);
ddl = ((SpiEbeanServer) server).getDdlGenerator();
}
public void clear() {
ddl.runScript(false, ddl.generateDropDdl());
ddl.runScript(false, ddl.generateCreateDdl());
}
}