private void testSwapAtPosition(StartEnd startEnd) throws Exception {
HasOneToManyListJPA pojo = new HasOneToManyListJPA();
pojo.setVal("yar");
BidirTopList bidir1 = new BidirTopList();
BidirTopList bidir2 = new BidirBottomList();
bidir2.setChildVal("yam");
UnidirTop unidir = newUnidir(UnidirLevel.Bottom);
HasKeyPkJPA hasKeyPk = new HasKeyPkJPA();
pojo.getUnidirChildren().add(unidir);
pojo.getHasKeyPks().add(hasKeyPk);
pojo.getBidirChildren().add(bidir1);
bidir1.setParent(pojo);
startEnd.start();
em.persist(pojo);
startEnd.end();
assertCountsInDatastore(HasOneToManyListJPA.class, BidirTopList.class, 1, 1);
startEnd.start();
pojo = em.find(pojo.getClass(), pojo.getId());
String bidir1Id = pojo.getBidirChildren().get(0).getId();
String bookId = pojo.getUnidirChildren().get(0).getId();
Key hasKeyPk1Key = pojo.getHasKeyPks().get(0).getId();
pojo.getBidirChildren().set(0, bidir2);
UnidirTop unidir2 = newUnidir(UnidirLevel.Middle);
String expectedName = unidir2.getName();
unidir2.setStr("another title");
pojo.getUnidirChildren().set(0, unidir2);
HasKeyPkJPA hasKeyPk2 = new HasKeyPkJPA();
hasKeyPk2.setStr("another str");
pojo.getHasKeyPks().set(0, hasKeyPk2);
startEnd.end();
startEnd.start();
assertNotNull(pojo.getId());
assertEquals(1, pojo.getUnidirChildren().size());
assertEquals(1, pojo.getHasKeyPks().size());
assertEquals(1, pojo.getBidirChildren().size());
assertNotNull(bidir2.getId());
assertNotNull(bidir2.getParent());
assertNotNull(unidir2.getId());
assertNotNull(hasKeyPk2.getId());
Entity pojoEntity = ds.get(KeyFactory.stringToKey(pojo.getId()));
assertNotNull(pojoEntity);
assertEquals(4, pojoEntity.getProperties().size());
assertEquals(Collections.singletonList(KeyFactory.stringToKey(bidir2.getId())), pojoEntity.getProperty("bidirChildren"));
assertEquals(Collections.singletonList(KeyFactory.stringToKey(unidir2.getId())), pojoEntity.getProperty("unidirChildren"));
assertEquals(Collections.singletonList(hasKeyPk2.getId()), pojoEntity.getProperty("hasKeyPks"));
startEnd.end();
try {
ds.get(KeyFactory.stringToKey(bidir1Id));
fail("expected EntityNotFoundException");
} catch (EntityNotFoundException enfe) {
// good
}
try {
ds.get(KeyFactory.stringToKey(bookId));
fail("expected EntityNotFoundException");
} catch (EntityNotFoundException enfe) {
// good
}
try {
ds.get(hasKeyPk1Key);
fail("expected EntityNotFoundException");
} catch (EntityNotFoundException enfe) {
// good
}
Entity bidirChildEntity = ds.get(KeyFactory.stringToKey(bidir2.getId()));
assertNotNull(bidirChildEntity);
assertEquals(bidir2.getClass().getName(), bidirChildEntity.getProperty("DTYPE"));
assertEquals("yam", bidirChildEntity.getProperty("childVal"));
assertEquals(KeyFactory.stringToKey(bidir2.getId()), bidirChildEntity.getKey());
assertKeyParentEquals(pojo.getId(), bidirChildEntity, bidir2.getId());
Entity unidirEntity = ds.get(KeyFactory.stringToKey(unidir2.getId()));
assertNotNull(unidirEntity);
assertEquals(expectedName, unidirEntity.getProperty("name"));
assertEquals(UnidirLevel.Middle.discriminator, unidirEntity.getProperty("DTYPE"));