You are viewing a plain text version of this content. The canonical link for it is here.
Posted to torque-dev@db.apache.org by tf...@apache.org on 2012/03/02 05:16:41 UTC

svn commit: r1296046 - in /db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque: BaseDatabaseTestCase.java DataTest.java generated/dataobject/SaveTest.java

Author: tfischer
Date: Fri Mar  2 04:16:41 2012
New Revision: 1296046

URL: http://svn.apache.org/viewvc?rev=1296046&view=rev
Log:
factored out tests for save

Added:
    db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/generated/dataobject/SaveTest.java
Modified:
    db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/BaseDatabaseTestCase.java
    db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/DataTest.java

Modified: db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/BaseDatabaseTestCase.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/BaseDatabaseTestCase.java?rev=1296046&r1=1296045&r2=1296046&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/BaseDatabaseTestCase.java (original)
+++ db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/BaseDatabaseTestCase.java Fri Mar  2 04:16:41 2012
@@ -34,6 +34,7 @@ import org.apache.torque.test.AuthorPeer
 import org.apache.torque.test.Book;
 import org.apache.torque.test.BookPeer;
 import org.apache.torque.util.BasePeer;
+import org.apache.torque.util.CountHelper;
 
 /**
  * Base functionality for Test cases which use standard database setup.
@@ -172,4 +173,64 @@ public abstract class BaseDatabaseTestCa
         }
         return result;
     }
+
+    /**
+     * Checks that the bookstore tables contain exactly the records
+     * in the passed list.
+     * The books in the authors are also checked.
+     *
+     * @param toVerify the list of authors to check.
+     *
+     * @throws TorqueException if reading data fails.
+     */
+    protected void verifyBookstore(List<Author> toVerify) throws TorqueException
+    {
+        int numBooks = 0;
+
+        for (Author author : toVerify)
+        {
+            Criteria criteria = new Criteria()
+                .where(AuthorPeer.NAME, author.getName())
+                .and(AuthorPeer.AUTHOR_ID, author.getAuthorId());
+            criteria.setSingleRecord(true);
+            List<Author> selectedAuthorList = AuthorPeer.doSelect(criteria);
+            assertEquals("Could not find author with id "
+                    + author.getAuthorId()
+                    + " and name "
+                    + author.getName(),
+                1,
+                selectedAuthorList.size());
+
+            numBooks += author.getBooks().size();
+
+            for (Book book : author.getBooks())
+            {
+                criteria = new Criteria()
+                    .where(BookPeer.TITLE, book.getTitle())
+                    .and(BookPeer.BOOK_ID, book.getBookId())
+                    .and(BookPeer.AUTHOR_ID, book.getAuthorId())
+                    .and(BookPeer.ISBN, book.getIsbn());
+                criteria.setSingleRecord(true);
+                List<Book> selectedBookList = BookPeer.doSelect(criteria);
+                assertEquals("Could not find book with id "
+                        + book.getBookId()
+                        + " title "
+                        + book.getTitle()
+                        + " ISBN "
+                        + book.getIsbn()
+                        + " authorId "
+                        + book.getAuthorId(),
+                    1,
+                    selectedBookList.size());
+            }
+        }
+
+        assertEquals(
+                toVerify.size(),
+                new CountHelper().count(AuthorPeer.getTableMap()));
+        assertEquals(
+                numBooks,
+                new CountHelper().count(BookPeer.getTableMap()));
+    }
+
 }

Modified: db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/DataTest.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/DataTest.java?rev=1296046&r1=1296045&r2=1296046&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/DataTest.java (original)
+++ db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/DataTest.java Fri Mar  2 04:16:41 2012
@@ -69,8 +69,6 @@ import org.apache.torque.test.Inheritanc
 import org.apache.torque.test.InheritanceClassnameTestPeer;
 import org.apache.torque.test.InheritanceTest;
 import org.apache.torque.test.InheritanceTestPeer;
-import org.apache.torque.test.IntegerObjectPk;
-import org.apache.torque.test.IntegerObjectPkPeer;
 import org.apache.torque.test.IntegerPk;
 import org.apache.torque.test.IntegerPkPeer;
 import org.apache.torque.test.LargePk;
