diff --git a/src/main/java/META-INF/persistence.xml b/src/main/java/META-INF/persistence.xml index 077d0e17dc..424abfcb82 100644 --- a/src/main/java/META-INF/persistence.xml +++ b/src/main/java/META-INF/persistence.xml @@ -9,14 +9,20 @@ <!-- A JPA Persistence Unit --> <persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL"> + <provider>org.hibernate.ejb.HibernatePersistence</provider> - <class>se.su.dsv.scipro.data.dataobjects.Username</class> + + <!-- JPA entities must be registered here --> + <class>se.su.dsv.scipro.data.dataobjects.Username</class> <class>se.su.dsv.scipro.data.dataobjects.User</class> <class>se.su.dsv.scipro.data.dataobjects.LazyDeletableDomainObject</class> <class>se.su.dsv.scipro.data.dataobjects.Event</class> <class>se.su.dsv.scipro.data.dataobjects.DomainObject</class> - - <!-- JPA entities must be registered here --> + <class>se.su.dsv.scipro.data.dataobjects.Student</class> + <class>se.su.dsv.scipro.data.dataobjects.Admin</class> + <class>se.su.dsv.scipro.data.dataobjects.SysAdmin</class> + <class>se.su.dsv.scipro.data.dataobjects.Employee</class> + <class>se.su.dsv.scipro.data.dataobjects.Role</class> <properties> @@ -27,6 +33,9 @@ <property name="hibernate.cache.use_second_level_cache" value="true" /> <property name="hibernate.generate_statistics" value="false" /> + <!-- DEVELOPMENT VARIABLE, REMOVE FOR PRODUCTION USE --> + <property name="hibernate.hbm2ddl.auto" value="update" /> + <!-- Local mysql test database --> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"></property> @@ -41,17 +50,22 @@ <!-- A JPA Persistence Unit used for tests --> <persistence-unit name="testPersistenceUnit" transaction-type="RESOURCE_LOCAL"> + <provider>org.hibernate.ejb.HibernatePersistence</provider> + <!-- This list of persisted Entitys IS NOT updated by eclipes JPA facet, if some tests are failing, then copy paste exact list from the above persistence unit --> - <provider>org.hibernate.ejb.HibernatePersistence</provider> + <!-- JPA entities must be registered here --> <class>se.su.dsv.scipro.data.dataobjects.Username</class> <class>se.su.dsv.scipro.data.dataobjects.User</class> <class>se.su.dsv.scipro.data.dataobjects.LazyDeletableDomainObject</class> <class>se.su.dsv.scipro.data.dataobjects.Event</class> <class>se.su.dsv.scipro.data.dataobjects.DomainObject</class> - - <!-- JPA entities must be registered here --> + <class>se.su.dsv.scipro.data.dataobjects.Student</class> + <class>se.su.dsv.scipro.data.dataobjects.Admin</class> + <class>se.su.dsv.scipro.data.dataobjects.SysAdmin</class> + <class>se.su.dsv.scipro.data.dataobjects.Employee</class> + <class>se.su.dsv.scipro.data.dataobjects.Role</class> <properties> @@ -66,7 +80,17 @@ <property name="hibernate.hbm2ddl.auto" value="create" /> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"></property> <property name="hibernate.connection.url" value="jdbc:hsqldb:mem:test"></property> - <property name="hibernate.show_sql" value="true" /> + <property name="hibernate.show_sql" value="true" /> + + <!-- + <property name="hibernate.hbm2ddl.auto" value="create" /> + <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> + <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"></property> + <property name="hibernate.connection.url" value="jdbc:mysql://localhost/scipro"></property> + <property name="hibernate.connection.username" value="root"></property> + <property name="hibernate.connection.password" value="martin"></property> + <property name="hibernate.c3p0.idle_test_period" value="3600"></property> + --> </properties> </persistence-unit> diff --git a/src/main/resources/applicationContext.xml b/src/main/resources/applicationContext.xml index 5c0bf76c56..fdef8a5b0e 100644 --- a/src/main/resources/applicationContext.xml +++ b/src/main/resources/applicationContext.xml @@ -29,6 +29,10 @@ <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> + <bean id="roleDao" class="se.su.dsv.scipro.data.dao.jpa.RoleDaoJPAImp"> + <property name="entityManagerFactory" ref="entityManagerFactory" /> + </bean> + <bean class="se.su.dsv.scipro.DataInitialiser" init-method="dataInit"> <property name="eventDao" ref="eventDao"></property> </bean> diff --git a/src/test/java/se/su/dsv/scipro/dao/jpa/TestRoleDaoJPA-context.xml b/src/test/java/se/su/dsv/scipro/dao/jpa/TestRoleDaoJPA-context.xml new file mode 100644 index 0000000000..e893e8851f --- /dev/null +++ b/src/test/java/se/su/dsv/scipro/dao/jpa/TestRoleDaoJPA-context.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" + default-autowire="byName"> + + <bean id="entityManagerFactory" + class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> + <property name="persistenceUnitName" value="testPersistenceUnit" /> + </bean> + + <!-- + enable the configuration of transactional behavior based on + annotations + --> + <tx:annotation-driven transaction-manager="transactionManager" /> + + <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> + <property name="entityManagerFactory" ref="entityManagerFactory" /> + </bean> + + + <bean id="userDao" class="se.su.dsv.scipro.data.dao.jpa.UserDaoJPAImp"> + <property name="entityManagerFactory" ref="entityManagerFactory" /> + </bean> + <bean id="roleDao" class="se.su.dsv.scipro.data.dao.jpa.RoleDaoJPAImp"> + <property name="entityManagerFactory" ref="entityManagerFactory" /> + </bean> + + + +</beans> diff --git a/src/test/java/se/su/dsv/scipro/dao/jpa/TestRoleDaoJPA.java b/src/test/java/se/su/dsv/scipro/dao/jpa/TestRoleDaoJPA.java new file mode 100644 index 0000000000..f1c840d459 --- /dev/null +++ b/src/test/java/se/su/dsv/scipro/dao/jpa/TestRoleDaoJPA.java @@ -0,0 +1,147 @@ +package se.su.dsv.scipro.dao.jpa; + + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +import se.su.dsv.scipro.data.dao.interfaces.RoleDao; +import se.su.dsv.scipro.data.dao.interfaces.UserDao; +import se.su.dsv.scipro.data.dataobjects.Admin; +import se.su.dsv.scipro.data.dataobjects.Student; +import se.su.dsv.scipro.data.dataobjects.*; + +/** + * + * @author Martin Peters - mpeters@dsv.su.se + * + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +public class TestRoleDaoJPA { + + @Autowired + private UserDao userDao; + @Autowired + private RoleDao roleDao; + + protected User user; + + protected User deletedUser; + + @Before + public void startTransaction() + { + user = new User(); + user.setEmailAddress("test@dsv.su.se"); + user.setIdentifier(new Long(666)); + user.setFirstName("Test"); + user.setLastName("Person"); + user = userDao.save(user); + + deletedUser = new User(); + deletedUser.setEmailAddress("testdeleted@dsv.su.se"); + deletedUser.setIdentifier(new Long(777)); + deletedUser.setFirstName("Test"); + deletedUser.setLastName("Person"); + deletedUser.setDeleted(true); + deletedUser = userDao.save(deletedUser); + + } + + + /** + * Test method for {@link se.su.dsv.scipro.data.dao.jpa.RoleDaoJPAImp#isAdmin(User)}. + */ + @Test + @Transactional + @Rollback + public void testAdmin() { + + Admin a = new Admin(); + a.setUser(user); + Assert.assertFalse(roleDao.isAdmin(user)); + if(!roleDao.isAdmin(user)) + roleDao.save(a); + + Assert.assertTrue(roleDao.isAdmin(user)); + } + + /** + * Test method for {@link se.su.dsv.scipro.data.dao.jpa.RoleDaoJPAImp#isSysadmin(User)}. + */ + @Test + @Transactional + @Rollback + public void testSysAdmin() { + + SysAdmin a = new SysAdmin(); + a.setUser(user); + Assert.assertFalse(roleDao.isSysadmin(user)); + if(!roleDao.isSysadmin(user)) + roleDao.save(a); + + Assert.assertTrue(roleDao.isSysadmin(user)); + } + + /** + * Test method for {@link se.su.dsv.scipro.data.dao.jpa.RoleDaoJPAImp#isSysadmin(User)}. + */ + @Test + @Transactional + @Rollback + public void testEmployee() { + + Employee e = new Employee(); + e.setUser(user); + Assert.assertFalse(roleDao.isEmployee(user)); + if(!roleDao.isEmployee(user)) + roleDao.save(e); + + Assert.assertTrue(roleDao.isEmployee(user)); + } + + /** + * Test method for {@link se.su.dsv.scipro.data.dao.jpa.RoleDaoJPAImp#isExternal(User)}. + */ + @Test + @Transactional + @Rollback + public void testExternal() { + //Not yet implemented + Assert.assertFalse(roleDao.isExternal(user)); + + } + + /** + * Test method for {@link se.su.dsv.scipro.data.dao.jpa.RoleDaoJPAImp#isAdmin(User)}. + */ + @Test + @Transactional + @Rollback + public void testAdminLazyDeleted() { + + Admin a = new Admin(); + a.setUser(user); + Assert.assertFalse(roleDao.isAdmin(user)); + if(!roleDao.isAdmin(user)) + a = (Admin) roleDao.save(a); + + Assert.assertTrue(roleDao.isAdmin(user)); + + roleDao.lazyDelete(a); + + Assert.assertFalse(roleDao.isAdmin(user)); + } + + +} diff --git a/src/test/java/se/su/dsv/scipro/dao/jpa/TestUserDaoJPA-context.xml b/src/test/java/se/su/dsv/scipro/dao/jpa/TestUserDaoJPA-context.xml index 85cae8b053..eb326445b1 100644 --- a/src/test/java/se/su/dsv/scipro/dao/jpa/TestUserDaoJPA-context.xml +++ b/src/test/java/se/su/dsv/scipro/dao/jpa/TestUserDaoJPA-context.xml @@ -24,6 +24,6 @@ <bean id="userDao" class="se.su.dsv.scipro.data.dao.jpa.UserDaoJPAImp"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> - + </beans> diff --git a/src/test/java/se/su/dsv/scipro/wicket/TestWicketPages.java b/src/test/java/se/su/dsv/scipro/wicket/TestWicketPages.java index b302c39ef2..5bdc7b2e5b 100644 --- a/src/test/java/se/su/dsv/scipro/wicket/TestWicketPages.java +++ b/src/test/java/se/su/dsv/scipro/wicket/TestWicketPages.java @@ -10,6 +10,7 @@ import org.mockito.Mockito; import se.su.dsv.scipro.HomePage; import se.su.dsv.scipro.SciProApplication; import se.su.dsv.scipro.data.dao.interfaces.EventDao; +import se.su.dsv.scipro.data.dao.interfaces.RoleDao; import se.su.dsv.scipro.data.dao.interfaces.UserDao; import se.su.dsv.scipro.loginlogout.pages.LoginPage; import se.su.dsv.scipro.pages.EventPage; @@ -29,9 +30,11 @@ public class TestWicketPages { EventDao eventDao = Mockito.mock(EventDao.class); UserDao userDao = Mockito.mock(UserDao.class); + RoleDao roleDao = Mockito.mock(RoleDao.class); acm.putBean("eventDao", eventDao); acm.putBean("userDao", userDao); + acm.putBean("roleDao", roleDao); tester = new WicketTester(new SciProApplication(){ /* (non-Javadoc)