db-torque-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From tfisc...@apache.org
Subject svn commit: r1414363 [2/2] - in /db/torque/torque4/trunk: torque-templates/src/main/java/org/apache/torque/templates/ torque-templates/src/main/java/org/apache/torque/templates/transformer/om/ torque-templates/src/main/resources/org/apache/torque/templ...
Date Tue, 27 Nov 2012 20:02:37 GMT
Added: db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/generated/peer/SetAndSaveTest.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/generated/peer/SetAndSaveTest.java?rev=1414363&view=auto
==============================================================================
--- db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/generated/peer/SetAndSaveTest.java
(added)
+++ db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/generated/peer/SetAndSaveTest.java
Tue Nov 27 20:02:32 2012
@@ -0,0 +1,499 @@
+package org.apache.torque.generated.peer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.torque.BaseDatabaseTestCase;
+import org.apache.torque.ForeignKeySchemaData;
+import org.apache.torque.test.dbobject.CompIntegerVarcharFk;
+import org.apache.torque.test.dbobject.CompIntegerVarcharPk;
+import org.apache.torque.test.dbobject.CompPkContainsFk;
+import org.apache.torque.test.dbobject.CompPkOtherFk;
+import org.apache.torque.test.dbobject.NonPkOIntegerFk;
+import org.apache.torque.test.dbobject.NullableOIntegerFk;
+import org.apache.torque.test.dbobject.OIntegerPk;
+import org.apache.torque.test.peer.CompIntegerVarcharPkPeer;
+import org.apache.torque.test.peer.OIntegerPkPeer;
+
+/**
+ * Tests the setAndSave method for different constellations.
+ *
+ * @version $Id$
+ */
+public class SetAndSaveTest extends BaseDatabaseTestCase
+{
+    /**
+     * Tests whether the setAndSave method works
+     * where the referencing object has a non-composite primary key
+     * and the foreign key is not composite
+     * and the foreign key references the primary key of the referenced object.
+     *
+     * @throws Exception if the test fails
+     */
+    public void testSetAndSavePkIntegerForeignKey() throws Exception
+    {
+        ForeignKeySchemaData.clearTablesInDatabase();
+        ForeignKeySchemaData testData
+                = ForeignKeySchemaData.getDefaultTestData();
+        testData.save();
+
+        OIntegerPk oIntegerPk = testData.getOIntegerPkList().get(2);
+        List<NullableOIntegerFk> fkList = new ArrayList<NullableOIntegerFk>();
+        // object already associated to this object
+        fkList.add(testData.getNullableOIntegerFkList().get(1));
+        // object already associated to another object
+        fkList.add(testData.getNullableOIntegerFkList().get(0));
+        // object not associated yet
+        fkList.add(testData.getNullableOIntegerFkList().get(3));
+        // new object
+        NullableOIntegerFk newNullableOIntegerFk = new NullableOIntegerFk();
+        newNullableOIntegerFk.setName("newNullableOIntegerFk");
+        fkList.add(newNullableOIntegerFk);
+
+        OIntegerPkPeer.setAndSaveNullableOIntegerFks(
+                oIntegerPk,
+                fkList);
+
+        List<NullableOIntegerFk> cachedFks
+                = oIntegerPk.getNullableOIntegerFks();
+        assertEquals(4, cachedFks.size());
+        assertEquals(
+                testData.getNullableOIntegerFkList().get(1).getId(),
+                cachedFks.get(0).getId());
+        assertEquals(
+                oIntegerPk.getId(),
+                cachedFks.get(0).getFk());
+        assertEquals(
+                testData.getNullableOIntegerFkList().get(1).getName(),
+                cachedFks.get(0).getName());
+        assertEquals(
+                testData.getNullableOIntegerFkList().get(0).getId(),
+                cachedFks.get(1).getId());
+        assertEquals(
+                oIntegerPk.getId(),
+                cachedFks.get(1).getFk());
+        assertEquals(
+                testData.getNullableOIntegerFkList().get(0).getName(),
+                cachedFks.get(1).getName());
+        assertEquals(
+                testData.getNullableOIntegerFkList().get(3).getId(),
+                cachedFks.get(2).getId());
+        assertEquals(
+                oIntegerPk.getId(),
+                cachedFks.get(2).getFk());
+        assertEquals(
+                testData.getNullableOIntegerFkList().get(3).getName(),
+                cachedFks.get(2).getName());
+        assertEquals(
+                newNullableOIntegerFk.getId(),
+                cachedFks.get(3).getId());
+        assertEquals(
+                oIntegerPk.getId(),
+                cachedFks.get(3).getFk());
+        assertEquals(
+                newNullableOIntegerFk.getName(),
+                cachedFks.get(3).getName());
+
+        // check database
+        ForeignKeySchemaData.assertNullableOIntegerFksInDatabaseEquals(
+                cachedFks);
+    }
+
+    /**
+     * Tests whether the setAndSave method works
+     * where the referencing object has a non-composite primary key
+     * and the foreign key is not composite
+     * and the foreign key references not the primary key of the referenced
+     * object.
+     *
+     * @throws Exception if the test fails
+     */
+    public void testSetAndSaveNonpkIntegerForeignKey() throws Exception
+    {
+        ForeignKeySchemaData.clearTablesInDatabase();
+        ForeignKeySchemaData testData
+                = ForeignKeySchemaData.getDefaultTestData();
+        testData.save();
+
+        OIntegerPk oIntegerPk = testData.getOIntegerPkList().get(0);
+        List<NonPkOIntegerFk> fkList = new ArrayList<NonPkOIntegerFk>();
+        // object already associated to this object
+        fkList.add(testData.getNonPkOIntegerFkList().get(1));
+        // object already associated to another object
+        fkList.add(testData.getNonPkOIntegerFkList().get(2));
+        // object not associated yet
+        fkList.add(testData.getNonPkOIntegerFkList().get(3));
+        // new object
+        NonPkOIntegerFk newNonPkOIntegerFk = new NonPkOIntegerFk();
+        newNonPkOIntegerFk.setName("newNonPkOIntegerFk");
+        fkList.add(newNonPkOIntegerFk);
+
+        OIntegerPkPeer.setAndSaveNonPkOIntegerFks(
+                oIntegerPk,
+                fkList);
+
+        List<NonPkOIntegerFk> cachedFks
+                = oIntegerPk.getNonPkOIntegerFks();
+        assertEquals(4, cachedFks.size());
+        assertEquals(
+                testData.getNonPkOIntegerFkList().get(1).getId(),
+                cachedFks.get(0).getId());
+        assertEquals(
+                oIntegerPk.getIntegerColumn(),
+                cachedFks.get(0).getFk());
+        assertEquals(
+                testData.getNonPkOIntegerFkList().get(1).getName(),
+                cachedFks.get(0).getName());
+        assertEquals(
+                testData.getNonPkOIntegerFkList().get(2).getId(),
+                cachedFks.get(1).getId());
+        assertEquals(
+                oIntegerPk.getIntegerColumn(),
+                cachedFks.get(1).getFk());
+        assertEquals(
+                testData.getNonPkOIntegerFkList().get(2).getName(),
+                cachedFks.get(1).getName());
+        assertEquals(
+                testData.getNonPkOIntegerFkList().get(3).getId(),
+                cachedFks.get(2).getId());
+        assertEquals(
+                oIntegerPk.getIntegerColumn(),
+                cachedFks.get(2).getFk());
+        assertEquals(
+                testData.getNonPkOIntegerFkList().get(3).getName(),
+                cachedFks.get(2).getName());
+        assertEquals(
+                newNonPkOIntegerFk.getId(),
+                cachedFks.get(3).getId());
+        assertEquals(
+                oIntegerPk.getIntegerColumn(),
+                cachedFks.get(3).getFk());
+        assertEquals(
+                newNonPkOIntegerFk.getName(),
+                cachedFks.get(3).getName());
+
+        // check database
+        ForeignKeySchemaData.assertNonPkOIntegerFksInDatabaseEquals(
+                cachedFks);
+    }
+
+    /**
+     * Tests whether the setAndSave method works
+     * where the referencing object has a non-composite primary key
+     * and the foreign key is composite
+     * and the foreign key references the primary key of the referenced object.
+     *
+     * @throws Exception if the test fails
+     */
+    public void testSetAndSaveCompositePkIntegerForeignKey() throws Exception
+    {
+        ForeignKeySchemaData.clearTablesInDatabase();
+        ForeignKeySchemaData testData
+                = ForeignKeySchemaData.getDefaultTestData();
+        testData.save();
+
+        CompIntegerVarcharPk compIntegerVarcharPk
+                = testData.getCompositeIntegerVarcharPkList().get(2);
+        List<CompIntegerVarcharFk> fkList
+                = new ArrayList<CompIntegerVarcharFk>();
+        // object already associated to this object
+        fkList.add(testData.getCompositeIntegerVarcharFkList().get(1));
+        // object already associated to another object
+        fkList.add(testData.getCompositeIntegerVarcharFkList().get(0));
+        // object not associated yet
+        fkList.add(testData.getCompositeIntegerVarcharFkList().get(3));
+        // new object
+        CompIntegerVarcharFk newCompIntegerVarcharFk
+                = new CompIntegerVarcharFk();
+        newCompIntegerVarcharFk.setName("newCompositeIntegerVarcharFk");
+        fkList.add(newCompIntegerVarcharFk);
+
+        CompIntegerVarcharPkPeer.setAndSaveCompIntegerVarcharFks(
+                    compIntegerVarcharPk,
+                    fkList);
+
+        List<CompIntegerVarcharFk> cachedFks
+                = compIntegerVarcharPk.getCompIntegerVarcharFks();
+        assertEquals(4, cachedFks.size());
+        assertEquals(
+                testData.getCompositeIntegerVarcharFkList().get(1).getId(),
+                cachedFks.get(0).getId());
+        assertEquals(
+                compIntegerVarcharPk.getId1(),
+                cachedFks.get(0).getFk1());
+        assertEquals(
+                compIntegerVarcharPk.getId2(),
+                cachedFks.get(0).getFk2());
+        assertEquals(
+                testData.getCompositeIntegerVarcharFkList().get(1).getName(),
+                cachedFks.get(0).getName());
+        assertEquals(
+                testData.getCompositeIntegerVarcharFkList().get(0).getId(),
+                cachedFks.get(1).getId());
+        assertEquals(
+                compIntegerVarcharPk.getId1(),
+                cachedFks.get(1).getFk1());
+        assertEquals(
+                compIntegerVarcharPk.getId2(),
+                cachedFks.get(1).getFk2());
+        assertEquals(
+                testData.getCompositeIntegerVarcharFkList().get(0).getName(),
+                cachedFks.get(1).getName());
+        assertEquals(
+                testData.getCompositeIntegerVarcharFkList().get(3).getId(),
+                cachedFks.get(2).getId());
+        assertEquals(
+                compIntegerVarcharPk.getId1(),
+                cachedFks.get(2).getFk1());
+        assertEquals(
+                compIntegerVarcharPk.getId2(),
+                cachedFks.get(2).getFk2());
+        assertEquals(
+                testData.getCompositeIntegerVarcharFkList().get(3).getName(),
+                cachedFks.get(2).getName());
+        assertEquals(
+                newCompIntegerVarcharFk.getId(),
+                cachedFks.get(3).getId());
+        assertEquals(
+                compIntegerVarcharPk.getId1(),
+                cachedFks.get(3).getFk1());
+        assertEquals(
+                compIntegerVarcharPk.getId2(),
+                cachedFks.get(3).getFk2());
+        assertEquals(
+                newCompIntegerVarcharFk.getName(),
+                cachedFks.get(3).getName());
+
+        // check database
+        ForeignKeySchemaData.assertCompositeIntegerVarcharFksInDatabaseEquals(
+                cachedFks);
+    }
+
+    /**
+     * Tests whether the setAndSave method works
+     * where the referencing object has a composite primary key
+     * and the foreign key is not composite and not part of the primary key
+     * and the foreign key references the primary key of the referenced object.
+     *
+     * @throws Exception if the test fails
+     */
+    public void testSetAndSaveCompositePkOtherFk() throws Exception
+    {
+        ForeignKeySchemaData.clearTablesInDatabase();
+        ForeignKeySchemaData testData
+                = ForeignKeySchemaData.getDefaultTestData();
+        testData.save();
+
+        OIntegerPk oIntegerPk = testData.getOIntegerPkList().get(0);
+        List<CompPkOtherFk> fkList = new ArrayList<CompPkOtherFk>();
+        // object already associated to this object
+        fkList.add(testData.getCompositePkOtherFkList().get(0));
+        // object already associated to another object
+        fkList.add(testData.getCompositePkOtherFkList().get(2));
+        // new object
+        CompPkOtherFk newCompPkOtherFk = new CompPkOtherFk();
+        newCompPkOtherFk.setName("newCompPkOtherFk");
+        newCompPkOtherFk.setId1(42);
+        newCompPkOtherFk.setId2("new");
+        fkList.add(newCompPkOtherFk);
+
+        OIntegerPkPeer.setAndSaveCompPkOtherFks(
+                    oIntegerPk,
+                    fkList);
+
+        List<CompPkOtherFk> cachedFks = oIntegerPk.getCompPkOtherFks();
+        assertEquals(3, cachedFks.size());
+        assertEquals(
+                testData.getCompositePkOtherFkList().get(0).getId1(),
+                cachedFks.get(0).getId1());
+        assertEquals(
+                testData.getCompositePkOtherFkList().get(0).getId2(),
+                cachedFks.get(0).getId2());
+        assertEquals(
+                oIntegerPk.getId(),
+                cachedFks.get(0).getFk());
+        assertEquals(
+                testData.getCompositePkOtherFkList().get(0).getName(),
+                cachedFks.get(0).getName());
+        assertEquals(
+                testData.getCompositePkOtherFkList().get(2).getId1(),
+                cachedFks.get(1).getId1());
+        assertEquals(
+                testData.getCompositePkOtherFkList().get(2).getId2(),
+                cachedFks.get(1).getId2());
+        assertEquals(
+                oIntegerPk.getId(),
+                cachedFks.get(1).getFk());
+        assertEquals(
+                testData.getCompositePkOtherFkList().get(2).getName(),
+                cachedFks.get(1).getName());
+        assertEquals(
+                newCompPkOtherFk.getId1(),
+                cachedFks.get(2).getId1());
+        assertEquals(
+                newCompPkOtherFk.getId2(),
+                cachedFks.get(2).getId2());
+        assertEquals(
+                oIntegerPk.getId(),
+                cachedFks.get(1).getFk());
+        assertEquals(
+                newCompPkOtherFk.getName(),
+                cachedFks.get(2).getName());
+
+        // check database
+        ForeignKeySchemaData.assertCompositePkOtherFksInDatabaseEquals(
+                cachedFks);
+    }
+
+    /**
+     * Tests whether the setAndSave method works
+     * where the referencing object has a composite primary key
+     * and the foreign key is not composite and part of the primary key
+     * and the foreign key references the primary key of the referenced object.
+     *
+     * Note that in this case re-attaching a saved object to another object
+     * will not work because torque will not update a primary key.
+     *
+     * @throws Exception if the test fails
+     */
+    public void testSetAndSaveCompositePkContainsFk() throws Exception
+    {
+        ForeignKeySchemaData.clearTablesInDatabase();
+        ForeignKeySchemaData testData
+                = ForeignKeySchemaData.getDefaultTestData();
+        testData.save();
+
+        OIntegerPk oIntegerPk = testData.getOIntegerPkList().get(0);
+        List<CompPkContainsFk> fkList = new ArrayList<CompPkContainsFk>();
+        // object already associated to this object
+        fkList.add(testData.getCompositePkContainsFkList().get(0));
+        // new object
+        CompPkContainsFk newCompPkContainsFk = new CompPkContainsFk();
+        newCompPkContainsFk.setName("newCompPkContainsFk");
+        newCompPkContainsFk.setId2("new");
+        fkList.add(newCompPkContainsFk);
+
+        OIntegerPkPeer.setAndSaveCompPkContainsFks(
+                    oIntegerPk,
+                    fkList);
+
+        List<CompPkContainsFk> cachedFks = oIntegerPk.getCompPkContainsFks();
+        assertEquals(2, cachedFks.size());
+        assertEquals(
+                oIntegerPk.getId(),
+                cachedFks.get(0).getId1());
+        assertEquals(
+                testData.getCompositePkContainsFkList().get(0).getId2(),
+                cachedFks.get(0).getId2());
+        assertEquals(
+                testData.getCompositePkContainsFkList().get(0).getName(),
+                cachedFks.get(0).getName());
+        assertEquals(
+                oIntegerPk.getId(),
+                cachedFks.get(1).getId1());
+        assertEquals(
+                newCompPkContainsFk.getId2(),
+                cachedFks.get(1).getId2());
+        assertEquals(
+                newCompPkContainsFk.getName(),
+                cachedFks.get(1).getName());
+
+        // check database
+        List<CompPkContainsFk> expectedInDb
+                = new ArrayList<CompPkContainsFk>(cachedFks);
+        expectedInDb.add(testData.getCompositePkContainsFkList().get(2));
+        ForeignKeySchemaData.assertCompositePkContainsFksInDatabaseEquals(
+                expectedInDb);
+    }
+
+    /**
+     * Tests that the setAndSave method saves an object which was already
+     * associated to the referenced object but which value differs
+     * from the database value.
+     *
+     * @throws Exception if the test fails
+     */
+    public void testSetAndSaveModifiedReferencingObject() throws Exception
+    {
+        ForeignKeySchemaData.clearTablesInDatabase();
+        ForeignKeySchemaData testData
+                = ForeignKeySchemaData.getDefaultTestData();
+        testData.save();
+
+        OIntegerPk oIntegerPk = testData.getOIntegerPkList().get(2);
+        List<NullableOIntegerFk> fkList = new ArrayList<NullableOIntegerFk>();
+        // object already associated to this object
+        NullableOIntegerFk alreadyAssociated
+                = testData.getNullableOIntegerFkList().get(1);
+        alreadyAssociated.setName("modified");
+        alreadyAssociated.setModified(false); // saving must work without the modified flag
+        fkList.add(alreadyAssociated);
+
+        OIntegerPkPeer.setAndSaveNullableOIntegerFks(
+                oIntegerPk,
+                fkList);
+
+        List<NullableOIntegerFk> cachedFks
+                = oIntegerPk.getNullableOIntegerFks();
+        assertEquals(1, cachedFks.size());
+        assertEquals(
+                testData.getNullableOIntegerFkList().get(1).getId(),
+                cachedFks.get(0).getId());
+        assertEquals(
+                oIntegerPk.getId(),
+                cachedFks.get(0).getFk());
+        assertEquals(
+                testData.getNullableOIntegerFkList().get(1).getName(),
+                cachedFks.get(0).getName());
+
+        // check database
+        ForeignKeySchemaData.assertNullableOIntegerFksInDatabaseEquals(
+                cachedFks);
+    }
+
+    /**
+     * Tests that the referenced object is NOT saved by the setAndSave method.
+     *
+     * @throws Exception if the test fails
+     */
+    public void testSetAndSaveModifiedReferencedObject() throws Exception
+    {
+        ForeignKeySchemaData.clearTablesInDatabase();
+        ForeignKeySchemaData testData
+                = ForeignKeySchemaData.getDefaultTestData();
+        testData.save();
+
+        OIntegerPk oIntegerPk = testData.getOIntegerPkList().get(2);
+        oIntegerPk.setName("modified");
+        List<NullableOIntegerFk> fkList = new ArrayList<NullableOIntegerFk>();
+        fkList.add(testData.getNullableOIntegerFkList().get(1));
+
+        OIntegerPkPeer.setAndSaveNullableOIntegerFks(
+                oIntegerPk,
+                fkList);
+
+        assertTrue(oIntegerPk.isModified());
+        OIntegerPk oIntegerPkFromDb
+                = OIntegerPkPeer.retrieveByPK(oIntegerPk.getId());
+        assertEquals("oIntegerPk3", oIntegerPkFromDb.getName());
+    }
+}

Propchange: db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/generated/peer/SetAndSaveTest.java
------------------------------------------------------------------------------
    svn:keywords = Id



---------------------------------------------------------------------
To unsubscribe, e-mail: torque-dev-unsubscribe@db.apache.org
For additional commands, e-mail: torque-dev-help@db.apache.org


Mime
View raw message