org.unitils.orm.hibernate.HibernateModuleConfigurationInheritanceTest.java Source code

Java tutorial

Introduction

Here is the source code for org.unitils.orm.hibernate.HibernateModuleConfigurationInheritanceTest.java

Source

/*
 * Copyright 2008,  Unitils.org
 *
 * Licensed 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.
 */
package org.unitils.orm.hibernate;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;

import java.util.Properties;

import org.hibernate.cfg.Configuration;
import org.junit.Before;
import org.junit.Test;
import org.unitils.orm.hibernate.HibernateModule;
import org.unitils.orm.hibernate.annotation.HibernateSessionFactory;

/**
 * Test class for the loading of the configuration in a test class hierarchy for the HibernateModule
 *
 * @author Tim Ducheyne
 * @author Filip Neven
 */
public class HibernateModuleConfigurationInheritanceTest {

    HibernateModule hibernateModule;

    /**
     * Initializes the test fixture.
     */
    @Before
    public void setUp() throws Exception {
        hibernateModule = new HibernateModule();
        Properties properties = new Properties();
        properties.put(HibernateModule.PROPKEY_CONFIGURATION_CLASS_NAME, Configuration.class.getName());
        hibernateModule.init(properties);
    }

    /**
     * Tests loading of a configuration location specified on class-level.
     * Both super and sub class have annotations with values and custom create methods.
     */
    @Test
    public void testGetHibernateConfiguration_overriden() {
        HibernateTestCustomInit hibernateTest1 = new HibernateTestCustomInit();
        Configuration hibernateConfiguration = hibernateModule.getConfigurationObject(hibernateTest1);

        assertNotNull(hibernateConfiguration);
        assertEquals("org/unitils/orm/hibernate/hibernate-sub.cfg.xml", hibernateConfiguration.getProperty("name"));
        assertFalse(hibernateTest1.initMethod1Called);
        assertTrue(hibernateTest1.initMethod2Called);
    }

    /**
     * Tests loading of a configuration location specified on class-level.
     * Both super and sub class have annotations with values and but only super class has custom create method.
     */
    @Test
    public void testGetHibernateConfiguration_overridenNoCustomCreateInSubClass() {
        HibernateTestNoCustomCreate hibernateTest2 = new HibernateTestNoCustomCreate();
        Configuration hibernateConfiguration = hibernateModule.getConfigurationObject(hibernateTest2);

        assertNotNull(hibernateConfiguration);
        assertEquals("org/unitils/orm/hibernate/hibernate-sub.cfg.xml", hibernateConfiguration.getProperty("name"));
        assertFalse(hibernateTest2.initMethod1Called);
    }

    /**
     * Tests creating the application context. No context creation is done in the sub-class, the context of the super
     * class should be used.
     */
    @Test
    public void testGetHibernateConfiguration_onlyInSuperClass() {
        HibernateTestNoCreation1 hibernateTestNoCreation = new HibernateTestNoCreation1();
        Configuration hibernateConfiguration = hibernateModule.getConfigurationObject(hibernateTestNoCreation);

        assertNotNull(hibernateConfiguration);
        assertEquals("org/unitils/orm/hibernate/hibernate.cfg.xml", hibernateConfiguration.getProperty("name"));
        assertTrue(hibernateTestNoCreation.initMethod1Called);
    }

    /**
     * Test reusing a configuration of a super class.
     */
    @Test
    public void testGetHibernateConfiguration_twice() {
        Configuration hibernateConfiguration1 = hibernateModule
                .getConfigurationObject(new HibernateTestNoCreation1());
        Configuration hibernateConfiguration2 = hibernateModule
                .getConfigurationObject(new HibernateTestNoCreation2());

        assertNotNull(hibernateConfiguration1);
        assertEquals("org/unitils/orm/hibernate/hibernate.cfg.xml", hibernateConfiguration1.getProperty("name"));
        assertSame(hibernateConfiguration1, hibernateConfiguration2);
    }

    /**
     * Test Hibernate super-class.
     */
    @HibernateSessionFactory("org/unitils/orm/hibernate/hibernate.cfg.xml")
    public class HibernateTestSuper {

        protected boolean initMethod1Called = false;

        @HibernateSessionFactory
        protected void initMethod1(Configuration cfg) {
            initMethod1Called = true;
        }
    }

    /**
     * Test Hibernate sub-class with custom create.
     */
    @HibernateSessionFactory("org/unitils/orm/hibernate/hibernate-sub.cfg.xml")
    public class HibernateTestCustomInit extends HibernateTestSuper {

        protected boolean initMethod2Called = false;

        @HibernateSessionFactory
        protected void initMethod2(Configuration cfg) {
            initMethod2Called = true;
        }
    }

    /**
     * Test Hibernate sub-class without custom create.
     */
    @HibernateSessionFactory("org/unitils/orm/hibernate/hibernate-sub.cfg.xml")
    public class HibernateTestNoCustomCreate extends HibernateTestSuper {
    }

    /**
     * Test Hibernate sub-class without any context declaration.
     */
    private class HibernateTestNoCreation1 extends HibernateTestSuper {
    }

    /**
     * Test Hibernate sub-class without any context declaration.
     */
    private class HibernateTestNoCreation2 extends HibernateTestSuper {
    }

}