@Test
  public void testProxying() {
    // this is not a bullet proof proxy detection, but it should prove whether or not proxying is
    // correctly
    // inserted into the chain of events.

    String javaAssistMarker = "$$_javassist";

    String aLaunchURI = "http://nasa.dataincubator.org/launch/SATURNSA1";

    Launch aLaunch = mManager.find(Launch.class, aLaunchURI);

    LaunchUsingProxy aProxySupportingLaunch = mManager.find(LaunchUsingProxy.class, aLaunchURI);

    // this object is proxied
    LaunchSite aOrigSite = aProxySupportingLaunch.getLaunchSite();

    // this should be a proxy class...
    // the easy way to check this is via the class name to see if its a javassist created class.
    // this means the proxy was correctly created in RdfGenerator
    // and the proxy *works* if the results of the gets and sets are what is expected.
    assertTrue(aOrigSite.getClass().getName().indexOf(javaAssistMarker) != -1);

    // and the non-proxying version should not return a proxy object
    assertTrue(aLaunch.getLaunchSite().getClass().getName().indexOf(javaAssistMarker) == -1);

    // and the proxied object should be equal to a non proxied version of the same thing
    assertEquals(aOrigSite, aLaunch.getLaunchSite());

    // we want to make sure that get/set operations work via a proxied object fine, that we don't
    // get anything cached
    // or stale proxied objects returned accidentally

    LaunchSite aNewSite = new LaunchSite();
    aNewSite.setLabel(Arrays.asList("new launch site"));

    assertFalse(aOrigSite.equals(aNewSite));

    assertEquals(aProxySupportingLaunch.getLaunchSite(), aOrigSite);

    aProxySupportingLaunch.setLaunchSite(aNewSite);

    assertEquals(aProxySupportingLaunch.getLaunchSite(), aNewSite);
  }
  @Test
  public void testAllCascade() {
    // ============ test all cascade
    Launch aNewLaunch = new Launch();
    LaunchUsingProxy aNewLaunchWithProxy = new LaunchUsingProxy();

    LaunchSite aNewSiteOne = new LaunchSite();
    aNewSiteOne.setLabel(Arrays.asList("new launch site one"));

    LaunchSite aNewSiteTwo = new LaunchSite();
    aNewSiteTwo.setLabel(Arrays.asList("new launch site two"));

    aNewLaunch.setLaunchSite(aNewSiteOne);
    aNewLaunchWithProxy.setLaunchSite(aNewSiteOne);

    mManager.persist(aNewLaunch);

    assertTrue(mManager.contains(aNewLaunch));
    assertTrue(
        mManager
            .find(Launch.class, aNewLaunch.getRdfId())
            .getLaunchSite()
            .getRdfId()
            .equals(aNewSiteOne.getRdfId()));
    assertFalse(mManager.contains(aNewSiteOne));

    mManager.persist(aNewLaunchWithProxy);

    assertTrue(mManager.contains(aNewLaunchWithProxy));
    assertTrue(
        mManager
            .find(LaunchUsingProxy.class, aNewLaunchWithProxy.getRdfId())
            .getLaunchSite()
            .equals(aNewSiteOne));
    assertTrue(mManager.contains(aNewSiteOne));

    aNewLaunch.setLaunchSite(aNewSiteTwo);
    aNewLaunchWithProxy.setLaunchSite(aNewSiteTwo);

    mManager.merge(aNewLaunch);

    assertTrue(mManager.contains(aNewLaunch));
    assertTrue(
        mManager
            .find(Launch.class, aNewLaunch.getRdfId())
            .getLaunchSite()
            .getRdfId()
            .equals(aNewSiteTwo.getRdfId()));
    assertFalse(mManager.contains(aNewSiteTwo));

    mManager.merge(aNewLaunchWithProxy);

    assertTrue(mManager.contains(aNewLaunchWithProxy));
    assertTrue(
        mManager
            .find(LaunchUsingProxy.class, aNewLaunchWithProxy.getRdfId())
            .getLaunchSite()
            .equals(aNewSiteTwo));
    assertTrue(mManager.contains(aNewSiteTwo));

    mManager.remove(aNewLaunch);

    assertFalse(mManager.contains(aNewLaunch));
    assertTrue(mManager.contains(aNewSiteTwo));

    mManager.remove(aNewLaunchWithProxy);

    assertFalse(mManager.contains(aNewLaunchWithProxy));
    assertFalse(mManager.contains(aNewSiteTwo));
  }