Package org.apache.torque.generated.dataobject

Source Code of org.apache.torque.generated.dataobject.SaveTest

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.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.torque.BaseDatabaseTestCase;
import org.apache.torque.ForeignKeySchemaData;
import org.apache.torque.TorqueException;
import org.apache.torque.adapter.MssqlAdapter;
import org.apache.torque.criteria.Criteria;
import org.apache.torque.test.dbobject.Author;
import org.apache.torque.test.dbobject.Book;
import org.apache.torque.test.dbobject.Nopk;
import org.apache.torque.test.dbobject.OIntegerPk;
import org.apache.torque.test.peer.AuthorPeer;
import org.apache.torque.test.peer.NopkPeer;
import org.apache.torque.test.peer.OIntegerPkPeer;
import org.apache.torque.util.CountHelper;

/**
* Tests whether the save methods work in the db object classes.
*
* @version $Id: SaveTest.java 1436782 2013-01-22 07:51:31Z tfischer $
*/
public class SaveTest extends BaseDatabaseTestCase
{
    private static Log log = LogFactory.getLog(SaveTest.class);

    /**
     * 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
    {
        if (defaultAdapter instanceof MssqlAdapter)
        {
            log.error("manual id insertion is not possible for MSSQL");
            return;
        }
        // prepare
        ForeignKeySchemaData.clearTablesInDatabase();

        OIntegerPk oIntegerPk = new OIntegerPk();
        oIntegerPk.setId(3001);

        // execute
        oIntegerPk.save();

        // verify
        assertEquals(new Integer(3001), oIntegerPk.getId());

        Criteria criteria = new Criteria().where(OIntegerPkPeer.ID, 3001);
        List<OIntegerPk> integerObjectPkList
                = OIntegerPkPeer.doSelect(criteria);
        assertEquals(1, integerObjectPkList.size());

        assertEquals(
                1,
                new CountHelper().count(OIntegerPkPeer.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());
    }
}
TOP

Related Classes of org.apache.torque.generated.dataobject.SaveTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.