- added abstract method createTestData() to CdmIntegrationalTest
[cdmlib.git] / cdmlib-services / src / test / java / eu / etaxonomy / cdm / api / service / SecurityTest.java
index 203db1e71d8b831dad04cc0e652b3cb3509c844f..d849c6764ea3b140e1b381641a3793f7e8adc6e5 100644 (file)
@@ -12,6 +12,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;\r
 import static org.junit.Assert.assertTrue;\r
 \r
+import java.io.FileNotFoundException;\r
 import java.util.Collection;\r
 import java.util.EnumSet;\r
 import java.util.HashSet;\r
@@ -41,6 +42,7 @@ import org.unitils.spring.annotation.SpringBean;
 import org.unitils.spring.annotation.SpringBeanByType;\r
 \r
 import sun.security.provider.PolicyParser.ParsingException;\r
+import eu.etaxonomy.cdm.api.service.DeleteResult.DeleteStatus;\r
 import eu.etaxonomy.cdm.api.service.exception.DataChangeNoRollbackException;\r
 import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;\r
 import eu.etaxonomy.cdm.database.PermissionDeniedException;\r
@@ -73,29 +75,9 @@ import eu.etaxonomy.cdm.persistence.query.MatchMode;
 @DataSet\r
 public class SecurityTest extends AbstractSecurityTestBase{\r
 \r
-    private static final UUID UUID_ACHERONTINII = UUID.fromString("928a0167-98cd-4555-bf72-52116d067625");\r
-\r
-    private static final UUID UUID_ACHERONTIA_STYX = UUID.fromString("7b8b5cb3-37ba-4dba-91ac-4c6ffd6ac331");\r
-\r
-    private static final UUID UUID_LACTUCA = UUID.fromString("b2b007a4-9c8c-43a1-8da4-20ed85464cf2");\r
-\r
-\r
-    private static final UUID ACHERONTIA_NODE_UUID = UUID.fromString("20c8f083-5870-4cbd-bf56-c5b2b98ab6a7");\r
-\r
-    private static final UUID ACHERONTIINI_NODE_UUID = UUID.fromString("cecfa77f-f26a-4476-9d87-a8d993cb55d9");\r
-\r
-    private static final UUID ACHERONTIA_LACHESIS_UUID = UUID.fromString("bc09aca6-06fd-4905-b1e7-cbf7cc65d783");\r
-\r
-    private static final UUID BOOK1_UUID = UUID.fromString("596b1325-be50-4b0a-9aa2-3ecd610215f2");\r
 \r
     private static final Logger logger = Logger.getLogger(SecurityTest.class);\r
 \r
-    /**\r
-     * The transaction manager to use\r
-     */\r
-    @SpringBeanByType\r
-    PlatformTransactionManager transactionManager;\r
-\r
     @SpringBeanByType\r
     private ITaxonService taxonService;\r
 \r
@@ -290,49 +272,83 @@ public class SecurityTest extends AbstractSecurityTestBase{
         assertEquals(newName, savedName);\r
     }\r
 \r
+\r
     @Test\r
-    public final void testUpateNameDeny() {\r
+    public final void testReuseNameAllow() {\r
 \r
         authentication = authenticationManager.authenticate(tokenForTaxonEditor);\r
         SecurityContext context = SecurityContextHolder.getContext();\r
         context.setAuthentication(authentication);\r
 \r
         TaxonBase taxon = taxonService.find(UUID_ACHERONTIA_STYX);\r
-        taxon.getName().setTitleCache("Acherontia thetis", true);\r
+        TaxonNameBase n_acherontia_thetis = taxon.getName();\r
+\r
+        Taxon newTaxon = Taxon.NewInstance(n_acherontia_thetis, ReferenceFactory.newGeneric());\r
         Exception exception = null;\r
         try {\r
-            UUID uuid = taxonService.saveOrUpdate(taxon);\r
+            UUID uuid = taxonService.save(newTaxon);\r
             commitAndStartNewTransaction(null);\r
         } catch (AccessDeniedException e){\r
-            logger.debug("Expected failure of evaluation.", e);\r
-            exception  = e;\r
+            logger.error("Unexpected failure of evaluation.", e);\r
+            exception = e;\r
         } catch (RuntimeException e){\r
+            logger.error("Unexpected failure of evaluation.", e);\r
             exception = findThrowableOfTypeIn(PermissionDeniedException.class, e);\r
-            logger.debug("Expected failure of evaluation.", e);\r
         } finally {\r
             // needed in case saveOrUpdate was interrupted by the RuntimeException\r
             // commitAndStartNewTransaction() would raise an UnexpectedRollbackException\r
             endTransaction();\r
             startNewTransaction();\r
         }\r
-        Assert.assertNotNull("must fail here!", exception);\r
+        Assert.assertNull("must not fail here!", exception);\r
     }\r
 \r
+    @Test\r
+    public final void testMakeTaxonNodeASynonymOfAnotherTaxonNodeAllow_1() {\r
+\r
+        authentication = authenticationManager.authenticate(tokenForTaxonEditor);\r
+        SecurityContext context = SecurityContextHolder.getContext();\r
+        context.setAuthentication(authentication);\r
+\r
+        Reference book = referenceService.load(BOOK1_UUID);\r
+\r
+        TaxonNode n_acherontia_styx = taxonNodeService.find(ACHERONTIA_STYX_NODE_UUID);\r
+        TaxonNode n_acherontia_lachersis = taxonNodeService.find(ACHERONTIA_LACHESIS_NODE_UUID);\r
+\r
+        Exception exception = null;\r
+        try {\r
+            taxonNodeService.makeTaxonNodeASynonymOfAnotherTaxonNode(n_acherontia_styx, n_acherontia_lachersis, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF(), book , "33");\r
+            commitAndStartNewTransaction(null);\r
+        } catch (AccessDeniedException e){\r
+            logger.error("Unexpected failure of evaluation.", e);\r
+            exception = e;\r
+        } catch (RuntimeException e){\r
+            logger.error("Unexpected failure of evaluation.", e);\r
+            exception = findThrowableOfTypeIn(PermissionDeniedException.class, e);\r
+        }finally {\r
+            // needed in case saveOrUpdate was interrupted by the RuntimeException\r
+            // commitAndStartNewTransaction() would raise an UnexpectedRollbackException\r
+            endTransaction();\r
+            startNewTransaction();\r
+        }\r
+        Assert.assertNull("must not fail here!", exception);\r
+    }\r
 \r
     @Test\r
-    public final void testReuseNameAllow() {\r
+    public final void testMakeTaxonNodeASynonymOfAnotherTaxonNodeAllow_2() {\r
 \r
         authentication = authenticationManager.authenticate(tokenForTaxonEditor);\r
         SecurityContext context = SecurityContextHolder.getContext();\r
         context.setAuthentication(authentication);\r
 \r
-        TaxonBase taxon = taxonService.find(UUID_ACHERONTIA_STYX);\r
-        TaxonNameBase n_acherontia_thetis = taxon.getName();\r
+        Reference book = referenceService.load(BOOK1_UUID);\r
+\r
+        TaxonNode n_acherontia_styx = taxonNodeService.find(ACHERONTIA_STYX_NODE_UUID);\r
+        TaxonNode n_acherontia_lachersis = taxonNodeService.find(ACHERONTIA_LACHESIS_NODE_UUID);\r
 \r
-        Taxon newTaxon = Taxon.NewInstance(n_acherontia_thetis, ReferenceFactory.newGeneric());\r
         Exception exception = null;\r
         try {\r
-            UUID uuid = taxonService.save(newTaxon);\r
+            taxonNodeService.makeTaxonNodeASynonymOfAnotherTaxonNode(n_acherontia_lachersis, n_acherontia_styx, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF(), book , "33");\r
             commitAndStartNewTransaction(null);\r
         } catch (AccessDeniedException e){\r
             logger.error("Unexpected failure of evaluation.", e);\r
@@ -340,7 +356,7 @@ public class SecurityTest extends AbstractSecurityTestBase{
         } catch (RuntimeException e){\r
             logger.error("Unexpected failure of evaluation.", e);\r
             exception = findThrowableOfTypeIn(PermissionDeniedException.class, e);\r
-        } finally {\r
+        }  finally {\r
             // needed in case saveOrUpdate was interrupted by the RuntimeException\r
             // commitAndStartNewTransaction() would raise an UnexpectedRollbackException\r
             endTransaction();\r
@@ -748,20 +764,12 @@ public class SecurityTest extends AbstractSecurityTestBase{
         RuntimeException securityException= null;\r
 \r
         TaxonBase<?> taxon = taxonService.load(UUID_LACTUCA);\r
-        try{\r
-            taxonService.delete(taxon);\r
-            commitAndStartNewTransaction(null);\r
-        } catch (RuntimeException e){\r
-            securityException  = findSecurityRuntimeException(e);\r
-            logger.error("Unexpected failure of evaluation.", e);\r
-        }catch(ReferencedObjectUndeletableException e){\r
-            Assert.fail();\r
-        }finally {\r
-            // needed in case saveOrUpdate was interrupted by the RuntimeException\r
-            // commitAndStartNewTransaction() would raise an UnexpectedRollbackException\r
-            endTransaction();\r
-            startNewTransaction();\r
-        }\r
+        taxonService.delete(taxon);\r
+        commitAndStartNewTransaction(null);\r
+       \r
+       \r
+            \r
+       \r
         Assert.assertNull("evaluation must not fail since the user is permitted, CAUSE :" + (securityException != null ? securityException.getMessage() : ""), securityException);\r
         // reload taxon\r
         taxon = taxonService.load(UUID_LACTUCA);\r
@@ -782,10 +790,13 @@ public class SecurityTest extends AbstractSecurityTestBase{
 \r
         Taxon taxon = (Taxon)taxonService.load(UUID_ACHERONTINII);\r
         try{\r
-            try {\r
-                taxonService.deleteTaxon(taxon, null, null);\r
-            } catch (DataChangeNoRollbackException e) {\r
+           // try {\r
+               DeleteResult result = taxonService.deleteTaxon(taxon, null, null);\r
+            /*} catch (DataChangeNoRollbackException e) {\r
                 Assert.fail();\r
+            }*/\r
+            if (!result.isOk()){\r
+               Assert.fail();\r
             }\r
             commitAndStartNewTransaction(null);\r
         } catch (RuntimeException e){\r
@@ -817,27 +828,21 @@ public class SecurityTest extends AbstractSecurityTestBase{
         authentication = authenticationManager.authenticate(tokenForDescriptionEditor);\r
         context.setAuthentication(authentication);\r
 \r
-        TaxonBase<?> taxon = taxonService.load(UUID_LACTUCA);\r
-\r
-        try {\r
-            taxonService.delete(taxon);\r
-            commitAndStartNewTransaction(null);\r
-        } catch (RuntimeException e){\r
-            securityException = findSecurityRuntimeException(e);\r
-            logger.debug("Expected failure of evaluation.", securityException);\r
-        }catch(ReferencedObjectUndeletableException e){\r
-            Assert.fail();\r
-        }      finally {\r
-            // needed in case saveOrUpdate was interrupted by the RuntimeException\r
-            // commitAndStartNewTransaction() would raise an UnexpectedRollbackException\r
-            endTransaction();\r
-            startNewTransaction();\r
+        Taxon taxon = (Taxon)taxonService.load(UUID_LACTUCA);\r
+        DeleteResult result = taxonService.deleteTaxon(taxon, null, null);\r
+        if (!result.isError()) {\r
+               Assert.fail();\r
         }\r
+       endTransaction();\r
+       startNewTransaction();\r
+       \r
 \r
-        Assert.assertNotNull("evaluation must fail since the user is not permitted", securityException);\r
+        //Assert.assertNotNull("evaluation must fail since the user is not permitted", securityException);\r
         // reload taxon\r
-        taxon = taxonService.load(UUID_LACTUCA);\r
+        taxon = (Taxon)taxonService.load(UUID_LACTUCA);\r
+        \r
         Assert.assertNotNull("The change must still exist", taxon);\r
+        Assert.assertNotNull("The name must still exist",taxon.getName());\r
     }\r
 \r
 \r
@@ -911,7 +916,7 @@ public class SecurityTest extends AbstractSecurityTestBase{
 \r
     }\r
 \r
-    @Ignore // FIXME http://dev.e-taxonomy.eu/trac/ticket/4081 : #4081 (TaxonNodeServiceImpl.makeTaxonNodeASynonymOfAnotherTaxonNode() requires TAXONNAMEBASE.[UPDATE])\r
+//    @Ignore // FIXME http://dev.e-taxonomy.eu/trac/ticket/4081 : #4081 (TaxonNodeServiceImpl.makeTaxonNodeASynonymOfAnotherTaxonNode() requires TAXONNAMEBASE.[UPDATE])\r
     @Test\r
     public void testAcceptedTaxonToSynomym(){\r
 \r
@@ -942,8 +947,6 @@ public class SecurityTest extends AbstractSecurityTestBase{
             securityException = findSecurityRuntimeException(e);\r
             logger.error("Unexpected Exception ", e);\r
             Assert.fail("Unexpected Exception: " + e.getMessage());\r
-        } catch (DataChangeNoRollbackException e) {\r
-            Assert.fail("Unexpected Exception: " + e.getMessage());\r
         } finally {\r
             // needed in case saveOrUpdate was interrupted by the RuntimeException\r
             // commitAndStartNewTransaction() would raise an UnexpectedRollbackException\r
@@ -1204,4 +1207,13 @@ public class SecurityTest extends AbstractSecurityTestBase{
 \r
     }\r
 \r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.test.integration.CdmIntegrationTest#createTestData()\r
+     */\r
+    @Override\r
+    protected void createTestDataSet() throws FileNotFoundException {\r
+        // TODO Auto-generated method stub\r
+        \r
+    }\r
+\r
 }\r