fixing problems regarding lucene search after merge - one test still failing
[cdmlib.git] / cdmlib-services / src / test / java / eu / etaxonomy / cdm / api / service / OccurrenceServiceDeepDeleteTest.java
index 80cee1cba74ed227ef94e969b976ea13c408a61f..f1ac745c337b32b93ad5036db9ac3335df1be3c6 100644 (file)
@@ -10,7 +10,6 @@
 package eu.etaxonomy.cdm.api.service;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
@@ -18,7 +17,6 @@ import java.io.FileNotFoundException;
 import java.util.UUID;
 
 import org.apache.log4j.Logger;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.unitils.dbunit.annotation.DataSet;
 import org.unitils.spring.annotation.SpringBeanByType;
@@ -28,12 +26,11 @@ import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
 import eu.etaxonomy.cdm.model.molecular.DnaSample;
 import eu.etaxonomy.cdm.model.molecular.Sequence;
 import eu.etaxonomy.cdm.model.molecular.SingleRead;
-import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
-import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
+import eu.etaxonomy.cdm.model.molecular.SingleReadAlignment;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
-import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
+import eu.etaxonomy.cdm.persistence.dao.molecular.ISingleReadDao;
 import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
 import eu.etaxonomy.cdm.test.unitils.CleanSweepInsertLoadStrategy;
 
@@ -55,6 +52,9 @@ public class OccurrenceServiceDeepDeleteTest extends CdmTransactionalIntegration
     @SpringBeanByType
     private IOccurrenceService occurrenceService;
 
+    @SpringBeanByType
+    private ISingleReadDao singleReadDao;
+
     @SpringBeanByType
     private ISequenceService sequenceService;
 
@@ -82,7 +82,7 @@ public class OccurrenceServiceDeepDeleteTest extends CdmTransactionalIntegration
         assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
 
         //delete field unit
-        deleteResult = occurrenceService.deleteDerivateHierarchy(fieldUnit, config);
+        deleteResult = occurrenceService.delete(fieldUnit, config);
         assertTrue(deleteResult.toString(), deleteResult.isOk());
         assertEquals(assertMessage, 0, occurrenceService.count(SpecimenOrObservationBase.class));
         assertEquals(assertMessage, 0, occurrenceService.count(FieldUnit.class));
@@ -112,7 +112,7 @@ public class OccurrenceServiceDeepDeleteTest extends CdmTransactionalIntegration
         assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
 
         //delete derived unit
-        deleteResult = occurrenceService.deleteDerivateHierarchy(derivedUnit, config);
+        deleteResult = occurrenceService.delete(derivedUnit, config);
         assertTrue(deleteResult.toString(), deleteResult.isOk());
         assertEquals(assertMessage, 1, occurrenceService.count(SpecimenOrObservationBase.class));
         assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
@@ -141,7 +141,7 @@ public class OccurrenceServiceDeepDeleteTest extends CdmTransactionalIntegration
         assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
 
         //delete dna sample
-        deleteResult = occurrenceService.deleteDerivateHierarchy(dnaSample, config);
+        deleteResult = occurrenceService.delete(dnaSample, config);
         assertTrue(deleteResult.toString(), deleteResult.isOk());
         assertEquals(assertMessage, 2, occurrenceService.count(SpecimenOrObservationBase.class));
         assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
@@ -149,6 +149,120 @@ public class OccurrenceServiceDeepDeleteTest extends CdmTransactionalIntegration
         assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
     }
 
