Project

General

Profile

Download (16.1 KB) Statistics
| Branch: | Tag: | Revision:
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
}
(14-14/31)