package io.ebean.event; import io.ebean.EbeanServer; import io.ebean.EbeanServerFactory; import io.ebean.config.ServerConfig; import org.tests.model.basic.EBasicVer; import org.junit.Test; import java.util.ArrayList; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; public class BeanPersistControllerTest { PersistAdapter continuePersistingAdapter = new PersistAdapter(true); PersistAdapter stopPersistingAdapter = new PersistAdapter(false); @Test public void testInsertUpdateDelete_given_continuePersistingAdapter() { EbeanServer ebeanServer = getEbeanServer(continuePersistingAdapter); EBasicVer bean = new EBasicVer("testController"); ebeanServer.save(bean); assertThat(continuePersistingAdapter.methodsCalled).hasSize(2); assertThat(continuePersistingAdapter.methodsCalled).containsExactly("preInsert", "postInsert"); continuePersistingAdapter.methodsCalled.clear(); bean.setName("modified"); ebeanServer.save(bean); assertThat(continuePersistingAdapter.methodsCalled).hasSize(2); assertThat(continuePersistingAdapter.methodsCalled).containsExactly("preUpdate", "postUpdate"); continuePersistingAdapter.methodsCalled.clear(); ebeanServer.delete(bean); assertThat(continuePersistingAdapter.methodsCalled).hasSize(2); assertThat(continuePersistingAdapter.methodsCalled).containsExactly("preDelete", "postDelete"); } @Test public void testInsertUpdateDelete_given_stopPersistingAdapter() { EbeanServer ebeanServer = getEbeanServer(stopPersistingAdapter); EBasicVer bean = new EBasicVer("testController"); ebeanServer.save(bean); assertThat(stopPersistingAdapter.methodsCalled).hasSize(1); assertThat(stopPersistingAdapter.methodsCalled).containsExactly("preInsert"); stopPersistingAdapter.methodsCalled.clear(); bean.setName("modified"); ebeanServer.update(bean); assertThat(stopPersistingAdapter.methodsCalled).hasSize(1); assertThat(stopPersistingAdapter.methodsCalled).containsExactly("preUpdate"); stopPersistingAdapter.methodsCalled.clear(); ebeanServer.delete(bean); assertThat(stopPersistingAdapter.methodsCalled).hasSize(1); assertThat(stopPersistingAdapter.methodsCalled).containsExactly("preDelete"); } private EbeanServer getEbeanServer(PersistAdapter persistAdapter) { System.setProperty("ebean.ignoreExtraDdl", "true"); ServerConfig config = new ServerConfig(); config.setName("h2ebasicver"); config.setH2ProductionMode(true); config.loadFromProperties(); config.setDdlGenerate(true); config.setDdlRun(true); config.setRegister(false); config.setDefaultServer(false); config.getClasses().add(EBasicVer.class); config.add(persistAdapter); return EbeanServerFactory.create(config); } static class PersistAdapter extends BeanPersistAdapter { boolean continueDefaultPersisting; List<String> methodsCalled = new ArrayList<>(); /** * No default constructor so only registered manually. */ PersistAdapter(boolean continueDefaultPersisting) { this.continueDefaultPersisting = continueDefaultPersisting; } @Override public boolean isRegisterFor(Class<?> cls) { return true; } @Override public boolean preDelete(BeanPersistRequest<?> request) { methodsCalled.add("preDelete"); return continueDefaultPersisting; } @Override public boolean preInsert(BeanPersistRequest<?> request) { methodsCalled.add("preInsert"); return continueDefaultPersisting; } @Override public boolean preUpdate(BeanPersistRequest<?> request) { methodsCalled.add("preUpdate"); return continueDefaultPersisting; } @Override public void postDelete(BeanPersistRequest<?> request) { methodsCalled.add("postDelete"); } @Override public void postInsert(BeanPersistRequest<?> request) { methodsCalled.add("postInsert"); } @Override public void postUpdate(BeanPersistRequest<?> request) { methodsCalled.add("postUpdate"); } } }