Package org.jtalks.jcommune.model.dao.hibernate

Source Code of org.jtalks.jcommune.model.dao.hibernate.PluginConfigurationHibernateDaoTest

/**
* Copyright (C) 2011  JTalks.org Team
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/
package org.jtalks.jcommune.model.dao.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.jtalks.common.service.exceptions.NotFoundException;
import org.jtalks.jcommune.model.entity.PersistedObjectsFactory;
import org.jtalks.jcommune.model.dao.PluginConfigurationDao;
import org.jtalks.jcommune.model.entity.PluginConfiguration;
import org.jtalks.jcommune.model.entity.PluginProperty;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import static org.testng.Assert.*;
import static org.unitils.reflectionassert.ReflectionAssert.assertReflectionEquals;

/**
* @author Anuar Nurmakanov
*/
@ContextConfiguration(locations = {"classpath:/org/jtalks/jcommune/model/entity/applicationContext-dao.xml"})
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional
public class PluginConfigurationHibernateDaoTest extends AbstractTransactionalTestNGSpringContextTests {
    @Autowired
    private SessionFactory sessionFactory;
    @Autowired
    private PluginConfigurationDao pluginConfigurationDao;
    private Session session;

    @BeforeMethod
    public void init() {
        this.session = sessionFactory.getCurrentSession();
        PersistedObjectsFactory.setSession(session);
    }

    /*===== Common methods =====*/

    @Test
    public void getShouldReturnPluginById() {

        session.clear();

        PluginConfiguration pluginConfiguration = PersistedObjectsFactory.getDefaultPluginConfiguration();

        PluginConfiguration foundPluginConfiguration = pluginConfigurationDao.get(pluginConfiguration.getId());

        assertNotNull(foundPluginConfiguration);
        assertReflectionEquals(foundPluginConfiguration, pluginConfiguration);
    }

    @Test
    public void getWithPassedIdOfNonExistingPluginShouldReturnNull() {
        PluginConfiguration nonExistPluginConfiguration = pluginConfigurationDao.get(-788888L);

        assertNull(nonExistPluginConfiguration, "PluginConfiguration doesn't exist, so get must return null");
    }

    @Test
    public void saveOrUpdateShouldUpdatePluginConfiguration() {
        String newPluginName = "Poulpe pluginConfiguration";
        PluginConfiguration pluginConfiguration = PersistedObjectsFactory.getDefaultPluginConfiguration();
        pluginConfiguration.setName(newPluginName);

        pluginConfigurationDao.saveOrUpdate(pluginConfiguration);
        session.flush();
        session.clear();
        PluginConfiguration updatedPluginConfiguration = (PluginConfiguration) session.get(PluginConfiguration.class, pluginConfiguration.getId());

        assertEquals(updatedPluginConfiguration.getName(), newPluginName, "After update pluginConfiguration properties must be updated.");
    }

    @Test
    public void saveOrUpdateShouldSaveNewPluginConfiguration() {
        PluginConfiguration newPluginConfiguration = new PluginConfiguration("New PluginConfiguration", true, Collections.<PluginProperty>emptyList());

        pluginConfigurationDao.saveOrUpdate(newPluginConfiguration);
        session.evict(newPluginConfiguration);
        PluginConfiguration savedPluginConfiguration = (PluginConfiguration) session.get(PluginConfiguration.class, newPluginConfiguration.getId());

        assertReflectionEquals(newPluginConfiguration, savedPluginConfiguration);
    }

    @Test
    public void saveOrUpdateShouldSavePluginConfigurationProperties() {
        PluginConfiguration pluginConfiguration = PersistedObjectsFactory.getDefaultPluginConfiguration();
        PluginProperty property = new PluginProperty("Property", PluginProperty.Type.BOOLEAN, "true");
        List<PluginProperty> properties = Arrays.asList(property);
        pluginConfiguration.setProperties(properties);

        pluginConfigurationDao.saveOrUpdate(pluginConfiguration);
        session.flush();
        session.evict(pluginConfiguration);
        PluginConfiguration updatedPluginConfiguration = (PluginConfiguration) session.get(PluginConfiguration.class, pluginConfiguration.getId());

        assertEquals(updatedPluginConfiguration.getProperties(), properties, "Plugin configuration properties should be saved.");
    }

    @Test(expectedExceptions = org.hibernate.exception.ConstraintViolationException.class)
    public void saveOrUpdateWithNullValuesShouldNotSavePlugin() {
        PluginConfiguration pluginConfiguration = PersistedObjectsFactory.getDefaultPluginConfiguration();

        pluginConfiguration.setName(null);
        pluginConfigurationDao.saveOrUpdate(pluginConfiguration);
        session.flush();
    }

    @Test
    public void getByNameShouldReturnOnePluginConfiguration() throws NotFoundException {
        PluginConfiguration pluginConfiguration = PersistedObjectsFactory.getDefaultPluginConfiguration();

        PluginConfiguration actual = pluginConfigurationDao.get(pluginConfiguration.getName());

        assertEquals(actual, pluginConfiguration);
    }

    @Test(expectedExceptions = NotFoundException.class)
    public void getShouldThrowIfDidNotFindPlugin() throws NotFoundException {
        pluginConfigurationDao.get("Some fake name");
    }

    @Test
    public void updatePropertiesShouldUpdatePassedProperties() {
        //GIVEN
        PluginProperty property = PersistedObjectsFactory.getDefaultPluginConfigurationProperty();
        String newPropertyName = "New property name";
        property.setName(newPropertyName);
        //WHEN
        pluginConfigurationDao.updateProperties(Arrays.asList(property));
        //THEN
        session.evict(property);
        PluginProperty updatedProperty = (PluginProperty) session.get(PluginProperty.class, property.getId());
        assertEquals(updatedProperty.getName(), newPropertyName, "Property should be updated");
    }
}
TOP

Related Classes of org.jtalks.jcommune.model.dao.hibernate.PluginConfigurationHibernateDaoTest

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.