package io.ebean.event;
import io.ebean.BaseTestCase;
import io.ebean.EbeanServer;
import io.ebean.EbeanServerFactory;
import io.ebean.bean.BeanCollection;
import io.ebean.common.BeanList;
import io.ebean.config.ServerConfig;
import org.tests.model.basic.EBasic;
import org.tests.model.basic.ECustomId;
import org.tests.example.ModUuidGenerator;
import org.junit.Test;
import java.util.List;
import static org.junit.Assert.*;
public class BeanFindControllerTest extends BaseTestCase {
@Test
public void test() {
System.setProperty("ebean.ignoreExtraDdl", "true");
ServerConfig config = new ServerConfig();
config.setName("h2otherfind");
config.loadFromProperties();
config.setDdlGenerate(true);
config.setDdlRun(true);
config.setRegister(false);
config.setDefaultServer(false);
config.add(new ModUuidGenerator());
config.getClasses().add(EBasic.class);
config.getClasses().add(ECustomId.class);
EBasicFindController findController = new EBasicFindController();
config.getFindControllers().add(findController);
EbeanServer ebeanServer = EbeanServerFactory.create(config);
assertFalse(findController.calledInterceptFind);
ebeanServer.find(EBasic.class, 42);
assertTrue(findController.calledInterceptFind);
findController.findIntercept = true;
EBasic eBasic = ebeanServer.find(EBasic.class, 42);
assertEquals(Integer.valueOf(47), eBasic.getId());
assertEquals("47", eBasic.getName());
assertFalse(findController.calledInterceptFindMany);
List<EBasic> list = ebeanServer.find(EBasic.class).where().eq("name", "AnInvalidNameSoEmpty").findList();
assertEquals(0, list.size());
assertTrue(findController.calledInterceptFindMany);
findController.findManyIntercept = true;
list = ebeanServer.find(EBasic.class).where().eq("name", "AnInvalidNameSoEmpty").findList();
assertEquals(1, list.size());
eBasic = list.get(0);
assertEquals(Integer.valueOf(47), eBasic.getId());
assertEquals("47", eBasic.getName());
ECustomId bean = new ECustomId("check");
ebeanServer.save(bean);
assertNotNull(bean.getId());
}
static class EBasicFindController implements BeanFindController {
boolean findIntercept;
boolean findManyIntercept;
boolean calledInterceptFind;
boolean calledInterceptFindMany;
@Override
public boolean isRegisterFor(Class<?> cls) {
return EBasic.class.equals(cls);
}
@Override
public boolean isInterceptFind(BeanQueryRequest<?> request) {
calledInterceptFind = true;
return findIntercept;
}
@SuppressWarnings("unchecked")
@Override
public <T> T find(BeanQueryRequest<T> request) {
return (T) createBean();
}
@Override
public boolean isInterceptFindMany(BeanQueryRequest<?> request) {
calledInterceptFindMany = true;
return findManyIntercept;
}
@SuppressWarnings("unchecked")
@Override
public <T> BeanCollection<T> findMany(BeanQueryRequest<T> request) {
BeanList<T> list = new BeanList<>();
list.add((T) createBean());
return list;
}
}
private static EBasic createBean() {
EBasic b = new EBasic();
b.setId(47);
b.setName("47");
return b;
}
}