public void testDeleteFromServer() { SimpleEntity newEntity = new SimpleEntity(); newEntity.setString("the string value"); newEntity.setDate(new Timestamp(1234567L)); newEntity.setInteger(9999); ErraiEntityManager esem = csm.getExpectedStateEm(); ErraiEntityManager dsem = csm.getDesiredStateEm(); // persist this as both the "expected state" from the server and the "desired state" on the // client SimpleEntity originalEntityState = esem.merge(newEntity); esem.flush(); esem.clear(); dsem.persist(originalEntityState); dsem.flush(); dsem.clear(); List<SyncRequestOperation<SimpleEntity>> expectedClientRequests = new ArrayList<SyncRequestOperation<SimpleEntity>>(); expectedClientRequests.add(SyncRequestOperation.unchanged(originalEntityState)); // now cook up a server response that says it got deleted List<SyncResponse<SimpleEntity>> fakeServerResponses = new ArrayList<SyncResponse<SimpleEntity>>(); fakeServerResponses.add(new DeleteResponse<SimpleEntity>(newEntity)); performColdSync(expectedClientRequests, fakeServerResponses); assertNull(esem.find(SimpleEntity.class, newEntity.getId())); assertNull(dsem.find(SimpleEntity.class, newEntity.getId())); // finally, ensure the deleted entity is not stuck in the REMOVED state // (should be NEW or DETACHED; we can verify by trying to merge it) try { esem.merge(newEntity); } catch (IllegalArgumentException e) { fail("Merging removed entity failed: " + e); } try { dsem.merge(newEntity); } catch (IllegalArgumentException e) { fail("Merging removed entity failed: " + e); } }
public void testUpdateFromServer() { SimpleEntity newEntity = new SimpleEntity(); newEntity.setString("the string value"); newEntity.setDate(new Timestamp(1234567L)); newEntity.setInteger(9999); ErraiEntityManager esem = csm.getExpectedStateEm(); ErraiEntityManager dsem = csm.getDesiredStateEm(); // persist this as both the "expected state" from the server and the "desired state" on the // client SimpleEntity originalEntityState = esem.merge(newEntity); esem.flush(); esem.clear(); dsem.persist(originalEntityState); dsem.flush(); dsem.clear(); List<SyncRequestOperation<SimpleEntity>> expectedClientRequests = new ArrayList<SyncRequestOperation<SimpleEntity>>(); expectedClientRequests.add(SyncRequestOperation.unchanged(originalEntityState)); // now cook up a server response that says something changed SimpleEntity.setId(newEntity, originalEntityState.getId()); newEntity.setString("a new string value"); newEntity.setInteger(110011); List<SyncResponse<SimpleEntity>> fakeServerResponses = new ArrayList<SyncResponse<SimpleEntity>>(); fakeServerResponses.add(new UpdateResponse<SimpleEntity>(newEntity)); performColdSync(expectedClientRequests, fakeServerResponses); SimpleEntity changedEntityExpected = esem.find(SimpleEntity.class, newEntity.getId()); SimpleEntity changedEntityDesired = dsem.find(SimpleEntity.class, newEntity.getId()); assertEquals(changedEntityExpected.toString(), newEntity.toString()); assertEquals(changedEntityDesired.toString(), newEntity.toString()); assertNotSame(changedEntityDesired, changedEntityExpected); }