merge cate-development2 branch with trunk
[cdmlib.git] / cdmlib-persistence / src / test / java / eu / etaxonomy / cdm / persistence / dao / hibernate / common / CdmEntityDaoBaseTest.java
index 8eacab3ca1015a3daa857e709667c65fb42c702f..0f291877a3237eb76d1723ae15282d38f11687a2 100644 (file)
@@ -14,32 +14,49 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;\r
 import static org.junit.Assert.assertTrue;\r
 \r
+import java.util.ArrayList;\r
 import java.util.List;\r
 import java.util.UUID;\r
 \r
 import org.junit.Before;\r
 import org.junit.Test;\r
+import org.springframework.security.authentication.AuthenticationManager;\r
+import org.springframework.security.authentication.TestingAuthenticationToken;\r
+import org.springframework.security.core.Authentication;\r
+import org.springframework.security.core.context.SecurityContextHolder;\r
+import org.springframework.security.core.context.SecurityContextImpl;\r
 import org.unitils.dbunit.annotation.DataSet;\r
 import org.unitils.dbunit.annotation.ExpectedDataSet;\r
 import org.unitils.spring.annotation.SpringBeanByType;\r
 \r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;\r
+import eu.etaxonomy.cdm.model.common.User;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.cdm.persistence.dao.common.IUserDao;\r
 import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonDao;\r
-import eu.etaxonomy.cdm.test.integration.CdmIntegrationTest;\r
+import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
+import eu.etaxonomy.cdm.persistence.query.RandomOrder;\r
+import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;\r
 \r
 /**\r
  * @author a.mueller\r
  *\r
  */\r
