public void testAddAtPosition_NoTxn() throws Exception {
testAddAtPosition(NEW_EM_START_END);
}
private void testAddAtPosition(StartEnd startEnd) throws Exception {
HasOneToManyListJPA pojo = new HasOneToManyListJPA();
pojo.setVal("yar");
BidirectionalChildListJPA bidir1 = new BidirectionalChildListJPA();
BidirectionalChildListJPA bidir2 = new BidirectionalChildListJPA();
bidir1.setChildVal("yam1");
bidir2.setChildVal("yam2");
Book b1 = newBook();
Book b2 = newBook();
b2.setTitle("another title");
HasKeyPkJPA hasKeyPk1 = new HasKeyPkJPA();
HasKeyPkJPA hasKeyPk2 = new HasKeyPkJPA();
hasKeyPk2.setStr("yar 2");
pojo.getBooks().add(b1);
pojo.getHasKeyPks().add(hasKeyPk1);
pojo.getBidirChildren().add(bidir1);
startEnd.start();
em.persist(pojo);
startEnd.end();
assertCountsInDatastore(HasOneToManyListJPA.class, BidirectionalChildListJPA.class, 1, 1);
startEnd.start();
pojo = em.find(pojo.getClass(), pojo.getId());
String bidir1Id = pojo.getBidirChildren().get(0).getId();
String bookId = pojo.getBooks().get(0).getId();
Key hasKeyPk1Key = pojo.getHasKeyPks().get(0).getId();
pojo.getBidirChildren().add(0, bidir2);
pojo.getBooks().add(0, b2);
pojo.getHasKeyPks().add(0, hasKeyPk2);
startEnd.end();
startEnd.start();
assertNotNull(pojo.getId());
assertEquals(2, pojo.getBooks().size());
assertEquals(2, pojo.getHasKeyPks().size());
assertEquals(2, pojo.getBidirChildren().size());
assertNotNull(bidir2.getId());
assertNotNull(bidir2.getParent());
assertNotNull(b2.getId());
assertNotNull(hasKeyPk2.getId());
Entity pojoEntity = ds.get(KeyFactory.stringToKey(pojo.getId()));
assertNotNull(pojoEntity);
assertEquals(4, pojoEntity.getProperties().size());
assertEquals(Utils.newArrayList(KeyFactory.stringToKey(bidir2.getId()), KeyFactory.stringToKey(bidir1Id)), pojoEntity.getProperty("bidirChildren"));
assertEquals(Utils.newArrayList(KeyFactory.stringToKey(b2.getId()), KeyFactory.stringToKey(bookId)), pojoEntity.getProperty("books"));
assertEquals(Utils.newArrayList(hasKeyPk2.getId(), hasKeyPk1Key), pojoEntity.getProperty("hasKeyPks"));
startEnd.end();
ds.get(KeyFactory.stringToKey(bidir1Id));
ds.get(KeyFactory.stringToKey(bookId));
ds.get(hasKeyPk1Key);
Entity bidirChildEntity1 = ds.get(KeyFactory.stringToKey(bidir1Id));
Entity bidirChildEntity2 = ds.get(KeyFactory.stringToKey(bidir2.getId()));
assertNotNull(bidirChildEntity2);
assertEquals("yam2", bidirChildEntity2.getProperty("childVal"));
assertEquals(KeyFactory.stringToKey(bidir2.getId()), bidirChildEntity2.getKey());
assertKeyParentEquals(pojo.getId(), bidirChildEntity2, bidir2.getId());
Entity bookEntity1 = ds.get(KeyFactory.stringToKey(bookId));
Entity bookEntity2 = ds.get(KeyFactory.stringToKey(b2.getId()));
assertNotNull(bookEntity2);
assertEquals("max", bookEntity2.getProperty("author"));
assertEquals("22333", bookEntity2.getProperty("isbn"));
assertEquals("another title", bookEntity2.getProperty("title"));
assertEquals(KeyFactory.stringToKey(b2.getId()), bookEntity2.getKey());
assertKeyParentEquals(pojo.getId(), bookEntity2, b2.getId());
Entity hasKeyPkEntity1 = ds.get(hasKeyPk1Key);
Entity hasKeyPkEntity2 = ds.get(hasKeyPk2.getId());
assertNotNull(hasKeyPkEntity2);
assertEquals("yar 2", hasKeyPkEntity2.getProperty("str"));
assertEquals(hasKeyPk2.getId(), hasKeyPkEntity2.getKey());
assertKeyParentEquals(pojo.getId(), hasKeyPkEntity2, hasKeyPk2.getId());
Entity parentEntity = ds.get(KeyFactory.stringToKey(pojo.getId()));
assertNotNull(parentEntity);
assertEquals(4, parentEntity.getProperties().size());
assertEquals("yar", parentEntity.getProperty("val"));
assertEquals(Utils.newArrayList(bidirChildEntity2.getKey(), bidirChildEntity1.getKey()), pojoEntity.getProperty("bidirChildren"));
assertEquals(Utils.newArrayList(bookEntity2.getKey(), bookEntity1.getKey()), pojoEntity.getProperty("books"));