/** * *************************************************************************** * Copyright (c) 2010 Qcadoo Limited * Project: Qcadoo Framework * Version: 1.4 * * This file is part of Qcadoo. * * Qcadoo is free software; you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published * by the Free Software Foundation; either version 3 of the License, * or (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *************************************************************************** */ package com.qcadoo.plugin.internal.dao; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.BDDMockito.given; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import java.util.Set; import org.hibernate.Criteria; import org.hibernate.SessionFactory; import org.hibernate.classic.Session; import org.hibernate.criterion.Criterion; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.aspectj.AnnotationTransactionAspect; import com.google.common.collect.Lists; import com.qcadoo.model.beans.qcadooPlugin.QcadooPluginPlugin; import com.qcadoo.plugin.api.Plugin; import com.qcadoo.plugin.api.PluginState; import com.qcadoo.plugin.api.Version; import com.qcadoo.plugin.internal.api.InternalPlugin; public class PluginDaoTest { private DefaultPluginDao pluginDao; private final SessionFactory sessionFactory = mock(SessionFactory.class); private final QcadooPluginPlugin plugin1 = new QcadooPluginPlugin(); private final QcadooPluginPlugin plugin2 = new QcadooPluginPlugin(); private final Plugin plugin11 = mock(InternalPlugin.class); private final Session session = mock(Session.class); private final Criteria criteria = mock(Criteria.class); // private ClassPathXmlApplicationContext applicationContext; private TransactionStatus txStatus; private PlatformTransactionManager txManager; @Before public void init() { txStatus = mock(TransactionStatus.class); given(txStatus.isRollbackOnly()).willReturn(false); txManager = mock(PlatformTransactionManager.class); given(txManager.getTransaction((TransactionDefinition) Mockito.anyObject())).willReturn(txStatus); AnnotationTransactionAspect txAspect = AnnotationTransactionAspect.aspectOf(); txAspect.setTransactionManager(txManager); plugin1.setIdentifier("plugin1"); plugin2.setIdentifier("plugin2"); given(sessionFactory.getCurrentSession()).willReturn(session); given(plugin11.getIdentifier()).willReturn("identifier1"); given(session.createCriteria(QcadooPluginPlugin.class)).willReturn(criteria); given(criteria.add(any(Criterion.class))).willReturn(criteria); pluginDao = new DefaultPluginDao(); pluginDao.setSessionFactory(sessionFactory); } @Test public void shouldSavePersistentPlugin() throws Exception { // given // when pluginDao.save(plugin1); // then verify(session).save(plugin1); } @Test public void shouldSaveNotPersistentExistingPlugin() throws Exception { // given given(criteria.uniqueResult()).willReturn(plugin1); given(plugin11.getState()).willReturn(PluginState.ENABLED); given(plugin11.getVersion()).willReturn(new Version("0.0.0")); // when pluginDao.save(plugin11); // then assertEquals(plugin1.getState(), PluginState.ENABLED.toString()); assertEquals(plugin1.getVersion(), "0.0.0"); verify(session).save(plugin1); } @Test public void shouldSaveNotPersistentPlugin() throws Exception { // given given(plugin11.getState()).willReturn(PluginState.ENABLED); given(plugin11.getVersion()).willReturn(new Version("0.0.0")); // when pluginDao.save(plugin11); // then verify(session, never()).save(plugin1); verify(session).save(any(QcadooPluginPlugin.class)); } @Test public void shouldDeletePersistentPlugin() throws Exception { // given // when pluginDao.delete(plugin1); // then verify(session).delete(plugin1); } @Test public void shouldDeleteNotPersistentPlugin() throws Exception { // given given(criteria.uniqueResult()).willReturn(plugin1); // when pluginDao.delete(plugin11); // then verify(session).delete(plugin1); } @Test public void shouldListPlugin() throws Exception { // given given(criteria.list()).willReturn(Lists.newArrayList(plugin1, plugin2)); // when Set<QcadooPluginPlugin> plugins = pluginDao.list(); // then assertEquals(2, plugins.size()); assertTrue(plugins.contains(plugin1)); assertTrue(plugins.contains(plugin2)); } }