Files
ebean/ebean-test/src/test/java/org/tests/update/TestUpdateCircularSave.java
T

94 lines
2.4 KiB
Java

package org.tests.update;
import io.ebean.BaseTestCase;
import io.ebean.DB;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.tests.update.objects.Child;
import org.tests.update.objects.Parent;
import org.tests.update.objects.SiblingA;
import org.tests.update.objects.SiblingB;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class TestUpdateCircularSave extends BaseTestCase {
@Test
public void testCircularCascade() {
long aId = createA();
modifyPropertyToTrue(aId);
SiblingA siblingA = DB.find(SiblingA.class, aId);
assert siblingA != null;
assertTrue(siblingA.getSiblingB().isTestProperty());
}
private void modifyPropertyToTrue(long aId) {
SiblingA siblingA = DB.find(SiblingA.class, aId);
assert siblingA != null;
final SiblingB siblingB = siblingA.getSiblingB();
siblingB.setTestProperty(true);
// Will get optimistic lock as version is increased twice on B
DB.save(siblingB);
}
private long createA() {
SiblingA siblingA = new SiblingA();
SiblingB siblingB = new SiblingB();
siblingA.setSiblingB(siblingB);
DB.save(siblingA);
return siblingA.getId();
}
@Disabled
@Test
public void testFetchChildModifyChildSaveParent() {
long childId = createParentAndChild().getChild().getId();
Child child = DB.find(Child.class, childId);
assert child != null;
child.setTestProperty(true);
final Parent parent = child.getParent();
DB.save(parent);
assertChildModified(childId);
}
private void assertChildModified(long childId) {
Parent parent = DB.find(Parent.class, childId);
assert parent != null;
// Fails here because D was not saved even though C has cascade = ALL
assertTrue(parent.getChild().isTestProperty());
assertEquals(parent.getChild().getVersion(), 2L);
}
private Parent createParentAndChild() {
Parent parent = new Parent();
Child child = new Child();
parent.setChild(child);
DB.save(parent);
return parent;
}
@Test
public void testFetchParentModifyChildSaveParent() {
long parentId = createParentAndChild().getId();
Parent parent = DB.find(Parent.class, parentId);
assert parent != null;
parent.getChild().setTestProperty(true);
DB.save(parent);
assertChildModified(parent.getChild().getId());
}
}