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

Java tutorial

Introduction

Here is the source code for org.unitils.orm.hibernate.HibernateModuleConfigurationTest.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 org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import org.unitils.UnitilsJUnit4;
import org.unitils.core.ConfigurationLoader;
import org.unitils.core.UnitilsException;
import org.unitils.orm.hibernate.annotation.HibernateSessionFactory;

import java.util.List;
import java.util.Properties;

/**
 * Test class for the loading of the configuration in the HibernateModule
 *
 * @author Tim Ducheyne
 * @author Filip Neven
 */
public class HibernateModuleConfigurationTest extends UnitilsJUnit4 {

    /* Tested object */
    private HibernateModule hibernateModule;

    /**
     * Initializes the test fixture.
     */
    @Before
    public void setUp() throws Exception {
        Properties configuration = new ConfigurationLoader().loadConfiguration();
        hibernateModule = new HibernateModule();
        hibernateModule.init(configuration);
    }

    /**
     * Tests loading of a configuration location specified on class-level.
     */
    @Test
    public void testGetHibernateConfiguration_classLevel() {
        HibernateTestClassLevel hibernateTestClassLevel = new HibernateTestClassLevel();
        Configuration hibernateConfiguration = hibernateModule.getConfigurationObject(hibernateTestClassLevel);

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

    /**
     * Tests loading of a configuration annotation on class-level but no location. An exception should be raised.
     */
    @Test
    public void testGetHibernateConfiguration_classLevelNoLocation() {
        HibernateTestClassLevelNoLocation hibernateTestClassLevelNoLocation = new HibernateTestClassLevelNoLocation();
        try {
            hibernateModule.getConfigurationObject(hibernateTestClassLevelNoLocation);
            fail("Expected UnitilsException");
        } catch (UnitilsException e) {
            // expected
        }
    }

    /**
     * Tests loading of a configuration location specified on field-level.
     */
    @Test
    public void testGetHibernateConfiguration_fieldLevel() {
        HibernateTestFieldLevel hibernateTestFieldLevel = new HibernateTestFieldLevel();
        Configuration hibernateConfiguration = hibernateModule.getConfigurationObject(hibernateTestFieldLevel);

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

    /**
     * Tests loading of a configuration annotation on field-level but no location. An exception should be raised.
     */
    @Test
    public void testGetHibernateConfiguration_fieldLevelNoLocation() {
        HibernateTestFieldLevelNoLocation hibernateTestFieldLevelNoLocation = new HibernateTestFieldLevelNoLocation();
        try {
            hibernateModule.getConfigurationObject(hibernateTestFieldLevelNoLocation);
            fail("Expected UnitilsException");
        } catch (UnitilsException e) {
            // expected
        }
    }

    /**
     * Tests loading of a configuration location specified on field-level.
     */
    @Test
    public void testGetHibernateConfiguration_setterLevel() {
        HibernateTestSetterLevel hibernateTestSetterLevel = new HibernateTestSetterLevel();
        Configuration hibernateConfiguration = hibernateModule.getConfigurationObject(hibernateTestSetterLevel);

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

    /**
     * Tests loading of a configuration annotation on field-level but no location. An exception should be raised.
     */
    @Test
    public void testGetHibernateConfiguration_setterLevelNoLocation() {
        HibernateTestSetterLevelNoLocation hibernateTestSetterLevelNoLocation = new HibernateTestSetterLevelNoLocation();
        try {
            hibernateModule.getConfigurationObject(hibernateTestSetterLevelNoLocation);
            fail("Expected UnitilsException");
        } catch (UnitilsException e) {
            // expected
        }
    }

    /**
     * Tests for more than 1 annotation with values. An exception should have been raised.
     */
    @Test
    public void testGetApplicationContext_multipleAnnotationsWithValues() {
        HibernateTestMultipleAnnotationsWithValues hibernateTestMultipleAnnotationsWithValues = new HibernateTestMultipleAnnotationsWithValues();
        try {
            hibernateModule.getConfigurationObject(hibernateTestMultipleAnnotationsWithValues);
            fail("Expected UnitilsException");
        } catch (UnitilsException e) {
            // expected
        }
    }

    /**
     * Tests loading of a configuration using a custom create method with a wrong signature.
     */
    @Test
    public void testGetHibernateConfiguration_customCreateWrongSignature() {
        HibernateTestCustomCreateWrongSignature hibernateTestCustomCreateWrongSignature = new HibernateTestCustomCreateWrongSignature();
        try {
            hibernateModule.getConfigurationObject(hibernateTestCustomCreateWrongSignature);
            fail("Expected UnitilsException");
        } catch (UnitilsException e) {
            // expected
        }
    }

    /**
     * Tests calling a custom initialization.
     */
    @Test
    public void testGetHibernateConfiguration_customInitializationMethod() {
        HibernateTestCustomInitialization hibernateTestCustomInitialization = new HibernateTestCustomInitialization();
        hibernateModule.getConfigurationObject(hibernateTestCustomInitialization);

        assertTrue(hibernateTestCustomInitialization.initCalled);
    }

    /**
     * Tests loading of a configuration with a wrong location.
     */
    @Test
    public void testGetHibernateConfiguration_wrongLocation() {
        HibernateTestWrongLocation hibernateTestWrongLocation = new HibernateTestWrongLocation();
        try {
            hibernateModule.getConfigurationObject(hibernateTestWrongLocation);
            fail("Expected UnitilsException");
        } catch (UnitilsException e) {
            // expected
        }
    }

    /**
     * Test reusing a configuration for the same class.
     */
    @Test
    public void testGetHibernateConfiguration_twice() {
        Configuration hibernateConfiguration1 = hibernateModule
                .getConfigurationObject(new HibernateTestClassLevel());
        Configuration hibernateConfiguration2 = hibernateModule
                .getConfigurationObject(new HibernateTestClassLevel());

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

    /**
     * Class level configuration.
     */
    @HibernateSessionFactory("org/unitils/orm/hibernate/hibernate.cfg.xml")
    public class HibernateTestClassLevel {
    }

    /**
     * Class level configuration no location specified.
     */
    @HibernateSessionFactory
    public class HibernateTestClassLevelNoLocation {
    }

    /**
     * Field level configuration.
     */
    public class HibernateTestFieldLevel {

        @HibernateSessionFactory("org/unitils/orm/hibernate/hibernate.cfg.xml")
        protected SessionFactory field;
    }

    /**
     * Field level configuration no location specified.
     */
    public class HibernateTestFieldLevelNoLocation {

        @HibernateSessionFactory
        protected SessionFactory field;
    }

    /**
     * Setter level configuration.
     */
    public class HibernateTestSetterLevel {

        @HibernateSessionFactory("org/unitils/orm/hibernate/hibernate.cfg.xml")
        public void setField(SessionFactory sessionFactory) {
        }
    }

    /**
     * Setter level configuration no location specified.
     */
    public class HibernateTestSetterLevelNoLocation {

        @HibernateSessionFactory
        public void setField(SessionFactory sessionFactory) {
        }
    }

    /**
     * Test SpringTest class mixing multiple annotations.
     */
    @HibernateSessionFactory({ "1" })
    private class HibernateTestMultipleAnnotationsWithValues {

        @HibernateSessionFactory({ "2" })
        protected SessionFactory field1;

        @HibernateSessionFactory({ "3" })
        protected SessionFactory field2;
    }

    /**
     * Configuration with custom create with wrong signature.
     */
    public class HibernateTestCustomCreateWrongSignature {

        @HibernateSessionFactory
        public List<?> createMethod(String a) {
            return null;
        }
    }

    /**
     * Configuration with custom initialization with configuration argument.
     */
    @HibernateSessionFactory("org/unitils/orm/hibernate/hibernate.cfg.xml")
    public class HibernateTestCustomInitialization {

        public boolean initCalled = false;

        @HibernateSessionFactory
        public void initializationMethod(Configuration configuration) {
            initCalled = true;
        }
    }

    /**
     * Class level configuration a wrong location specified.
     */
    @HibernateSessionFactory("xxxxxxx")
    public class HibernateTestWrongLocation {
    }

}