package org.mongodb.morphia.mapping.lazy; import org.junit.Assert; import org.junit.Test; import org.mongodb.morphia.annotations.Reference; import org.mongodb.morphia.testutil.TestEntity; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; @SuppressWarnings("unchecked") public class TestReferenceCollection extends ProxyTestBase { @Test public void testOrderingPreserved() throws Exception { // TODO us: exclusion does not work properly with maven + junit4 if (!LazyFeatureDependencies.testDependencyFullFilled()) { return; } final Origin origin = new Origin(); final Endpoint endpoint1 = new Endpoint(); endpoint1.setFoo("b1"); origin.lazyList.add(endpoint1); final Endpoint endpoint2 = new Endpoint(); endpoint2.setFoo("b2"); origin.lazyList.add(endpoint2); getDs().save(endpoint1); getDs().save(endpoint2); Assert.assertEquals("b1", origin.lazyList.iterator().next().foo); getDs().save(origin); Origin reloaded = getDs().get(origin); Assert.assertEquals("b1", reloaded.lazyList.iterator().next().foo); Collections.swap(reloaded.lazyList, 0, 1); Assert.assertEquals("b2", reloaded.lazyList.iterator().next().foo); getDs().save(reloaded); reloaded = getDs().get(reloaded); final Collection<Endpoint> lbs = reloaded.lazyList; Assert.assertEquals(2, lbs.size()); final Iterator<Endpoint> iterator = lbs.iterator(); Assert.assertEquals("b2", iterator.next().foo); } public static class Origin extends TestEntity { @Reference private final List<Endpoint> list = new ArrayList<Endpoint>(); @Reference(lazy = true) private final List<Endpoint> lazyList = new ArrayList<Endpoint>(); } public static class Endpoint extends TestEntity { private String foo; public String getFoo() { return foo; } public void setFoo(final String string) { foo = string; } @Override public String toString() { return super.toString() + " : id = " + getId() + ", foo=" + foo; } } }