-public class CdmEntityDaoBaseTest extends CdmIntegrationTest {\r
+public class CdmEntityDaoBaseTest extends CdmTransactionalIntegrationTest {\r
        \r
        private UUID uuid;\r
        private TaxonBase cdmBase;\r
        \r
        @SpringBeanByType\r
        private ITaxonDao cdmEntityDaoBase;\r
+       \r
+       @SpringBeanByType\r
+    private AuthenticationManager authenticationManager;\r
+       \r
+       @SpringBeanByType\r
+       private IUserDao userDao;\r
 \r
        /**\r
         * @throws java.lang.Exception\r
@@ -49,6 +66,18 @@ public class CdmEntityDaoBaseTest extends CdmIntegrationTest {
                uuid = UUID.fromString("8d77c380-c76a-11dd-ad8b-0800200c9a66");\r
                cdmBase = Taxon.NewInstance(null, null);\r
                cdmBase.setUuid(UUID.fromString("e463b270-c76b-11dd-ad8b-0800200c9a66"));\r
+               \r
+               // Clear the context prior to each test\r
+               SecurityContextHolder.clearContext();\r
+       }\r
+       \r
+       private void setAuthentication(User user) {\r
+               TestingAuthenticationToken token = new TestingAuthenticationToken(user, "password",  new GrantedAuthorityImpl[0]);\r
+           Authentication authentication = authenticationManager.authenticate(token);\r
+               \r
+           SecurityContextImpl secureContext = new SecurityContextImpl();\r
+           secureContext.setAuthentication(authentication);\r
+           SecurityContextHolder.setContext(secureContext);\r
        }\r
        \r
 /************ TESTS ********************************/\r
@@ -71,10 +100,37 @@ public class CdmEntityDaoBaseTest extends CdmIntegrationTest {
        @ExpectedDataSet\r
        public void testSaveOrUpdate() {\r
                TaxonBase cdmBase = cdmEntityDaoBase.findByUuid(uuid);\r
-               cdmBase.setUuid(UUID.fromString("61410dd0-c774-11dd-ad8b-0800200c9a66"));\r
+               cdmBase.setDoubtful(true);\r
                cdmEntityDaoBase.saveOrUpdate(cdmBase);\r
        }\r
        \r
+       /**\r
+        * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBase#saveOrUpdate(eu.etaxonomy.cdm.model.common.CdmBase)}.\r
+        */\r
+       @Test\r
+       @DataSet("CdmEntityDaoBaseTest.xml")\r
+       @ExpectedDataSet\r
+       public void testSaveOrUpdateWithAuthentication() {\r
+               User user = userDao.findByUuid(UUID.fromString("dbac0f20-07f2-11de-8c30-0800200c9a66"));\r
+               assert user != null : "User cannot be null";\r
+               setAuthentication(user);\r
+               TaxonBase cdmBase = cdmEntityDaoBase.findByUuid(uuid);\r
+               cdmBase.setDoubtful(true);\r
+               cdmEntityDaoBase.saveOrUpdate(cdmBase);\r
+       }       \r
+       \r
+       /**\r
+        * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBase#saveOrUpdate(eu.etaxonomy.cdm.model.common.CdmBase)}.\r
+        */\r
+       @Test\r
+       @DataSet("CdmEntityDaoBaseTest.xml")\r
+    @ExpectedDataSet\r
+       public void testSaveOrUpdateNewObjectWithAuthentication() {\r
+               User user = userDao.findByUuid(UUID.fromString("dbac0f20-07f2-11de-8c30-0800200c9a66"));\r
+               assert user != null : "User cannot be null";\r
+               setAuthentication(user);\r
+               cdmEntityDaoBase.saveOrUpdate(cdmBase);\r
+       }       \r
        /**\r
         * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBase#save(eu.etaxonomy.cdm.model.common.CdmBase)}.\r
         */\r
@@ -84,6 +140,19 @@ public class CdmEntityDaoBaseTest extends CdmIntegrationTest {
        public void testSave() throws Exception {\r
                cdmEntityDaoBase.save(cdmBase);\r
        }\r
+       \r
+       /**\r
+        * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBase#save(eu.etaxonomy.cdm.model.common.CdmBase)}.\r
+        */\r
+       @Test\r
+       @DataSet("CdmEntityDaoBaseTest.xml")\r
+       @ExpectedDataSet\r
+       public void testSaveWithAuthentication() throws Exception {\r
+               User user = userDao.findByUuid(UUID.fromString("dbac0f20-07f2-11de-8c30-0800200c9a66"));\r
+               assert user != null : "User cannot be null";\r
+               setAuthentication(user);\r
+               cdmEntityDaoBase.save(cdmBase);\r
+       }\r
 \r
        /**\r
         * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBase#update(eu.etaxonomy.cdm.model.common.CdmBase)}.\r
@@ -93,7 +162,20 @@ public class CdmEntityDaoBaseTest extends CdmIntegrationTest {
        @ExpectedDataSet\r
        public void testUpdate() {\r
                TaxonBase cdmBase = cdmEntityDaoBase.findByUuid(uuid);\r
-               cdmBase.setUuid(UUID.fromString("65bc7d70-c76c-11dd-ad8b-0800200c9a66"));\r
+               cdmBase.setDoubtful(true);\r
+               cdmEntityDaoBase.update(cdmBase);\r
+       }\r
+       \r
+       @Test\r
+       @DataSet("CdmEntityDaoBaseTest.xml")\r
+       @ExpectedDataSet\r
+       public void testUpdateWithAuthentication() {\r
+               User user = userDao.findByUuid(UUID.fromString("dbac0f20-07f2-11de-8c30-0800200c9a66"));\r
+               assert user != null : "User cannot be null";\r
+               \r
+               setAuthentication(user);\r
+               TaxonBase cdmBase = cdmEntityDaoBase.findByUuid(uuid);\r
+               cdmBase.setDoubtful(true);\r
                cdmEntityDaoBase.update(cdmBase);\r
        }\r
 \r
@@ -140,6 +222,19 @@ public class CdmEntityDaoBaseTest extends CdmIntegrationTest {
                assertEquals("list() should return a list with two entities in it",list.size(),2);\r
        }\r
        \r
+       /**\r
+        * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBase#list(int, int)}.\r
+        */\r
+       @Test\r
+       @DataSet("CdmEntityDaoBaseTest.xml")\r
+       public void testRandomOrder() {\r
+               List<OrderHint> orderHints = new ArrayList<OrderHint>();\r
+               orderHints.add(new RandomOrder());\r
+               List<TaxonBase> list = cdmEntityDaoBase.list(null,1000, 0,orderHints,null);\r
+               assertNotNull("list() should not return null",list);\r
+               assertEquals("list() should return a list with two entities in it",list.size(),2);\r
+       }\r
+       \r
        /**\r
         * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBase#delete(eu.etaxonomy.cdm.model.common.CdmBase)}.\r
         */\r
@@ -151,5 +246,4 @@ public class CdmEntityDaoBaseTest extends CdmIntegrationTest {
                assertNotNull(cdmBase);\r
                cdmEntityDaoBase.delete(cdmBase);\r
        }\r
-\r
 }\r