package io.ebean.plugin;
import io.ebean.Ebean;
import io.ebean.EbeanServer;
import org.tests.model.basic.Customer;
import org.tests.model.basic.Order;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class ExpressionPathTest {
static EbeanServer server = Ebean.getDefaultServer();
<T> BeanType<T> beanType(Class<T> cls) {
return server.getPluginApi().getBeanType(cls);
}
@Test
public void containsMany_when_many() throws Exception {
BeanType<Order> beanType = beanType(Order.class);
assertThat(beanType.getExpressionPath("details").containsMany()).isTrue();
}
@Test
public void containsMany_when_manyChild() throws Exception {
BeanType<Order> beanType = beanType(Order.class);
assertThat(beanType.getExpressionPath("details.id").containsMany()).isTrue();
}
@Test
public void containsMany_when_manyGrandChild() throws Exception {
BeanType<Order> beanType = beanType(Order.class);
assertThat(beanType.getExpressionPath("details.product.sku").containsMany()).isTrue();
}
@Test
public void containsMany_when_one() throws Exception {
BeanType<Order> beanType = beanType(Order.class);
assertThat(beanType.getExpressionPath("customer.name").containsMany()).isFalse();
}
@Test
public void containsMany_when_oneWithMany() throws Exception {
BeanType<Order> beanType = beanType(Order.class);
assertThat(beanType.getExpressionPath("customer.contacts").containsMany()).isTrue();
}
@Test
public void containsMany_when_oneWithManyChild() throws Exception {
BeanType<Order> beanType = beanType(Order.class);
assertThat(beanType.getExpressionPath("customer.contacts.firstName").containsMany()).isTrue();
}
@Test
public void set_when_basic() throws Exception {
BeanType<Order> beanType = beanType(Order.class);
Order order = new Order();
beanType.getExpressionPath("id").pathSet(order, 42);
assertThat(order.getId()).isEqualTo(42);
}
@Test
public void set_when_nested() throws Exception {
BeanType<Order> beanType = beanType(Order.class);
Order order = new Order();
beanType.getExpressionPath("customer.name").pathSet(order, "Rob");
assertThat(order.getCustomer().getName()).isEqualTo("Rob");
}
@Test
public void test_dirty() throws Exception {
BeanType<Customer> customerBeanType = beanType(Customer.class);
BeanType<Order> orderBeanType = beanType(Order.class);
Customer customer = new Customer();
customer.setName("foo");
server.save(customer);
customer = server.find(Customer.class, customer.getId());
assertThat(customer.getName()).isEqualTo("foo");
customerBeanType.getExpressionPath("name").pathSet(customer, "bar");
server.save(customer);
customer = server.find(Customer.class, customer.getId());
assertThat(customer.getName()).isEqualTo("bar");
Order order = new Order();
order.setCustomer(customer);
server.save(order);
order = server.find(Order.class, order.getId());
ExpressionPath customerNamePath = orderBeanType.getExpressionPath("customer.name");
assertThat(customerNamePath.pathGet(order)).isEqualTo("bar");
customerNamePath.pathSet(order, "baz");
server.save(order);
order = server.find(Order.class, order.getId());
assertThat(order.getCustomer().getName()).isEqualTo("baz");
}
}