Extend step-by-step deletion test
[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.assertNotNull;
15 import static org.junit.Assert.assertTrue;
16
17 import java.io.FileNotFoundException;
18 import java.util.UUID;
19
20 import org.apache.log4j.Logger;
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
52 @SuppressWarnings("unused")
53 private static final Logger logger = Logger.getLogger(OccurrenceServiceDeepDeleteTest.class);
54
55 @SpringBeanByType
56 private IOccurrenceService occurrenceService;
57
58 @SpringBeanByType
59 private ISequenceService sequenceService;
60
61 @Test
62 @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="OccurrenceServiceTest.testDeleteDerivateHierarchyStepByStep.xml")
63 public void testDeepDelete_FieldUnit(){
64
65
66 String assertMessage = "Incorrect number of specimens after deletion.";
67 DeleteResult deleteResult = null;
68 SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
69 config.setDeleteMolecularData(true);
70 config.setDeleteChildren(true);
71
72 FieldUnit fieldUnit = (FieldUnit) occurrenceService.load(FIELD_UNIT_UUID);
73 DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID);
74
75 //check initial state
76 assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
77 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
78 assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class));
79 assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
80 assertEquals("incorrect number of amplification results", 1, dnaSample.getAmplificationResults().size());
81 assertEquals("number of sequences incorrect", 1, dnaSample.getSequences().size());
82 assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
83
84 //delete field unit
85 deleteResult = occurrenceService.deleteDerivateHierarchy(fieldUnit, config);
86 assertTrue(deleteResult.toString(), deleteResult.isOk());
87 assertEquals(assertMessage, 0, occurrenceService.count(SpecimenOrObservationBase.class));
88 assertEquals(assertMessage, 0, occurrenceService.count(FieldUnit.class));
89 assertEquals(assertMessage, 0, occurrenceService.count(DerivedUnit.class));
90 assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
91 }
92
93 @Test
94 @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class)
95 public void testDeepDelete_DerivedUnit(){
96 String assertMessage = "Incorrect number of specimens after deletion.";
97 DeleteResult deleteResult = null;
98 SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
99 config.setDeleteMolecularData(true);
100 config.setDeleteChildren(true);
101
102 DerivedUnit derivedUnit = (DerivedUnit) occurrenceService.load(DERIVED_UNIT_UUID);
103 DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID);
104
105 //check initial state
106 assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
107 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
108 assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class));
109 assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
110 assertEquals("incorrect number of amplification results", 1, dnaSample.getAmplificationResults().size());
111 assertEquals("number of sequences incorrect", 1, dnaSample.getSequences().size());
112 assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
113
114 //delete derived unit
115 deleteResult = occurrenceService.deleteDerivateHierarchy(derivedUnit, config);
116 assertTrue(deleteResult.toString(), deleteResult.isOk());
117 assertEquals(assertMessage, 1, occurrenceService.count(SpecimenOrObservationBase.class));
118 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
119 assertEquals(assertMessage, 0, occurrenceService.count(DerivedUnit.class));
120 assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
121 }
122
123 @Test
124 @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class)
125 public void testDeepDelete_DnaSample(){
126 String assertMessage = "Incorrect number of specimens after deletion.";
127 DeleteResult deleteResult = null;
128 SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
129 config.setDeleteMolecularData(true);
130 config.setDeleteChildren(true);
131
132 DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID);
133
134 //check initial state
135 assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
136 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
137 assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class));
138 assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
139 assertEquals("incorrect number of amplification results", 1, dnaSample.getAmplificationResults().size());
140 assertEquals("number of sequences incorrect", 1, dnaSample.getSequences().size());
141 assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
142
143 //delete dna sample
144 deleteResult = occurrenceService.deleteDerivateHierarchy(dnaSample, config);
145 assertTrue(deleteResult.toString(), deleteResult.isOk());
146 assertEquals(assertMessage, 2, occurrenceService.count(SpecimenOrObservationBase.class));
147 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
148 assertEquals(assertMessage, 1, occurrenceService.count(DerivedUnit.class));
149 assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
150 }
151
152
153 @Test
154 @DataSet(value="OccurrenceServiceDeepDeleteTest.testDeleteStepByStep.xml", loadStrategy=CleanSweepInsertLoadStrategy.class)
155 public void testDeleteDerivateHierarchyStepByStep(){
156 UUID fieldUnitUuid = UUID.fromString("4d91a9bc-2af7-40f8-b6e6-545305301807");
157 UUID derivedUnitUuid = UUID.fromString("f9c57904-e512-4927-90ad-f3833cdef967");
158 UUID tissueSampleUuid = UUID.fromString("14b92fce-1236-455b-ba46-2a7e35d9230e");
159 UUID dnaSampleUuid = UUID.fromString("60c31688-edec-4796-aa2f-28a7ea12256b");
160 UUID sequenceUuid = UUID.fromString("24804b67-d6f7-48e5-811a-e7240230d305");
161
162 String assertMessage = "Incorrect number of specimens after deletion.";
163 DeleteResult deleteResult = null;
164 SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
165
166 FieldUnit fieldUnit = (FieldUnit) occurrenceService.load(fieldUnitUuid);
167 DerivedUnit derivedUnit = (DerivedUnit) occurrenceService.load(derivedUnitUuid);
168 DerivedUnit tissueSample = (DerivedUnit) occurrenceService.load(tissueSampleUuid);
169 DnaSample dnaSample = (DnaSample) occurrenceService.load(dnaSampleUuid);
170 Sequence consensusSequence = sequenceService.load(sequenceUuid);
171
172 //check initial state
173 assertNotNull(fieldUnit);
174 assertNotNull(derivedUnit);
175 assertNotNull(tissueSample);
176 assertNotNull(dnaSample);
177 assertNotNull(consensusSequence);
178
179 assertEquals(assertMessage, 4, occurrenceService.count(SpecimenOrObservationBase.class));
180 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
181 assertEquals(assertMessage, 3, occurrenceService.count(DerivedUnit.class));
182 assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
183 assertEquals("incorrect number of amplification results", 1, dnaSample.getAmplificationResults().size());
184 assertEquals("number of sequences incorrect", 1, dnaSample.getSequences().size());
185 assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
186 assertEquals("incorrect number of single reads", 1, consensusSequence.getSingleReads().size());
187 assertEquals(consensusSequence.getSingleReads().iterator().next(), dnaSample.getAmplificationResults().iterator().next().getSingleReads().iterator().next());
188
189 //delete sequence -> should fail
190 deleteResult = occurrenceService.deleteDerivateHierarchy(consensusSequence, config);
191 assertFalse(deleteResult.toString(), deleteResult.isOk());
192
193 //allow deletion of molecular data
194 config.setDeleteMolecularData(true);
195
196 SingleRead singleRead = dnaSample.getAmplificationResults().iterator().next().getSingleReads().iterator().next();
197 deleteResult = occurrenceService.deleteSingleRead(singleRead, consensusSequence);
198 assertTrue(deleteResult.toString(), deleteResult.isOk());
199 assertEquals("incorrect number of single reads", 0, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
200 assertEquals("incorrect number of single reads", 0, consensusSequence.getSingleReads().size());
201
202 //delete sequence -> should fail
203 deleteResult = occurrenceService.deleteDerivateHierarchy(consensusSequence, config);
204 assertTrue(deleteResult.toString(), deleteResult.isOk());
205 assertEquals("number of sequences incorrect", 0, dnaSample.getSequences().size());
206
207
208 //delete dna sample
209 deleteResult = occurrenceService.deleteDerivateHierarchy(dnaSample, config);
210 assertTrue(deleteResult.toString(), deleteResult.isOk());
211 assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
212 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
213 assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class));
214 assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
215
216 //delete tissue sample
217 deleteResult = occurrenceService.deleteDerivateHierarchy(tissueSample, config);
218 assertTrue(deleteResult.toString(), deleteResult.isOk());
219 assertEquals(assertMessage, 2, occurrenceService.count(SpecimenOrObservationBase.class));
220 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
221 assertEquals(assertMessage, 1, occurrenceService.count(DerivedUnit.class));
222 assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
223
224 //delete derived unit
225 deleteResult = occurrenceService.deleteDerivateHierarchy(derivedUnit, config);
226 assertTrue(deleteResult.toString(), deleteResult.isOk());
227 assertEquals(assertMessage, 1, occurrenceService.count(SpecimenOrObservationBase.class));
228 assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
229 assertEquals(assertMessage, 0, occurrenceService.count(DerivedUnit.class));
230 assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
231
232 //delete field unit
233 deleteResult = occurrenceService.deleteDerivateHierarchy(fieldUnit, config);
234
235 assertTrue(deleteResult.toString(), deleteResult.isOk());
236 assertEquals(assertMessage, 0, occurrenceService.count(SpecimenOrObservationBase.class));
237 assertEquals(assertMessage, 0, occurrenceService.count(FieldUnit.class));
238 assertEquals(assertMessage, 0, occurrenceService.count(DerivedUnit.class));
239 assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
240 }
241
242 @Override
243 @Test
244 // @Ignore
245 public void createTestDataSet() throws FileNotFoundException {
246 UUID fieldUnitUuid = UUID.fromString("4d91a9bc-2af7-40f8-b6e6-545305301807");
247 UUID derivedUnitUuid = UUID.fromString("f9c57904-e512-4927-90ad-f3833cdef967");
248 UUID tissueSampleUuid = UUID.fromString("14b92fce-1236-455b-ba46-2a7e35d9230e");
249 UUID dnaSampleUuid = UUID.fromString("60c31688-edec-4796-aa2f-28a7ea12256b");
250 UUID sequenceUuid = UUID.fromString("24804b67-d6f7-48e5-811a-e7240230d305");
251
252 //how the XML was generated
253 FieldUnit fieldUnit = FieldUnit.NewInstance();
254 fieldUnit.setUuid(fieldUnitUuid);
255 //sub derivates (DerivedUnit, DnaSample)
256 DerivedUnit derivedUnit = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
257 derivedUnit.setUuid(derivedUnitUuid);
258 DerivedUnit tissueSample = DerivedUnit.NewInstance(SpecimenOrObservationType.TissueSample);
259 tissueSample.setUuid(tissueSampleUuid);
260 DnaSample dnaSample = (DnaSample) DerivedUnit.NewInstance(SpecimenOrObservationType.DnaSample);
261 dnaSample.setUuid(dnaSampleUuid);
262 Sequence sequence = Sequence.NewInstance("");
263 sequence.setUuid(sequenceUuid);
264 SingleRead singleRead1 = SingleRead.NewInstance();
265
266 dnaSample.addSequence(sequence);
267 sequence.addSingleRead(singleRead1);
268 AmplificationResult amplificationResult = AmplificationResult.NewInstance(dnaSample);
269 amplificationResult.addSingleRead(singleRead1);
270
271 //derivation events
272 DerivationEvent.NewSimpleInstance(fieldUnit, derivedUnit, DerivationEventType.ACCESSIONING());
273 DerivationEvent.NewSimpleInstance(derivedUnit, tissueSample, DerivationEventType.TISSUE_SAMPLING());
274 DerivationEvent.NewSimpleInstance(tissueSample, dnaSample, DerivationEventType.DNA_EXTRACTION());
275
276 occurrenceService.save(fieldUnit);
277 occurrenceService.save(derivedUnit);
278 occurrenceService.save(tissueSample);
279 occurrenceService.save(dnaSample);
280
281 commitAndStartNewTransaction(null);
282
283 setComplete();
284 endTransaction();
285
286 try {
287 writeDbUnitDataSetFile(new String[] {
288 "SpecimenOrObservationBase",
289 "SpecimenOrObservationBase_DerivationEvent",
290 "DerivationEvent",
291 "Sequence",
292 "SingleRead",
293 "SingleReadAlignment",
294 "Amplification",
295 "AmplificationResult",
296 "DescriptionElementBase",
297 "DescriptionBase",
298 "TaxonBase",
299 "TypeDesignationBase",
300 "TaxonNameBase",
301 "TaxonNameBase_TypeDesignationBase",
302 "HomotypicalGroup"
303 }, "testDeleteStepByStep");
304 } catch (FileNotFoundException e) {
305 e.printStackTrace();
306 }
307 }
308 }