package com.oreilly.jent.people;

/**
 * In general, you may use the code in this book in your programs and 
 * documentation. You do not need to contact us for permission unless 
 * you're reproducing a significant portion of the code. For example, 
 * writing a program that uses several chunks of code from this book does 
 * not require permission. Selling or distributing a CD-ROM of examples 
 * from O'Reilly books does require permission. Answering a question by 
 * citing this book and quoting example code does not require permission. 
 * Incorporating a significant amount of example code from this book into 
 * your product's documentation does require permission.
 * 
 * We appreciate, but do not require, attribution. An attribution usually 
 * includes the title, author, publisher, and ISBN. For example: 
 * 
 *   "Java Enterprise in a Nutshell, Third Edition, 
 *    by Jim Farley and William Crawford 
 *    with Prakash Malani, John G. Norman, and Justin Gehtland. 
 *    Copyright 2006 O'Reilly Media, Inc., 0-596-10142-2."
 *  
 *  If you feel your use of code examples falls outside fair use or the 
 *  permission given above, feel free to contact us at 
 *  permissions@oreilly.com.
 */

import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;

import junit.framework.TestCase;

public class TestPersonDAO extends TestCase {
    private static final String sDAOConfig = "/data/persondao.xml";
    private static final Logger sLog = 
        Logger.getLogger(TestPersonDAO.class.getName());

    public TestPersonDAO() {
        super();
    }

    /**
     * @param arg0
     */
    public TestPersonDAO(String arg0) {
        super(arg0);
    }
    
    protected void setUp() {
        sLog.info("Initializing PersonDAO singleton");
        PersonDAO.initSingleton(sDAOConfig);
    }
    
    protected void tearDown() {
        // Nothing to do here, PersonDAO singleton will be cleaned up
        // when the JVM exits.
    }

    public void testInit() {
        assertNotNull(PersonDAO.getInstance());
    }
    
    public void testBadSearch() {
        PersonDAO dao = PersonDAO.getInstance();
        Map params = new HashMap();
        // Pass in an empty parameter list, which should generate
        // an InvalidSearchException
        try {
            dao.findPeople(params);
            fail("Search with empty parameter list was allowed.");
        }
        catch (InvalidSearchException ise) {
            sLog.info("DAO correctly threw an InvalidSearchException");
        }
        catch (PersistenceException pe) {
            fail("Unexpected persistence exception encountered.");
        }
        
        // Pass an invalid parameter into the findPeople() method,
        // which should have the same result
        params.put("invalid-arg-name", "foobar");
        try {
            dao.findPeople(params);
            fail("Search with invalid parameter was allowed");
        }
        catch (InvalidSearchException ise) {
            sLog.info("DAO correctly threw an InvalidSearchException");
        }
        catch (PersistenceException pe) {
            fail("Unexpected persistence exception encountered.");
        }
    }
}