@@ -127,59 +125,6 @@ public class DataTest extends BaseDataba
     }
 
     /**
-     * does some inserts.
-     * @throws Exception if the test fails
-     */
-    public void testInsertData() throws Exception
-    {
-        // remove old authors and books
-        cleanBookstore();
-
-        // insert books and authors
-        for (int i = 1; i <= 10; i++)
-        {
-            Author author = new Author();
-            author.setName("Author " + i);
-            author.save();
-            assertTrue("authorId should not be 0 after insert",
-                    author.getAuthorId() != 0);
-
-            for (int j = 1; j <= 10; j++)
-            {
-                Book book = new Book();
-                book.setAuthor(author);
-                book.setTitle("Book " + j + " - Author " + i);
-                book.setIsbn("unknown");
-                book.save();
-            }
-        }
-
-        // check a primitive id can be set manually
-        Author author = new Author();
-        author.setAuthorId(2000);
-        author.setName("Author 2000");
-        author.save();
-        assertEquals(2000, author.getAuthorId());
-        Criteria criteria = new Criteria();
-        criteria.add(AuthorPeer.AUTHOR_ID, 2000);
-        List<Author> authorList = AuthorPeer.doSelect(criteria);
-        assertEquals(1, authorList.size());
-
-        // check an object id can be set manually
-        criteria = new Criteria();
-        IntegerObjectPkPeer.doDelete(criteria);
-        IntegerObjectPk integerObjectPk = new IntegerObjectPk();
-        integerObjectPk.setId(3001);
-        integerObjectPk.save();
-        assertEquals(new Integer(3001), integerObjectPk.getId());
-        criteria = new Criteria();
-        criteria.add(IntegerObjectPkPeer.ID, 3001);
-        List<IntegerObjectPk> integerObjectPkList
-                = IntegerObjectPkPeer.doSelect(criteria);
-        assertEquals(1, integerObjectPkList.size());
-    }
-
-    /**
      * multiple pk test (TRQ12)
      * @throws Exception if the test fails
      */
