You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2019/04/24 14:54:01 UTC

[cayenne] 04/06: CAY-2571 DataDomainFlushAction redesign tests

This is an automated email from the ASF dual-hosted git repository.

ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit 1e2d9bfef2cd35c450562b918538eaea7723ae58
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Mon Apr 22 18:05:24 2019 +0300

    CAY-2571 DataDomainFlushAction redesign
    tests
---
 .../DataContextEntityWithMeaningfulPKIT.java       | 15 +++++
 .../access/DataContextFlattenedAttributesIT.java   | 66 ++++++++++++++++++++++
 .../access/DefaultDataRowStoreFactoryIT.java       |  6 ++
 .../cayenne/access/VerticalInheritanceIT.java      | 19 ++-----
 .../server/DataContextFactoryTest.java             | 12 ++++
 .../test/resources/inheritance-vertical.map.xml    |  4 +-
 cayenne-server/src/test/resources/testmap.map.xml  |  4 +-
 7 files changed, 107 insertions(+), 19 deletions(-)

diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEntityWithMeaningfulPKIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEntityWithMeaningfulPKIT.java
index 31136a0..2ac114d 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEntityWithMeaningfulPKIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEntityWithMeaningfulPKIT.java
@@ -29,10 +29,12 @@ import org.apache.cayenne.query.ObjectIdQuery;
 import org.apache.cayenne.query.ObjectSelect;
 import org.apache.cayenne.testdo.meaningful_pk.MeaningfulPKDep;
 import org.apache.cayenne.testdo.meaningful_pk.MeaningfulPKTest1;
+import org.apache.cayenne.testdo.meaningful_pk.MeaningfulPk;
 import org.apache.cayenne.testdo.meaningful_pk.MeaningfulPkTest2;
 import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import java.util.List;
@@ -189,4 +191,17 @@ public class DataContextEntityWithMeaningfulPKIT extends ServerCase {
         assertEquals(1, obj1.getPkAttribute());
         assertEquals(2, obj2.getPkAttribute());
     }
+
+    @Test
+    @Ignore("Insert will fail")
+    public void testInsertDelete() {
+        MeaningfulPk pkObj = context.newObject(MeaningfulPk.class);
+        pkObj.setPk("123");
+        context.commitChanges();
+
+        context.deleteObject(pkObj);
+        MeaningfulPk pkObj2 = context.newObject(MeaningfulPk.class);
+        pkObj2.setPk("123");
+        context.commitChanges();
+    }
 }
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesIT.java
index fb8f7a5..c3f2bed 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesIT.java
@@ -20,10 +20,14 @@
 package org.apache.cayenne.access;
 
 import org.apache.cayenne.Cayenne;
+import org.apache.cayenne.ObjectContext;
 import org.apache.cayenne.PersistenceState;
+import org.apache.cayenne.configuration.server.ServerRuntime;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.query.EJBQLQuery;
+import org.apache.cayenne.query.ObjectSelect;
+import org.apache.cayenne.query.SelectById;
 import org.apache.cayenne.query.SelectQuery;
 import org.apache.cayenne.reflect.PersistentDescriptor;
 import org.apache.cayenne.test.jdbc.DBHelper;
