package org.jooby.internal.ebean;
import static org.easymock.EasyMock.expect;
import static org.junit.Assert.assertEquals;
import org.jooby.test.MockUnit;
import org.jooby.test.MockUnit.Block;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import io.ebean.EbeanServer;
import io.ebean.EbeanServerFactory;
import io.ebean.config.ServerConfig;
import com.typesafe.config.Config;
@RunWith(PowerMockRunner.class)
@PrepareForTest({EbeanManaged.class, EbeanServerFactory.class })
public class EbeanManagedTest {
private Block createEbean = unit -> {
EbeanServer ebean = unit.get(EbeanServer.class);
unit.mockStatic(EbeanServerFactory.class);
expect(EbeanServerFactory.create(unit.get(ServerConfig.class))).andReturn(ebean);
};
private Block withoutDdl = unit -> {
ServerConfig conf = unit.get(ServerConfig.class);
expect(conf.isDdlGenerate()).andReturn(false);
};
private Block withDdl = unit -> {
ServerConfig sconf = unit.get(ServerConfig.class);
expect(sconf.isDdlGenerate()).andReturn(true);
expect(sconf.getName()).andReturn("db").times(2);
Config conf = unit.get(Config.class);
expect(conf.getString("application.tmpdir")).andReturn("target");
};
@Test
public void newEbeanManaged() throws Exception {
new MockUnit(Config.class, ServerConfig.class)
.run(unit -> {
new EbeanManaged(unit.get(Config.class), unit.get(ServerConfig.class));
});
}
@Test
public void start() throws Exception {
new MockUnit(Config.class, ServerConfig.class, EbeanServer.class)
.expect(createEbean)
.expect(withoutDdl)
.run(unit -> {
new EbeanManaged(unit.get(Config.class), unit.get(ServerConfig.class)).start();
});
}
@Test
public void startWithDdl() throws Exception {
new MockUnit(Config.class, ServerConfig.class, EbeanServer.class)
.expect(createEbean)
.expect(withDdl)
.run(unit -> {
new EbeanManaged(unit.get(Config.class), unit.get(ServerConfig.class)).start();
});
}
@Test
public void startShouldIgnoreOn2ndCall() throws Exception {
new MockUnit(Config.class, ServerConfig.class, EbeanServer.class)
.expect(createEbean)
.expect(withDdl)
.run(unit -> {
EbeanManaged managed = new EbeanManaged(unit.get(Config.class),
unit.get(ServerConfig.class));
managed.start();
// ignored
managed.start();
});
}
@Test
public void get() throws Exception {
new MockUnit(Config.class, ServerConfig.class, EbeanServer.class)
.expect(createEbean)
.expect(withoutDdl)
.run(unit -> {
EbeanManaged managed = new EbeanManaged(unit.get(Config.class),
unit.get(ServerConfig.class));
assertEquals(unit.get(EbeanServer.class), managed.get());
assertEquals(unit.get(EbeanServer.class), managed.get());
});
}
@Test
public void stop() throws Exception {
new MockUnit(Config.class, ServerConfig.class, EbeanServer.class)
.expect(createEbean)
.expect(withoutDdl)
.expect(unit -> {
EbeanServer ebean = unit.get(EbeanServer.class);
ebean.shutdown(false, false);
})
.run(unit -> {
EbeanManaged managed = new EbeanManaged(unit.get(Config.class),
unit.get(ServerConfig.class));
managed.stop();
// ignored
managed.stop();
});
}
}