@@ -211,6 +156,8 @@ public class DataTest extends BaseDataba
      */
     public void testLimitOffset() throws Exception
     {
+        cleanBookstore();
+        insertBookstoreData();
         Set<String> titleSet = new HashSet<String>();
         for (int j = 0; j < validTitles.length; j++)
         {
@@ -404,32 +351,6 @@ public class DataTest extends BaseDataba
         author.setName("Name");
         author.save();
 
-        Criteria criteria = new Criteria();
-        criteria.addAscendingOrderByColumn(AuthorPeer.NAME);
-
-        List<Author> authors = AuthorPeer.doSelect(criteria);
-        assertEquals("List should contain 2 authors", 2, authors.size());
-        assertEquals("First Author's name should be \"Name\"",
-                "Name",
-                authors.get(0).getName());
-        assertEquals("Second Author's name should be \"OtherName\"",
-                "OtherName",
-                authors.get(1).getName());
-
-        author.setName("NewName");
-        author.save();
-
-        criteria = new Criteria();
-        criteria.addAscendingOrderByColumn(AuthorPeer.NAME);
-
-        authors = AuthorPeer.doSelect(criteria);
-        assertEquals("List should contain 2 authors", 2, authors.size());
-        assertEquals("First Author's name should be \"NewName\"",
-                "NewName",
-                authors.get(0).getName());
-        assertEquals("Second Author's name should be \"OtherName\"",
-                "OtherName",
-                authors.get(1).getName());
 
         // Test doUpdate methods in Peer explicitly
         Connection connection = Transaction.begin(AuthorPeer.DATABASE_NAME);
@@ -437,10 +358,10 @@ public class DataTest extends BaseDataba
         AuthorPeer.doUpdate(author);
         Transaction.commit(connection);
 
-        criteria = new Criteria();
+        Criteria criteria = new Criteria();
         criteria.addAscendingOrderByColumn(AuthorPeer.NAME);
 
-        authors = AuthorPeer.doSelect(criteria);
+        List<Author> authors = AuthorPeer.doSelect(criteria);
         assertEquals("List should contain 2 authors", 2, authors.size());
         assertEquals("First Author's name should be \"NewName2\"",
                 "NewName2",
@@ -464,28 +385,12 @@ public class DataTest extends BaseDataba
                 "OtherName",
                 authors.get(1).getName());
 
-        // Test updates for objects without primary keys. As we do not store
-        // information which values were modified, we throw an Exception at
-        // the attempt.
-
         Nopk nopk = new Nopk();
         nopk.setName("name");
         nopk.save();
 
-        // check that save does not throw an error if nothing is modified
-        nopk.save();
-
-        nopk.setName("otherName");
-        try
-        {
-            nopk.save();
-            fail("A Torque exception should be thrown");
-        }
-        catch (TorqueException e)
-        {
-        }
-
-        // check the doPupdate Peer methods themselves
+        // check the doPupdate Peer methods throw exceptions on a modified
+        // object without primary keys
         try
         {
             NopkPeer.doUpdate(new Nopk());

Added: db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/generated/dataobject/SaveTest.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/generated/dataobject/SaveTest.java?rev=1296046&view=auto
==============================================================================
--- db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/generated/dataobject/SaveTest.java (added)
+++ db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/generated/dataobject/SaveTest.java Fri Mar  2 04:16:41 2012
@@ -0,0 +1,271 @@
+package org.apache.torque.generated.dataobject;
+
+/*
+ * 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.List;
+
+import org.apache.torque.BaseDatabaseTestCase;
+import org.apache.torque.TorqueException;
+import org.apache.torque.criteria.Criteria;
+import org.apache.torque.test.Author;
+import org.apache.torque.test.AuthorPeer;
+import org.apache.torque.test.Book;
+import org.apache.torque.test.IntegerObjectPk;
+import org.apache.torque.test.IntegerObjectPkPeer;
+import org.apache.torque.test.Nopk;
+import org.apache.torque.test.NopkPeer;
+import org.apache.torque.util.CountHelper;
+
+/**
+ * Tests whether the save methods work in tge db object classes.
+ *
+ * @version $Id: DataTest.java 1103512 2011-05-15 19:37:41Z tfischer $
+ */
+public class SaveTest extends BaseDatabaseTestCase
+{
+    /**
+     * Tests the save method for a simple object.
+     *
+     * @throws Exception if a database error occurs.
+     */
+    public void testInsert() throws Exception
+    {
+        // prepare
+        cleanBookstore();
+        List<Author> bookstoreContent = insertBookstoreData();
+        Author author = new Author();
+        author.setName("Author");
+
+        // execute
+        author.save();
+
+        // verify
+        assertNotNull(author.getAuthorId());
+        assertEquals("Author", author.getName());
+
+        bookstoreContent.add(author);
+        verifyBookstore(bookstoreContent);
+    }
+
+    /**
+     * Check that an id can be set manually.
+     */
+    public void testInsertWithManualId() throws Exception
+    {
+        // prepare
+        Criteria criteria = new Criteria();
+        IntegerObjectPkPeer.doDelete(criteria);
+
+        IntegerObjectPk integerObjectPk = new IntegerObjectPk();
+        integerObjectPk.setId(3001);
+
+        // execute
+        integerObjectPk.save();
+
+        // verify
+        assertEquals(new Integer(3001), integerObjectPk.getId());
+
+        criteria = new Criteria().where(IntegerObjectPkPeer.ID, 3001);
+        List<IntegerObjectPk> integerObjectPkList
+                = IntegerObjectPkPeer.doSelect(criteria);
+        assertEquals(1, integerObjectPkList.size());
+
+        assertEquals(
+                1,
+                new CountHelper().count(IntegerObjectPkPeer.getTableMap()));
+    }
+
+    /**
+     * Tests that an insert works for objects without primary key.
+     */
+    public void testInsertWithoutPk() throws TorqueException
+    {
+        // prepare
+        Criteria criteria = new Criteria();
+        NopkPeer.doDelete(criteria);
+
+        Nopk nopk = new Nopk();
+        nopk.setName("name");
+        nopk.save();
+
+        // execute
+        nopk.save();
+
+        // verify
+        assertEquals("name", nopk.getName());
+
+        criteria = new Criteria().where(NopkPeer.NAME, "name");
+        List<Nopk> nopkList = NopkPeer.doSelect(criteria);
+        assertEquals(1, nopkList.size());
+
+        assertEquals(1, new CountHelper().count(NopkPeer.getTableMap()));
+    }
+
+    /**
+     * Tests that save does not throw an exception if save
+     * is called on an object without pk which is already saved and
+     * nothing is modified.
+     */
+    public void testSaveWithoutPkNoModification() throws TorqueException
+    {
+        // prepare
+        Criteria criteria = new Criteria();
+        NopkPeer.doDelete(criteria);
+
+        Nopk nopk = new Nopk();
+        nopk.setName("name");
+        nopk.save();
+
+        // execute
+        nopk.save();
+
+        // verify
+        assertEquals("name", nopk.getName());
+
+        criteria = new Criteria().where(NopkPeer.NAME, "name");
+        List<Nopk> nopkList = NopkPeer.doSelect(criteria);
+        assertEquals(1, nopkList.size());
+
+        assertEquals(1, new CountHelper().count(NopkPeer.getTableMap()));
+    }
+
+    /**
+     * Tests that save fails if it is called on a modified object without pk
+     * which is already saved.
+     */
+    public void testSaveWithoutPkModification() throws TorqueException
+    {
+        // prepare
+        Criteria criteria = new Criteria();
+        NopkPeer.doDelete(criteria);
+
+        Nopk nopk = new Nopk();
+        nopk.setName("name");
+        nopk.save();
+
+        // execute
+        try
+        {
+            nopk.setName("otherName");
+            nopk.save();
+
+            //verify
+            fail("Exception expected");
+        }
+        catch (TorqueException e)
+        {
+            assertEquals(
+                    "doUpdate does not work for objects without primary key",
+                    e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the save method for a simple object.
+     *
+     * @throws Exception if a database error occurs.
+     */
+    public void testUpdate() throws Exception
+    {
+        // prepare
+        cleanBookstore();
+        List<Author> bookstoreContent = insertBookstoreData();
+        Author author = new Author();
+        author.setName("Author");
+        author.save();
+        author.setName("nameModified"); // modify after saving
+
+        // execute
+        author.save();
+
+        // verify
+        assertNotNull(author.getAuthorId());
+        assertEquals("nameModified", author.getName());
+        bookstoreContent.add(author);
+        verifyBookstore(bookstoreContent);
+    }
+
+    /**
+     * Tests that the save method propagates "down" for a foreign key,
+     * i.e. if save is called on an object which contains another
+     * referencing object, the referencing object must also be saved.
+     *
+     * @throws Exception if a database error occurs.
+     */
+    public void testInsertPropagationDown() throws Exception
+    {
+        // prepare
+        cleanBookstore();
+        List<Author> bookstoreContent = insertBookstoreData();
+        Author author = new Author();
+        author.setName("Author");
+        Book book = new Book();
+        author.addBook(book);
+        book.setTitle("Book title");
+        book.setIsbn("ISBN");
+
+        // execute
+        author.save();
+
+        // verify
+        assertNotNull(author.getAuthorId());
+        assertEquals("Author", author.getName());
+        assertNotNull(book.getBookId());
+        assertEquals("Book title", book.getTitle());
+        assertEquals("ISBN", book.getIsbn());
+
+        bookstoreContent.add(author);
+        verifyBookstore(bookstoreContent);
+    }
+
+    /**
+     * Tests that the save method does not propagate "up" for a foreign key,
+     * i.e. if save is called on an object referencing another object,
+     * the referenced object must not be saved.
+     *
+     * @throws Exception if a database error occurs.
+     */
+    public void testNoPropagationUp() throws Exception
+    {
+        // prepare
+        cleanBookstore();
+        Author author = new Author();
+        author.setName("Author");
+        author.save();
+        author.setName("nameModified"); // modify after saving
+
+        Book book = new Book();
+        author.addBook(book);
+        book.setTitle("Book title");
+        book.setIsbn("ISBN");
+
+        // execute
+        book.save();
+
+        // verify
+        // propagation would have been possible, reference is there
+        assertNotNull(book.getAuthor());
+
+        // Author in db should still have old name
+        Criteria criteria = new Criteria().where(AuthorPeer.NAME, "Author");
+        List<Author> authorList = AuthorPeer.doSelect(criteria);
+        assertEquals(1, authorList.size());
+    }
+}



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