package org.tests.basic; import io.ebean.BaseTestCase; import io.ebean.Ebean; import io.ebean.bean.BeanCollection; import org.tests.model.basic.Address; import org.tests.model.basic.Customer; import org.tests.model.basic.Order; import org.tests.model.basic.OrderDetail; import org.tests.model.basic.ResetBasicData; import org.junit.Assert; import org.junit.Test; import java.util.Iterator; import java.util.List; import java.util.ListIterator; public class TestReadOnlyPropagation extends BaseTestCase { @Test public void testReadOnly() { ResetBasicData.reset(); Order order = Ebean.find(Order.class) .setAutoTune(false) .setUseCache(false) .setReadOnly(true) .setId(1) .findOne(); Assert.assertTrue(Ebean.getBeanState(order).isReadOnly()); Customer customer = order.getCustomer(); Assert.assertTrue(Ebean.getBeanState(customer).isReadOnly()); Address billingAddress = customer.getBillingAddress(); Assert.assertTrue(Ebean.getBeanState(billingAddress).isReadOnly()); List<OrderDetail> details = order.getDetails(); BeanCollection<?> bc = (BeanCollection<?>) details; Assert.assertTrue(bc.isReadOnly()); Assert.assertTrue(!bc.isPopulated()); bc.size(); Assert.assertTrue(!bc.isEmpty()); Assert.assertTrue(bc.isReadOnly()); Assert.assertTrue(bc.isPopulated()); try { details.add(new OrderDetail()); Assert.assertTrue(false); } catch (IllegalStateException e) { Assert.assertTrue(true); } try { details.remove(0); Assert.assertTrue(false); } catch (IllegalStateException e) { Assert.assertTrue(true); } try { Iterator<OrderDetail> it = details.iterator(); it.next(); it.remove(); Assert.assertTrue(false); } catch (IllegalStateException e) { Assert.assertTrue(true); } try { ListIterator<OrderDetail> it = details.listIterator(); it.next(); it.remove(); Assert.assertTrue(false); } catch (IllegalStateException e) { Assert.assertTrue(true); } try { List<OrderDetail> subList = details.subList(0, 1); subList.remove(0); Assert.assertTrue(false); } catch (UnsupportedOperationException e) { Assert.assertTrue(true); } } }