+    @Test
+    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="OccurrenceServiceDeepDeleteTest.testDeepDelete_SingleRead.xml")
+    public void testDeepDelete_SingleRead(){
+        UUID sequenceA1Uuid = UUID.fromString("3db46d26-94ef-4759-aad8-42d0b9aea9b6");
+        UUID sequenceA2Uuid = UUID.fromString("afa3771c-2b9d-46d7-82e0-8b9c050706e3");
+        UUID sequenceB1Uuid = UUID.fromString("d7199db5-708e-470a-a573-9c760dd07cd1");
+        UUID sequenceB2Uuid = UUID.fromString("1cb83575-38ea-4a8c-9418-d87163f425ce");
+        UUID singleReadAUuid = UUID.fromString("82f538a1-2274-4d55-b27b-ed2f004ab5cd");
+        UUID singleReadBUuid = UUID.fromString("fc74199a-89dc-40a0-9cbd-08cebebff4b5");
+
+        //how the XML was generated
+//        Sequence sequenceA1 = Sequence.NewInstance("A");
+//        Sequence sequenceA2 = Sequence.NewInstance("T");
+//        Sequence sequenceB1 = Sequence.NewInstance("C");
+//        Sequence sequenceB2 = Sequence.NewInstance("G");
+//
+//        SingleRead singleReadA = SingleRead.NewInstance();
+//        SingleRead singleReadB = SingleRead.NewInstance();
+//
+//        sequenceA1.setUuid(sequenceA1Uuid);
+//        sequenceA2.setUuid(sequenceA2Uuid);
+//        sequenceB1.setUuid(sequenceB1Uuid);
+//        sequenceB1.setUuid(sequenceB2Uuid);
+//        singleReadA.setUuid(singleReadAUuid);
+//        singleReadB.setUuid(singleReadBUuid);
+//
+//        SingleReadAlignment.NewInstance(sequenceA1, singleReadA);
+//        SingleReadAlignment.NewInstance(sequenceA2, singleReadA);
+//        SingleReadAlignment.NewInstance(sequenceB1, singleReadB);
+//        SingleReadAlignment.NewInstance(sequenceB2, singleReadB);
+//
+//        sequenceService.save(sequenceA1);
+//        sequenceService.save(sequenceA2);
+//        sequenceService.save(sequenceB1);
+//        sequenceService.save(sequenceB2);
+//
+//        commitAndStartNewTransaction(null);
+//
+//        setComplete();
+//        endTransaction();
+//
+//        try {
+//            writeDbUnitDataSetFile(new String[] {
+//                    "SpecimenOrObservationBase",
+//                    "SpecimenOrObservationBase_DerivationEvent",
+//                    "DerivationEvent",
+//                    "Sequence",
+//                    "SingleRead",
+//                    "SingleReadAlignment",
+//                    "Amplification",
+//                    "AmplificationResult",
+//                    "DescriptionElementBase",
+//                    "DescriptionBase",
+//                    "TaxonBase",
+//                    "TypeDesignationBase",
+//                    "TaxonNameBase",
+//                    "TaxonNameBase_TypeDesignationBase",
+//                    "HomotypicalGroup"
+//            }, "testDeepDelete_SingleRead");
+//        } catch (FileNotFoundException e) {
+//            e.printStackTrace();
+//        }
+
+        DeleteResult deleteResult = null;
+        SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
+        config.setDeleteMolecularData(true);
+        config.setDeleteChildren(true);
+
+        Sequence sequenceA1 = sequenceService.load(sequenceA1Uuid);
+        Sequence sequenceA2 = sequenceService.load(sequenceA2Uuid);
+        Sequence sequenceB1 = sequenceService.load(sequenceB1Uuid);
+        Sequence sequenceB2 = sequenceService.load(sequenceB2Uuid);
+        SingleRead singleReadA = singleReadDao.load(singleReadAUuid);
+        SingleRead singleReadB = singleReadDao.load(singleReadBUuid);
+
+        //check initial state
+        assertNotNull(sequenceA1);
+        assertNotNull(sequenceA2);
+        assertNotNull(sequenceB1);
+        assertNotNull(sequenceB2);
+        assertNotNull(singleReadA);
+        assertNotNull(singleReadB);
+        assertEquals("number of sequences incorrect", 4, sequenceService.count(Sequence.class));
+        assertEquals("incorrect number of single reads", 2, singleReadDao.count());
+
+        //A: delete singleRead
+        //delete singleReadA from sequenceA1 (singleReadA should NOT be deleted)
+        deleteResult = sequenceService.deleteSingleRead(singleReadA, sequenceA1);
+        assertTrue(deleteResult.toString(), deleteResult.isOk());
+        assertEquals("incorrect number of single reads", 2, singleReadDao.count());
+        assertEquals(0, sequenceA1.getSingleReadAlignments().size());
+        assertNotNull(singleReadDao.load(singleReadAUuid));
+
+        //delete singleReadA from sequenceA2 (singleReadA should be deleted)
+        deleteResult = sequenceService.deleteSingleRead(singleReadA, sequenceA2);
+        assertTrue(deleteResult.toString(), deleteResult.isOk());
+        assertEquals("incorrect number of single reads", 1, singleReadDao.count());
+        assertEquals(0, sequenceA2.getSingleReadAlignments().size());
+        assertTrue(singleReadDao.load(singleReadAUuid)==null);
+
+        //B: delete sequence
+        //delete sequenceB1 (singleReadB should NOT be deleted)
+        deleteResult = sequenceService.delete(sequenceB1Uuid);
+        assertTrue(deleteResult.toString(), deleteResult.isOk());
+        assertEquals("incorrect number of single reads", 1, singleReadDao.count());
+        assertNotNull(singleReadDao.load(singleReadBUuid));
+
+        //delete sequenceB1 (singleReadB should be deleted)
+        deleteResult = sequenceService.delete(sequenceB2Uuid);
+        assertTrue(deleteResult.toString(), deleteResult.isOk());
+        assertEquals("incorrect number of single reads", 0, singleReadDao.count());
+        assertTrue(singleReadDao.load(singleReadBUuid)==null);
+    }
+
     @Test
     @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="OccurrenceServiceDeepDeleteTest.testDeepDelete_FieldUnitWithSiblingDerivatives.xml")
     public void testDeepDelete_FieldUnitWithSiblingDerivatives(){
@@ -166,7 +280,7 @@ public class OccurrenceServiceDeepDeleteTest extends CdmTransactionalIntegration
         assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
 
         //delete field unit
-        deleteResult = occurrenceService.deleteDerivateHierarchy(fieldUnit, config);
+        deleteResult = occurrenceService.delete(fieldUnit, config);
         assertTrue(deleteResult.toString(), deleteResult.isOk());
         assertEquals(assertMessage, 0, occurrenceService.count(SpecimenOrObservationBase.class));
         assertEquals(assertMessage, 0, occurrenceService.count(FieldUnit.class));
@@ -211,27 +325,24 @@ public class OccurrenceServiceDeepDeleteTest extends CdmTransactionalIntegration
         assertEquals("incorrect number of single reads", 1, consensusSequence.getSingleReads().size());
         assertEquals(consensusSequence.getSingleReads().iterator().next(), dnaSample.getAmplificationResults().iterator().next().getSingleReads().iterator().next());
 
-        //delete sequence -> should fail
-        deleteResult = occurrenceService.deleteDerivateHierarchy(consensusSequence, config);
-        assertFalse(deleteResult.toString(), deleteResult.isOk());
-
         //allow deletion of molecular data
         config.setDeleteMolecularData(true);
 
         SingleRead singleRead = dnaSample.getAmplificationResults().iterator().next().getSingleReads().iterator().next();
-        deleteResult = occurrenceService.deleteSingleRead(singleRead, consensusSequence);
+        deleteResult = sequenceService.deleteSingleRead(singleRead, consensusSequence);
         assertTrue(deleteResult.toString(), deleteResult.isOk());
         assertEquals("incorrect number of single reads", 0, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
         assertEquals("incorrect number of single reads", 0, consensusSequence.getSingleReads().size());
+        assertEquals("incorrect number of single reads", 0, singleReadDao.count());
 
-        //delete sequence -> should fail
-        deleteResult = occurrenceService.deleteDerivateHierarchy(consensusSequence, config);
+        //delete sequence
+        deleteResult = sequenceService.delete(consensusSequence);
         assertTrue(deleteResult.toString(), deleteResult.isOk());
         assertEquals("number of sequences incorrect", 0, dnaSample.getSequences().size());
 
 
         //delete dna sample
-        deleteResult = occurrenceService.deleteDerivateHierarchy(dnaSample, config);
+        deleteResult = occurrenceService.delete(dnaSample, config);
         assertTrue(deleteResult.toString(), deleteResult.isOk());
         assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
         assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
@@ -239,7 +350,7 @@ public class OccurrenceServiceDeepDeleteTest extends CdmTransactionalIntegration
         assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
 
         //delete tissue sample
-        deleteResult = occurrenceService.deleteDerivateHierarchy(tissueSample, config);
+        deleteResult = occurrenceService.delete(tissueSample, config);
         assertTrue(deleteResult.toString(), deleteResult.isOk());
         assertEquals(assertMessage, 2, occurrenceService.count(SpecimenOrObservationBase.class));
         assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
@@ -247,7 +358,7 @@ public class OccurrenceServiceDeepDeleteTest extends CdmTransactionalIntegration
         assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
 
         //delete derived unit
-        deleteResult = occurrenceService.deleteDerivateHierarchy(derivedUnit, config);
+        deleteResult = occurrenceService.delete(derivedUnit, config);
         assertTrue(deleteResult.toString(), deleteResult.isOk());
         assertEquals(assertMessage, 1, occurrenceService.count(SpecimenOrObservationBase.class));
         assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
@@ -255,7 +366,7 @@ public class OccurrenceServiceDeepDeleteTest extends CdmTransactionalIntegration
         assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
 
         //delete field unit
-        deleteResult = occurrenceService.deleteDerivateHierarchy(fieldUnit, config);
+        deleteResult = occurrenceService.delete(fieldUnit, config);
 
         assertTrue(deleteResult.toString(), deleteResult.isOk());
         assertEquals(assertMessage, 0, occurrenceService.count(SpecimenOrObservationBase.class));
@@ -265,31 +376,40 @@ public class OccurrenceServiceDeepDeleteTest extends CdmTransactionalIntegration
     }
 
     @Override
-    @Test
-    @Ignore
+//    @Test
     public void createTestDataSet() throws FileNotFoundException {
-//        UUID fieldUnitUuid = UUID.fromString("4d91a9bc-2af7-40f8-b6e6-545305301807");
-//        UUID derivedUnitUuid = UUID.fromString("f9c57904-e512-4927-90ad-f3833cdef967");
-//        UUID tissueSampleUuid = UUID.fromString("14b92fce-1236-455b-ba46-2a7e35d9230e");
-//        UUID dnaSampleUuid = UUID.fromString("60c31688-edec-4796-aa2f-28a7ea12256b");
-//        UUID sequenceUuid = UUID.fromString("24804b67-d6f7-48e5-811a-e7240230d305");
+        UUID sequenceA1Uuid = UUID.fromString("3db46d26-94ef-4759-aad8-42d0b9aea9b6");
+        UUID sequenceA2Uuid = UUID.fromString("afa3771c-2b9d-46d7-82e0-8b9c050706e3");
+        UUID sequenceB1Uuid = UUID.fromString("d7199db5-708e-470a-a573-9c760dd07cd1");
+        UUID sequenceB2Uuid = UUID.fromString("1cb83575-38ea-4a8c-9418-d87163f425ce");
+        UUID singleReadAUuid = UUID.fromString("82f538a1-2274-4d55-b27b-ed2f004ab5cd");
+        UUID singleReadBUuid = UUID.fromString("fc74199a-89dc-40a0-9cbd-08cebebff4b5");
 
         //how the XML was generated
-        FieldUnit fieldUnit = FieldUnit.NewInstance();
-        fieldUnit.setUuid(FIELD_UNIT_UUID);
-        //sub derivates (DerivedUnit, DnaSample)
-        DerivedUnit derivedUnit = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
-        derivedUnit.setUuid(DERIVED_UNIT_UUID);
-        DnaSample dnaSample = (DnaSample) DerivedUnit.NewInstance(SpecimenOrObservationType.DnaSample);
-        dnaSample.setUuid(DNA_SAMPLE_UUID);
-
-        //derivation events
-        DerivationEvent.NewSimpleInstance(fieldUnit, derivedUnit, DerivationEventType.ACCESSIONING());
-        DerivationEvent.NewSimpleInstance(fieldUnit, dnaSample, DerivationEventType.DNA_EXTRACTION());
-
-        occurrenceService.save(fieldUnit);
-        occurrenceService.save(derivedUnit);
-        occurrenceService.save(dnaSample);
+        Sequence sequenceA1 = Sequence.NewInstance("A");
+        Sequence sequenceA2 = Sequence.NewInstance("T");
+        Sequence sequenceB1 = Sequence.NewInstance("C");
+        Sequence sequenceB2 = Sequence.NewInstance("G");
+
+        SingleRead singleReadA = SingleRead.NewInstance();
+        SingleRead singleReadB = SingleRead.NewInstance();
+
+        sequenceA1.setUuid(sequenceA1Uuid);
+        sequenceA2.setUuid(sequenceA2Uuid);
+        sequenceB1.setUuid(sequenceB1Uuid);
+        sequenceB1.setUuid(sequenceB2Uuid);
+        singleReadA.setUuid(singleReadAUuid);
+        singleReadB.setUuid(singleReadBUuid);
+
+        SingleReadAlignment.NewInstance(sequenceA1, singleReadA);
+        SingleReadAlignment.NewInstance(sequenceA2, singleReadA);
+        SingleReadAlignment.NewInstance(sequenceB1, singleReadB);
+        SingleReadAlignment.NewInstance(sequenceB2, singleReadB);
+
+        sequenceService.save(sequenceA1);
+        sequenceService.save(sequenceA2);
+        sequenceService.save(sequenceB1);
+        sequenceService.save(sequenceB2);
 
         commitAndStartNewTransaction(null);
 
@@ -313,9 +433,16 @@ public class OccurrenceServiceDeepDeleteTest extends CdmTransactionalIntegration
                     "TaxonNameBase",
                     "TaxonNameBase_TypeDesignationBase",
                     "HomotypicalGroup"
-            }, "testDeepDelete_FieldUnitWithSiblingDerivatives");
+            }, "testDeepDelete_SingleRead");
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         }
+
+        System.out.println(sequenceA1.getUuid());
+        System.out.println(sequenceA2.getUuid());
+        System.out.println(sequenceB1.getUuid());
+        System.out.println(sequenceB2.getUuid());
+        System.out.println(singleReadA.getUuid());
+        System.out.println(singleReadB.getUuid());
     }
 }