- extracted deepDelete tests to own java class
[cdmlib.git] / cdmlib-services / src / test / java / eu / etaxonomy / cdm / api / service / OccurrenceServiceDeepDeleteTest.java
1 // $Id$
2 /**
3 * Copyright (C) 2014 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10 package eu.etaxonomy.cdm.api.service;
11
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertFalse;
14 import static org.junit.Assert.assertTrue;
15
16 import java.io.FileNotFoundException;
17 import java.util.UUID;
18
19 import org.apache.log4j.Logger;
20 import org.junit.Ignore;
21 import org.junit.Test;
22 import org.unitils.dbunit.annotation.DataSet;
23 import org.unitils.spring.annotation.SpringBeanByType;
24
25 import eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator;
26 import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
27 import eu.etaxonomy.cdm.model.molecular.AmplificationResult;
28 import eu.etaxonomy.cdm.model.molecular.DnaSample;
29 import eu.etaxonomy.cdm.model.molecular.Sequence;
30 import eu.etaxonomy.cdm.model.molecular.SingleRead;
31 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
32 import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
33 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
34 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
35 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
36 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
37 import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
38 import eu.etaxonomy.cdm.test.unitils.CleanSweepInsertLoadStrategy;
39
40 /**
41 * @author pplitzner
42 * @date 31.03.2014
43 *
44 */
45 public class OccurrenceServiceDeepDeleteTest extends CdmTransactionalIntegrationTest {
46
47 private final UUID FIELD_UNIT_UUID = UUID.fromString("b5f58da5-4442-4001-9d13-33f41518b72a");
48 private final UUID DERIVED_UNIT_UUID = UUID.fromString("448be6e7-f19c-4a10-9a0a-97aa005f817d");
49 private final UUID DNA_SAMPLE_UUID = UUID.fromString("bee4212b-aff1-484e-845f-065c7d6216af");
50 private final UUID SEQUENCE_UUID = UUID.fromString("0b867369-de8c-4837-a708-5b7d9f6091be");
51 private final UUID TAXON_UUID = UUID.fromString("e93b3840-326c-446e-89f1-a7611f17c0e8");
52
53 @SuppressWarnings("unused")
54 private static final Logger logger = Logger.getLogger(OccurrenceServiceDeepDeleteTest.class);
55
56 @SpringBeanByType
57 private IOccurrenceService occurrenceService;
58
59 @SpringBeanByType
60 private ISequenceService sequenceService;
61
62 @Test
63 @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="OccurrenceServiceTest.testDeleteDerivateHierarchyStepByStep.xml")
64 public void testDeepDelete_FieldUnit(){
65
66
67 String assertMessage = "Incorrect number of specimens after deletion.";
68 DeleteResult deleteResult = null;
69 SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
70 config.setDeleteMolecularData(true);
71 config.setDeleteChildren(true);
72
73 FieldUnit fieldUnit = (FieldUnit) occurrenceService.load(FIELD_UNIT_UUID);
74 DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID);
75
76 //check initial state
77 assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
78 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
79 assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class));
80 assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
81 assertEquals("incorrect number of amplification results", 1, dnaSample.getAmplificationResults().size());
82 assertEquals("number of sequences incorrect", 1, dnaSample.getSequences().size());
83 assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
84
85 //delete field unit
86 deleteResult = occurrenceService.deleteDerivateHierarchy(fieldUnit, config);
87 assertTrue(deleteResult.toString(), deleteResult.isOk());
88 assertEquals(assertMessage, 0, occurrenceService.count(SpecimenOrObservationBase.class));
89 assertEquals(assertMessage, 0, occurrenceService.count(FieldUnit.class));
90 assertEquals(assertMessage, 0, occurrenceService.count(DerivedUnit.class));
91 assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
92 }
93
94 @Test
95 @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class)
96 public void testDeepDelete_DerivedUnit(){
97 String assertMessage = "Incorrect number of specimens after deletion.";
98 DeleteResult deleteResult = null;
99 SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
100 config.setDeleteMolecularData(true);
101 config.setDeleteChildren(true);
102
103 DerivedUnit derivedUnit = (DerivedUnit) occurrenceService.load(DERIVED_UNIT_UUID);
104 DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID);
105
106 //check initial state
107 assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
108 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
109 assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class));
110 assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
111 assertEquals("incorrect number of amplification results", 1, dnaSample.getAmplificationResults().size());
112 assertEquals("number of sequences incorrect", 1, dnaSample.getSequences().size());
113 assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
114
115 //delete derived unit
116 deleteResult = occurrenceService.deleteDerivateHierarchy(derivedUnit, config);
117 assertTrue(deleteResult.toString(), deleteResult.isOk());
118 assertEquals(assertMessage, 1, occurrenceService.count(SpecimenOrObservationBase.class));
119 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
120 assertEquals(assertMessage, 0, occurrenceService.count(DerivedUnit.class));
121 assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
122 }
123
124 @Test
125 @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class)
126 public void testDeepDelete_DnaSample(){
127 String assertMessage = "Incorrect number of specimens after deletion.";
128 DeleteResult deleteResult = null;
129 SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
130 config.setDeleteMolecularData(true);
131 config.setDeleteChildren(true);
132
133 DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID);
134
135 //check initial state
136 assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
137 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
138 assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class));
139 assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
140 assertEquals("incorrect number of amplification results", 1, dnaSample.getAmplificationResults().size());
141 assertEquals("number of sequences incorrect", 1, dnaSample.getSequences().size());
142 assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
143
144 //delete dna sample
145 deleteResult = occurrenceService.deleteDerivateHierarchy(dnaSample, config);
146 assertTrue(deleteResult.toString(), deleteResult.isOk());
147 assertEquals(assertMessage, 2, occurrenceService.count(SpecimenOrObservationBase.class));
148 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
149 assertEquals(assertMessage, 1, occurrenceService.count(DerivedUnit.class));
150 assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
151 }
152
153
154 @Test
155 @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class)
156 public void testDeleteDerivateHierarchyStepByStep(){
157 String assertMessage = "Incorrect number of specimens after deletion.";
158 DeleteResult deleteResult = null;
159 SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
160
161 FieldUnit fieldUnit = (FieldUnit) occurrenceService.load(FIELD_UNIT_UUID);
162 DerivedUnit derivedUnit = (DerivedUnit) occurrenceService.load(DERIVED_UNIT_UUID);
163 DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID);
164 Sequence consensusSequence = sequenceService.load(SEQUENCE_UUID);
165
166 //check initial state
167 assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
168 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
169 assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class));
170 assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
171 assertEquals("incorrect number of amplification results", 1, dnaSample.getAmplificationResults().size());
172 assertEquals("number of sequences incorrect", 1, dnaSample.getSequences().size());
173 assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
174
175 //delete single read -> should fail
176 SingleRead singleRead = dnaSample.getAmplificationResults().iterator().next().getSingleReads().iterator().next();
177 deleteResult = occurrenceService.deleteDerivateHierarchy(singleRead, config);
178 assertFalse(deleteResult.toString(), deleteResult.isOk());
179 //delete sequence -> should fail
180 deleteResult = occurrenceService.deleteDerivateHierarchy(consensusSequence, config);
181 assertFalse(deleteResult.toString(), deleteResult.isOk());
182
183 //allow deletion of molecular data
184 config.setDeleteMolecularData(true);
185
186 deleteResult = occurrenceService.deleteDerivateHierarchy(singleRead, config);
187 assertTrue(deleteResult.toString(), deleteResult.isOk());
188 assertTrue(consensusSequence.getSingleReads().isEmpty());
189
190 //delete sequence -> should fail
191 deleteResult = occurrenceService.deleteDerivateHierarchy(consensusSequence, config);
192 assertTrue(deleteResult.toString(), deleteResult.isOk());
193 assertEquals("number of sequences incorrect", 0, dnaSample.getSequences().size());
194
195
196 //delete dna sample
197 deleteResult = occurrenceService.deleteDerivateHierarchy(dnaSample, config);
198 assertTrue(deleteResult.toString(), deleteResult.isOk());
199 assertEquals(assertMessage, 2, occurrenceService.count(SpecimenOrObservationBase.class));
200 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
201 assertEquals(assertMessage, 1, occurrenceService.count(DerivedUnit.class));
202 assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
203
204 //delete derived unit
205 deleteResult = occurrenceService.deleteDerivateHierarchy(derivedUnit, config);
206 assertTrue(deleteResult.toString(), deleteResult.isOk());
207 assertEquals(assertMessage, 1, occurrenceService.count(SpecimenOrObservationBase.class));
208 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
209 assertEquals(assertMessage, 0, occurrenceService.count(DerivedUnit.class));
210 assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
211
212 //delete field unit
213 deleteResult = occurrenceService.deleteDerivateHierarchy(fieldUnit, config);
214 deleteResult = occurrenceService.deleteDerivateHierarchy(fieldUnit, config);
215 assertTrue(deleteResult.toString(), deleteResult.isOk());
216 assertEquals(assertMessage, 0, occurrenceService.count(SpecimenOrObservationBase.class));
217 assertEquals(assertMessage, 0, occurrenceService.count(FieldUnit.class));
218 assertEquals(assertMessage, 0, occurrenceService.count(DerivedUnit.class));
219 assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
220 }
221
222 /* (non-Javadoc)
223 * @see eu.etaxonomy.cdm.test.integration.CdmIntegrationTest#createTestData()
224 */
225 @Override
226 @Test
227 @Ignore
228 public void createTestDataSet() throws FileNotFoundException {
229 //how the XML was generated
230 FieldUnit fieldUnit = FieldUnit.NewInstance();
231 fieldUnit.setUuid(FIELD_UNIT_UUID);
232 //sub derivates (DerivedUnit, DnaSample)
233 DerivedUnit derivedUnit = DerivedUnit.NewInstance(SpecimenOrObservationType.Fossil);
234 derivedUnit.setUuid(DERIVED_UNIT_UUID);
235 DnaSample dnaSample = DnaSample.NewInstance();
236 dnaSample.setUuid(DNA_SAMPLE_UUID);
237
238 //derivation events
239 DerivationEvent.NewSimpleInstance(fieldUnit, derivedUnit, DerivationEventType.ACCESSIONING());
240 DerivationEvent.NewSimpleInstance(derivedUnit, dnaSample, DerivationEventType.DNA_EXTRACTION());
241
242 //DNA (Sequence, SingleRead, Amplification)
243 Sequence sequence = Sequence.NewInstance(dnaSample, "ATTCG", 5);
244 sequence.setUuid(SEQUENCE_UUID);
245 SingleRead singleRead = SingleRead.NewInstance();
246 sequence.addSingleRead(singleRead);
247 dnaSample.addSequence(sequence);
248 AmplificationResult amplificationResult = AmplificationResult.NewInstance(dnaSample);
249 amplificationResult.addSingleRead(singleRead);
250 occurrenceService.save(fieldUnit);
251 occurrenceService.save(derivedUnit);
252 occurrenceService.save(dnaSample);
253
254 commitAndStartNewTransaction(null);
255
256 setComplete();
257 endTransaction();
258
259
260 try {
261 writeDbUnitDataSetFile(new String[] {
262 "SpecimenOrObservationBase",
263 "SpecimenOrObservationBase_DerivationEvent",
264 "DerivationEvent",
265 "Sequence",
266 "Sequence_SingleRead",
267 "SingleRead",
268 "AmplificationResult"
269 });
270 } catch (FileNotFoundException e) {
271 e.printStackTrace();
272 }
273 }
274 }