@@ -51,6 +55,9 @@ import static org.junit.Assert.assertTrue;
 public class DataContextFlattenedAttributesIT extends ServerCase {
 
     @Inject
+    private ServerRuntime runtime;
+
+    @Inject
     private DataContext context;
 
     @Inject
@@ -109,6 +116,21 @@ public class DataContextFlattenedAttributesIT extends ServerCase {
     }
 
     @Test
+    public void testSelect() throws Exception {
+        createTestDataSet();
+
+        CompoundPainting result = ObjectSelect
+                .query(CompoundPainting.class)
+                .orderBy(CompoundPainting.PAINTING_ID_PK_PROPERTY.asc())
+                .selectFirst(context);
+
+        assertNotNull(result);
+
+        result.setArtistName("new A");
+        context.commitChanges();
+    }
+
+    @Test
     public void testSelectCompound1() throws Exception {
         createTestDataSet();
         SelectQuery<CompoundPainting> query = SelectQuery.query(CompoundPainting.class);
@@ -377,4 +399,48 @@ public class DataContextFlattenedAttributesIT extends ServerCase {
 
         context.commitChanges();
     }
+
+    @Test
+    public void testUpdateDifferentContext() {
+        Object id;
+        {
+            // insert
+            ObjectContext context1 = runtime.newContext();
+            CompoundPainting o1 = context1.newObject(CompoundPainting.class);
+            o1.setArtistName("A1");
+            o1.setEstimatedPrice(new BigDecimal(1d));
+            o1.setGalleryName("G1");
+            o1.setPaintingTitle("P1");
+            o1.setTextReview("T1");
+
+            context1.commitChanges();
+            id = o1.getObjectId().getIdSnapshot().get(CompoundPainting.PAINTING_ID_PK_COLUMN);
+        }
+
+        {
+            // read and update
+            ObjectContext context2 = runtime.newContext();
+            CompoundPainting o2 = SelectById.query(CompoundPainting.class, id).selectFirst(context2);
+
+            o2.setArtistName("AX1");
+            o2.setEstimatedPrice(new BigDecimal(2d));
+            o2.setGalleryName("XG1");
+            o2.setPaintingTitle("PX1");
+            o2.setTextReview("TX1");
+
+            context2.commitChanges();
+        }
+
+        {
+            // read and check
+            ObjectContext context3 = runtime.newContext();
+            CompoundPainting o3 = SelectById.query(CompoundPainting.class, id).selectFirst(context3);
+
+            assertEquals("AX1", o3.getArtistName());
+            assertEquals("2.00", o3.getEstimatedPrice().toPlainString());
+            assertEquals("XG1", o3.getGalleryName());
+            assertEquals("PX1", o3.getPaintingTitle());
+            assertEquals("TX1", o3.getTextReview());
+        }
+    }
 }
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DefaultDataRowStoreFactoryIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DefaultDataRowStoreFactoryIT.java
index b95aeac..cd849d9 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DefaultDataRowStoreFactoryIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DefaultDataRowStoreFactoryIT.java
@@ -19,6 +19,10 @@
 
 package org.apache.cayenne.access;
 
+import org.apache.cayenne.access.flush.DataDomainFlushActionFactory;
+import org.apache.cayenne.access.flush.operation.DbRowOpSorter;
+import org.apache.cayenne.access.flush.DefaultDataDomainFlushActionFactory;
+import org.apache.cayenne.access.flush.operation.DefaultDbRowOpSorter;
 import org.apache.cayenne.configuration.DefaultRuntimeProperties;
 import org.apache.cayenne.configuration.RuntimeProperties;
 import org.apache.cayenne.configuration.server.ServerModule;
@@ -100,6 +104,8 @@ public class DefaultDataRowStoreFactoryIT extends ServerCase {
             binder.bind(RuntimeProperties.class).to(DefaultRuntimeProperties.class);
             binder.bind(EventBridge.class).toProvider(MockEventBridgeProvider.class);
             binder.bind(DataRowStoreFactory.class).to(DefaultDataRowStoreFactory.class);
+            binder.bind(DataDomainFlushActionFactory.class).to(DefaultDataDomainFlushActionFactory.class);
+            binder.bind(DbRowOpSorter.class).to(DefaultDbRowOpSorter.class);
             ServerModule.contributeProperties(binder);
         };
 
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java
index c8d2077..b79989b 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java
@@ -94,7 +94,7 @@ public class VerticalInheritanceIT extends ServerCase {
 		sub1.getObjectContext().commitChanges();
 
 		assertEquals(1, ivRootTable.getRowCount());
-		assertEquals(1, ivSub1Table.getRowCount());
+		assertEquals(0, ivSub1Table.getRowCount());
 
 		Object[] data = ivRootTable.select();
 		assertEquals(3, data.length);
@@ -103,11 +103,6 @@ public class VerticalInheritanceIT extends ServerCase {
 		assertEquals("XyZX", data[1]);
 		assertEquals("IvSub1", data[2]);
 
-		Object[] subdata = ivSub1Table.select();
-		assertEquals(2, subdata.length);
-		assertEquals(data[0], subdata[0]);
-		assertNull(subdata[1]);
-
 		ivSub1Table.deleteAll();
 		ivRootTable.deleteAll();
 
@@ -123,7 +118,7 @@ public class VerticalInheritanceIT extends ServerCase {
 		assertEquals("XyZXY", data[1]);
 		assertEquals("IvSub1", data[2]);
 
-		subdata = ivSub1Table.select();
+		Object[] subdata = ivSub1Table.select();
 		assertEquals(2, subdata.length);
 		assertEquals(data[0], subdata[0]);
 		assertEquals("BdE2", subdata[1]);
@@ -143,7 +138,7 @@ public class VerticalInheritanceIT extends ServerCase {
 		sub2.getObjectContext().commitChanges();
 
 		assertEquals(1, ivRootTable.getRowCount());
-		assertEquals(1, ivSub2Table.getRowCount());
+		assertEquals(0, ivSub2Table.getRowCount());
 
 		Object[] data = ivRootTable.select();
 		assertEquals(3, data.length);
@@ -152,12 +147,6 @@ public class VerticalInheritanceIT extends ServerCase {
 		assertEquals("XyZX", data[1]);
 		assertEquals("IvSub2", data[2]);
 
-		Object[] subdata = ivSub2Table.select();
-		assertEquals(3, subdata.length);
-		assertEquals(data[0], subdata[0]);
-		assertNull(subdata[1]);
-		assertNull(subdata[2]);
-
 		ivSub2Table.deleteAll();
 		ivRootTable.deleteAll();
 
@@ -174,7 +163,7 @@ public class VerticalInheritanceIT extends ServerCase {
 		assertEquals("XyZXY", data[1]);
 		assertEquals("IvSub2", data[2]);
 
-		subdata = ivSub2Table.select();
+		Object[] subdata = ivSub2Table.select();
 		assertEquals(3, subdata.length);
 		assertEquals(data[0], subdata[0]);
 		assertEquals("BdE2", subdata[1]);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataContextFactoryTest.java b/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataContextFactoryTest.java
index d92ca62..62ac624 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataContextFactoryTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataContextFactoryTest.java
@@ -24,6 +24,11 @@ import org.apache.cayenne.access.DataRowStoreFactory;
 import org.apache.cayenne.access.DefaultDataRowStoreFactory;
 import org.apache.cayenne.access.DefaultObjectMapRetainStrategy;
 import org.apache.cayenne.access.ObjectMapRetainStrategy;
+import org.apache.cayenne.access.flush.DataDomainFlushActionFactory;
+import org.apache.cayenne.access.flush.operation.DbRowOpSorter;
+import org.apache.cayenne.access.flush.DefaultDataDomainFlushActionFactory;
+import org.apache.cayenne.access.flush.operation.DefaultDbRowOpSorter;
+import org.apache.cayenne.ashwood.AshwoodEntitySorter;
 import org.apache.cayenne.cache.MapQueryCache;
 import org.apache.cayenne.cache.QueryCache;
 import org.apache.cayenne.configuration.DefaultObjectStoreFactory;
@@ -39,6 +44,7 @@ import org.apache.cayenne.event.MockEventManager;
 import org.apache.cayenne.event.NoopEventBridgeProvider;
 import org.apache.cayenne.log.JdbcEventLogger;
 import org.apache.cayenne.log.Slf4jJdbcEventLogger;
+import org.apache.cayenne.map.EntitySorter;
 import org.apache.cayenne.tx.DefaultTransactionFactory;
 import org.apache.cayenne.tx.DefaultTransactionManager;
 import org.apache.cayenne.tx.TransactionFactory;
@@ -74,6 +80,9 @@ public class DataContextFactoryTest {
             binder.bind(DataRowStoreFactory.class).to(DefaultDataRowStoreFactory.class);
             binder.bind(EventBridge.class).toProvider(NoopEventBridgeProvider.class);
             binder.bind(DataRowStoreFactory.class).to(DefaultDataRowStoreFactory.class);
+            binder.bind(DataDomainFlushActionFactory.class).to(DefaultDataDomainFlushActionFactory.class);
+            binder.bind(DbRowOpSorter.class).to(DefaultDbRowOpSorter.class);
+            binder.bind(EntitySorter.class).to(AshwoodEntitySorter.class);
         };
 
         Injector injector = DIBootstrap.createInjector(testModule);
@@ -110,6 +119,9 @@ public class DataContextFactoryTest {
             binder.bind(TransactionManager.class).to(DefaultTransactionManager.class);
             binder.bind(EventBridge.class).toProvider(NoopEventBridgeProvider.class);
             binder.bind(DataRowStoreFactory.class).to(DefaultDataRowStoreFactory.class);
+            binder.bind(DataDomainFlushActionFactory.class).to(DefaultDataDomainFlushActionFactory.class);
+            binder.bind(DbRowOpSorter.class).to(DefaultDbRowOpSorter.class);
+            binder.bind(EntitySorter.class).to(AshwoodEntitySorter.class);
         };
 
         Injector injector = DIBootstrap.createInjector(testModule);
diff --git a/cayenne-server/src/test/resources/inheritance-vertical.map.xml b/cayenne-server/src/test/resources/inheritance-vertical.map.xml
index 4af9df1..25b772a 100644
--- a/cayenne-server/src/test/resources/inheritance-vertical.map.xml
+++ b/cayenne-server/src/test/resources/inheritance-vertical.map.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
 	 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	 xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap http://cayenne.apache.org/schema/10/modelMap.xsd"
+	 xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap https://cayenne.apache.org/schema/10/modelMap.xsd"
 	 project-version="10">
 	<property name="defaultPackage" value="org.apache.cayenne.testdo.inheritance_vertical"/>
 	<db-entity name="IV1_ROOT">
@@ -117,7 +117,7 @@
 		<obj-attribute name="attr1" type="java.lang.String" db-attribute-path="impl.ATTR1"/>
 		<obj-attribute name="attr2" type="java.lang.String" db-attribute-path="impl.ATTR2"/>
 	</obj-entity>
-	<obj-entity name="IvImplWithLock" superEntityName="IvBaseWithLock" className="org.apache.cayenne.testdo.inheritance_vertical.IvImplWithLock">
+	<obj-entity name="IvImplWithLock" superEntityName="IvBaseWithLock" className="org.apache.cayenne.testdo.inheritance_vertical.IvImplWithLock" lock-type="optimistic">
 		<qualifier><![CDATA[type = "I"]]></qualifier>
 		<obj-attribute name="attr1" type="java.lang.String" db-attribute-path="impl.ATTR1"/>
 	</obj-entity>
diff --git a/cayenne-server/src/test/resources/testmap.map.xml b/cayenne-server/src/test/resources/testmap.map.xml
index 68539b6..442ce65 100644
--- a/cayenne-server/src/test/resources/testmap.map.xml
+++ b/cayenne-server/src/test/resources/testmap.map.xml
@@ -158,7 +158,7 @@
 	<obj-entity name="SubPainting" className="org.apache.cayenne.testdo.testmap.SubPainting" dbEntityName="PAINTING">
 		<obj-attribute name="paintingTitle" type="java.lang.String" db-attribute-path="PAINTING_TITLE"/>
 	</obj-entity>
-	<db-relationship name="artistGroupArray" source="ARTGROUP" target="ARTIST_GROUP" toMany="true">
+	<db-relationship name="artistGroupArray" source="ARTGROUP" target="ARTIST_GROUP" toDependentPK="true" toMany="true">
 		<db-attribute-pair source="GROUP_ID" target="GROUP_ID"/>
 	</db-relationship>
 	<db-relationship name="toChildGroups" source="ARTGROUP" target="ARTGROUP" toMany="true">
@@ -170,7 +170,7 @@
 	<db-relationship name="artistExhibitArray" source="ARTIST" target="ARTIST_EXHIBIT" toDependentPK="true" toMany="true">
 		<db-attribute-pair source="ARTIST_ID" target="ARTIST_ID"/>
 	</db-relationship>
-	<db-relationship name="artistGroupArray" source="ARTIST" target="ARTIST_GROUP" toMany="true">
+	<db-relationship name="artistGroupArray" source="ARTIST" target="ARTIST_GROUP" toDependentPK="true" toMany="true">
 		<db-attribute-pair source="ARTIST_ID" target="ARTIST_ID"/>
 	</db-relationship>
 	<db-relationship name="paintingArray" source="ARTIST" target="PAINTING" toMany="true">