package org.appfuse.persistence;

import org.apache.commons.logging.LogFactory;

import org.appfuse.model.Template;


public class TemplateDAOTest extends BaseDAOTestCase {
    
    private Template template = null;
    private TemplateDAO dao = null;

    protected void setUp() throws Exception {
        log = LogFactory.getLog(TemplateDAOTest.class);
        dao = (TemplateDAO) ctx.getBean("templateDAO");
    }

    protected void tearDown() throws Exception {
        dao = null;
    }
    
    public void testGetTemplateInvalid() throws Exception {
        try {
            template = dao.getTemplate(new Long(1000));
            fail("template '1000' found in database, failing test...");
        } catch (DAOException d) {
            if (log.isDebugEnabled()) {
                log.debug(d);
            }

            assertTrue(d != null);
        }
    }

    public void testGetTemplate() throws Exception {
        template = dao.getTemplate(new Long(1));
        assertTrue(template != null);
    }

    public void testSaveTemplate() throws Exception {
        template = dao.getTemplate(new Long(1));
        template.setName("My Cool Template");

        dao.saveTemplate(template);
        assertEquals(template.getName(), "My Cool Template");
    }
    
    public void testAddAndRemoveTemplate() throws Exception {
        template = new Template();
        template.setName("Test Template");
        template.setContent("Velocity $syntax here");

        dao.saveTemplate(template);
        assertTrue(template.getId() != null);
        assertTrue(template.getName() != null);
        
        dao.removeTemplate(template);

        try {
            template = dao.getTemplate(template.getId());
            fail("Expected 'ObjectNotFoundException' not thrown");
        } catch (DAOException d) {
            if (log.isDebugEnabled()) {
                log.debug(d);
            }

            assertTrue("Record not found exception thrown", d != null);
        }
    }

    public static void main(String[] args) {
        junit.textui.TestRunner.run(TemplateDAOTest.class);
    }
}