Project

General

Profile

Download (26.6 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2014 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.cdm.api.service;
10

    
11
import static org.junit.Assert.assertEquals;
12
import static org.junit.Assert.assertNotNull;
13
import static org.junit.Assert.assertTrue;
14

    
15
import java.io.FileNotFoundException;
16
import java.util.UUID;
17

    
18
import org.apache.log4j.Logger;
19
import org.junit.Test;
20
import org.unitils.dbunit.annotation.DataSet;
21
import org.unitils.spring.annotation.SpringBeanByType;
22

    
23
import eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator;
24
import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
25
import eu.etaxonomy.cdm.api.service.pager.Pager;
26
import eu.etaxonomy.cdm.model.molecular.DnaSample;
27
import eu.etaxonomy.cdm.model.molecular.Sequence;
28
import eu.etaxonomy.cdm.model.molecular.SingleRead;
29
import eu.etaxonomy.cdm.model.molecular.SingleReadAlignment;
30
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
31
import eu.etaxonomy.cdm.model.name.Rank;
32
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
33
import eu.etaxonomy.cdm.model.name.TaxonName;
34
import eu.etaxonomy.cdm.model.name.TypeDesignationBase;
35
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
36
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
37
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
38
import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
39
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
40
import eu.etaxonomy.cdm.persistence.dao.molecular.ISingleReadDao;
41
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
42
import eu.etaxonomy.cdm.test.unitils.CleanSweepInsertLoadStrategy;
43

    
44
/**
45
 * @author pplitzner
46
 * @since 31.03.2014
47
 */
48
public class OccurrenceServiceDeepDeleteTest extends CdmTransactionalIntegrationTest {
49

    
50
    private final UUID FIELD_UNIT_UUID = UUID.fromString("b5f58da5-4442-4001-9d13-33f41518b72a");
51
    private final UUID DERIVED_UNIT_UUID = UUID.fromString("448be6e7-f19c-4a10-9a0a-97aa005f817d");
52
    private final UUID DNA_SAMPLE_UUID = UUID.fromString("bee4212b-aff1-484e-845f-065c7d6216af");
53
    private final UUID SEQUENCE_UUID = UUID.fromString("0b867369-de8c-4837-a708-5b7d9f6091be");
54
    private final UUID FIELD_UNIT2_UUID = UUID.fromString("ae798108-6483-4d09-900f-7f849c43bcc9");
55

    
56
    @SuppressWarnings("unused")
57
    private static final Logger logger = Logger.getLogger(OccurrenceServiceDeepDeleteTest.class);
58

    
59
    @SpringBeanByType
60
    private IOccurrenceService occurrenceService;
61

    
62
    @SpringBeanByType
63
    private IEventBaseService eventService;
64

    
65
    @SpringBeanByType
66
    private ISingleReadDao singleReadDao;
67

    
68
    @SpringBeanByType
69
    private ISequenceService sequenceService;
70

    
71
    @SpringBeanByType
72
    private INameService nameService;
73

    
74

    
75
    @Test
76
    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="OccurrenceServiceTest.testDeleteDerivateHierarchyStepByStep.xml")
77
    public void testDeepDelete_FieldUnit(){
78

    
79
        String assertMessage = "Incorrect number of specimens after deletion.";
80
        DeleteResult deleteResult = null;
81
        SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
82
        config.setDeleteMolecularData(true);
83
        config.setDeleteChildren(true);
84

    
85
        FieldUnit fieldUnit = (FieldUnit) occurrenceService.load(FIELD_UNIT_UUID);
86
        GatheringEvent gatheringEvent = GatheringEvent.NewInstance();
87
        fieldUnit.setGatheringEvent(gatheringEvent);
88
        FieldUnit fieldUnit2 = (FieldUnit) occurrenceService.load(FIELD_UNIT2_UUID);
89
        fieldUnit2.setGatheringEvent(gatheringEvent);
90
        DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID);
91

    
92
        //check initial state
93
        assertEquals(assertMessage, 6, occurrenceService.count(SpecimenOrObservationBase.class));
94
        assertEquals(assertMessage, 4, eventService.count(DerivationEvent.class));
95
        assertEquals(assertMessage, 2, occurrenceService.count(FieldUnit.class));
96
        assertEquals(assertMessage, 4, occurrenceService.count(DerivedUnit.class));
97
        assertEquals(assertMessage, 2, occurrenceService.count(DnaSample.class));
98
        assertEquals("incorrect number of amplification results", 1, dnaSample.getAmplificationResults().size());
99
        assertEquals("number of sequences incorrect", 1, dnaSample.getSequences().size());
100
        assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
101
        assertEquals("incorrect number of gathering events", 1, eventService.count(GatheringEvent.class));
102
        //delete field unit
103
        deleteResult = occurrenceService.delete(fieldUnit, config);
104
        assertTrue(deleteResult.toString(), deleteResult.isOk());
105
        assertEquals(assertMessage, 2, eventService.count(DerivationEvent.class));
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 gathering events", 1, eventService.count(GatheringEvent.class));
111

    
112
        deleteResult = occurrenceService.delete(fieldUnit2, config);
113
        assertEquals(assertMessage, 0, eventService.count(GatheringEvent.class));
114
    }
115

    
116
    @Test
117
    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="OccurrenceServiceTest.testDeleteDerivateHierarchyStepByStep.xml")
118
    public void testDeepDelete_FieldUnitWithTypeDesignation(){
119

    
120

    
121
        String assertMessage = "Incorrect number of specimens after deletion.";
122
        DeleteResult deleteResult = null;
123
        SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
124
        config.setDeleteMolecularData(true);
125
        config.setDeleteChildren(true);
126
        config.setDeleteFromTypeDesignation(true);
127

    
128
        FieldUnit fieldUnit = (FieldUnit) occurrenceService.load(FIELD_UNIT_UUID);
129
        DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID);
130
        TaxonName name = TaxonName.NewInstance(NomenclaturalCode.ICNAFP, Rank.SPECIES(), "Test", null, "test", null, null, null, null, null);
131
        SpecimenTypeDesignation specimenTypeDesignation = SpecimenTypeDesignation.NewInstance();
132
        specimenTypeDesignation.setTypeSpecimen(dnaSample);
133
        name.addTypeDesignation(specimenTypeDesignation, false);
134
        nameService.save(name);
135
        Pager<TypeDesignationBase> typeDesignations = nameService.getTypeDesignations(name, null, 100, 0);
136
        Long oldCount= typeDesignations.getCount();
137
        //check initial state
138
        assertEquals(assertMessage, 6, occurrenceService.count(SpecimenOrObservationBase.class));
139
        assertEquals(assertMessage, 4, eventService.count(DerivationEvent.class));
140
        assertEquals(assertMessage, 2, occurrenceService.count(FieldUnit.class));
141
        assertEquals(assertMessage, 4, occurrenceService.count(DerivedUnit.class));
142
        assertEquals(assertMessage, 2, occurrenceService.count(DnaSample.class));
143
        assertEquals("incorrect number of amplification results", 1, dnaSample.getAmplificationResults().size());
144
        assertEquals("number of sequences incorrect", 1, dnaSample.getSequences().size());
145
        assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
146

    
147
        //delete field unit
148
        deleteResult = occurrenceService.delete(fieldUnit, config);
149
        assertTrue(deleteResult.toString(), deleteResult.isOk());
150
        assertEquals(assertMessage, 2, eventService.count(DerivationEvent.class));
151
        assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
152
        assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
153
        assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class));
154
        assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
155
        typeDesignations = nameService.getTypeDesignations(name, null, 100, 0);
156
        Long afterDeleteCount= typeDesignations.getCount();
157
        assertTrue(oldCount > afterDeleteCount);
158
    }
159

    
160
    @Test
161
    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class)
162
    public void testDeepDelete_DerivedUnit(){
163
        String assertMessage = "Incorrect number of specimens after deletion.";
164
        DeleteResult deleteResult = null;
165
        SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
166
        config.setDeleteMolecularData(true);
167
        config.setDeleteChildren(true);
168

    
169
        DerivedUnit derivedUnit = (DerivedUnit) occurrenceService.load(DERIVED_UNIT_UUID);
170
        DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID);
171

    
172
        //check initial state
173
        assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
174
        assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
175
        assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class));
176
        assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
177
        assertEquals("incorrect number of amplification results", 1, dnaSample.getAmplificationResults().size());
178
        assertEquals("number of sequences incorrect", 1, dnaSample.getSequences().size());
179
        assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
180

    
181
        //delete derived unit
182
        deleteResult = occurrenceService.delete(derivedUnit, config);
183
        assertTrue(deleteResult.toString(), deleteResult.isOk());
184
        assertEquals(assertMessage, 1, occurrenceService.count(SpecimenOrObservationBase.class));
185
        assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
186
        assertEquals(assertMessage, 0, occurrenceService.count(DerivedUnit.class));
187
        assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
188
    }
189

    
190
    @Test
191
    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class)
192
    public void testDeepDelete_DnaSample(){
193
        String assertMessage = "Incorrect number of specimens after deletion.";
194
        DeleteResult deleteResult = null;
195
        SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
196
        config.setDeleteMolecularData(true);
197
        config.setDeleteChildren(true);
198

    
199
        DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID);
200

    
201
        //check initial state
202
        assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
203
        assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
204
        assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class));
205
        assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
206
        assertEquals("incorrect number of amplification results", 1, dnaSample.getAmplificationResults().size());
207
        assertEquals("number of sequences incorrect", 1, dnaSample.getSequences().size());
208
        assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
209

    
210
        //delete dna sample
211
        deleteResult = occurrenceService.delete(dnaSample, config);
212
        assertTrue(deleteResult.toString(), deleteResult.isOk());
213
        assertEquals(assertMessage, 2, occurrenceService.count(SpecimenOrObservationBase.class));
214
        assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
215
        assertEquals(assertMessage, 1, occurrenceService.count(DerivedUnit.class));
216
        assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
217
    }
218

    
219
    @Test
220
    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="OccurrenceServiceDeepDeleteTest.testDeepDelete_SingleRead.xml")
221
    public void testDeepDelete_SingleRead(){
222
        UUID sequenceA1Uuid = UUID.fromString("3db46d26-94ef-4759-aad8-42d0b9aea9b6");
223
        UUID sequenceA2Uuid = UUID.fromString("afa3771c-2b9d-46d7-82e0-8b9c050706e3");
224
        UUID sequenceB1Uuid = UUID.fromString("d7199db5-708e-470a-a573-9c760dd07cd1");
225
        UUID sequenceB2Uuid = UUID.fromString("1cb83575-38ea-4a8c-9418-d87163f425ce");
226
        UUID singleReadAUuid = UUID.fromString("82f538a1-2274-4d55-b27b-ed2f004ab5cd");
227
        UUID singleReadBUuid = UUID.fromString("fc74199a-89dc-40a0-9cbd-08cebebff4b5");
228

    
229
        //how the XML was generated
230
//        Sequence sequenceA1 = Sequence.NewInstance("A");
231
//        Sequence sequenceA2 = Sequence.NewInstance("T");
232
//        Sequence sequenceB1 = Sequence.NewInstance("C");
233
//        Sequence sequenceB2 = Sequence.NewInstance("G");
234
//
235
//        SingleRead singleReadA = SingleRead.NewInstance();
236
//        SingleRead singleReadB = SingleRead.NewInstance();
237
//
238
//        sequenceA1.setUuid(sequenceA1Uuid);
239
//        sequenceA2.setUuid(sequenceA2Uuid);
240
//        sequenceB1.setUuid(sequenceB1Uuid);
241
//        sequenceB1.setUuid(sequenceB2Uuid);
242
//        singleReadA.setUuid(singleReadAUuid);
243
//        singleReadB.setUuid(singleReadBUuid);
244
//
245
//        SingleReadAlignment.NewInstance(sequenceA1, singleReadA);
246
//        SingleReadAlignment.NewInstance(sequenceA2, singleReadA);
247
//        SingleReadAlignment.NewInstance(sequenceB1, singleReadB);
248
//        SingleReadAlignment.NewInstance(sequenceB2, singleReadB);
249
//
250
//        sequenceService.save(sequenceA1);
251
//        sequenceService.save(sequenceA2);
252
//        sequenceService.save(sequenceB1);
253
//        sequenceService.save(sequenceB2);
254
//
255
//        commitAndStartNewTransaction(null);
256
//
257
//        setComplete();
258
//        endTransaction();
259
//
260
//        try {
261
//            writeDbUnitDataSetFile(new String[] {
262
//                    "SpecimenOrObservationBase",
263
//                    "SpecimenOrObservationBase_DerivationEvent",
264
//                    "DerivationEvent",
265
//                    "Sequence",
266
//                    "SingleRead",
267
//                    "SingleReadAlignment",
268
//                    "Amplification",
269
//                    "AmplificationResult",
270
//                    "DescriptionElementBase",
271
//                    "DescriptionBase",
272
//                    "TaxonBase",
273
//                    "TypeDesignationBase",
274
//                    "TaxonName",
275
//                    "TaxonName_TypeDesignationBase",
276
//                    "HomotypicalGroup"
277
//            }, "testDeepDelete_SingleRead");
278
//        } catch (FileNotFoundException e) {
279
//            e.printStackTrace();
280
//        }
281

    
282
        DeleteResult deleteResult = null;
283
        SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
284
        config.setDeleteMolecularData(true);
285
        config.setDeleteChildren(true);
286

    
287
        Sequence sequenceA1 = sequenceService.load(sequenceA1Uuid);
288
        Sequence sequenceA2 = sequenceService.load(sequenceA2Uuid);
289
        Sequence sequenceB1 = sequenceService.load(sequenceB1Uuid);
290
        Sequence sequenceB2 = sequenceService.load(sequenceB2Uuid);
291
        SingleRead singleReadA = singleReadDao.load(singleReadAUuid);
292
        SingleRead singleReadB = singleReadDao.load(singleReadBUuid);
293

    
294
        //check initial state
295
        assertNotNull(sequenceA1);
296
        assertNotNull(sequenceA2);
297
        assertNotNull(sequenceB1);
298
        assertNotNull(sequenceB2);
299
        assertNotNull(singleReadA);
300
        assertNotNull(singleReadB);
301
        assertEquals("number of sequences incorrect", 4, sequenceService.count(Sequence.class));
302
        assertEquals("incorrect number of single reads", 2, singleReadDao.count());
303

    
304
        //A: delete singleRead
305
        //delete singleReadA from sequenceA1 (singleReadA should NOT be deleted)
306
        deleteResult = sequenceService.deleteSingleRead(singleReadA, sequenceA1);
307
        assertTrue(deleteResult.toString(), deleteResult.isOk());
308
        assertEquals("incorrect number of single reads", 2, singleReadDao.count());
309
        assertEquals(0, sequenceA1.getSingleReadAlignments().size());
310
        assertNotNull(singleReadDao.load(singleReadAUuid));
311

    
312
        //delete singleReadA from sequenceA2 (singleReadA should be deleted)
313
        deleteResult = sequenceService.deleteSingleRead(singleReadA, sequenceA2);
314
        assertTrue(deleteResult.toString(), deleteResult.isOk());
315
        assertEquals("incorrect number of single reads", 1, singleReadDao.count());
316
        assertEquals(0, sequenceA2.getSingleReadAlignments().size());
317
        assertTrue(singleReadDao.load(singleReadAUuid)==null);
318

    
319
        //B: delete sequence
320
        //delete sequenceB1 (singleReadB should NOT be deleted)
321
        deleteResult = sequenceService.delete(sequenceB1Uuid);
322
        assertTrue(deleteResult.toString(), deleteResult.isOk());
323
        assertEquals("incorrect number of single reads", 1, singleReadDao.count());
324
        assertNotNull(singleReadDao.load(singleReadBUuid));
325

    
326
        //delete sequenceB1 (singleReadB should be deleted)
327
        deleteResult = sequenceService.delete(sequenceB2Uuid);
328
        assertTrue(deleteResult.toString(), deleteResult.isOk());
329
        assertEquals("incorrect number of single reads", 0, singleReadDao.count());
330
        assertTrue(singleReadDao.load(singleReadBUuid)==null);
331
    }
332

    
333
    @Test
334
    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="OccurrenceServiceDeepDeleteTest.testDeepDelete_FieldUnitWithSiblingDerivatives.xml")
335
    public void testDeepDelete_FieldUnitWithSiblingDerivatives(){
336
        String assertMessage = "Incorrect number of specimens after deletion.";
337
        DeleteResult deleteResult = null;
338
        SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
339
        config.setDeleteChildren(true);
340

    
341
        FieldUnit fieldUnit = (FieldUnit) occurrenceService.load(FIELD_UNIT_UUID);
342

    
343
        //check initial state
344
        assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
345
        assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
346
        assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class));
347
        assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
348

    
349
        //delete field unit
350
        deleteResult = occurrenceService.delete(fieldUnit, config);
351
        assertTrue(deleteResult.toString(), deleteResult.isOk());
352
        assertEquals(assertMessage, 0, occurrenceService.count(SpecimenOrObservationBase.class));
353
        assertEquals(assertMessage, 0, occurrenceService.count(FieldUnit.class));
354
        assertEquals(assertMessage, 0, occurrenceService.count(DerivedUnit.class));
355
        assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
356
    }
357

    
358

    
359
    @Test
360
    @DataSet(value="OccurrenceServiceDeepDeleteTest.testDeleteStepByStep.xml", loadStrategy=CleanSweepInsertLoadStrategy.class)
361
    public void testDeleteDerivateHierarchyStepByStep(){
362
        UUID fieldUnitUuid = UUID.fromString("4d91a9bc-2af7-40f8-b6e6-545305301807");
363
        UUID derivedUnitUuid = UUID.fromString("f9c57904-e512-4927-90ad-f3833cdef967");
364
        UUID tissueSampleUuid = UUID.fromString("14b92fce-1236-455b-ba46-2a7e35d9230e");
365
        UUID dnaSampleUuid = UUID.fromString("60c31688-edec-4796-aa2f-28a7ea12256b");
366
        UUID sequenceUuid = UUID.fromString("24804b67-d6f7-48e5-811a-e7240230d305");
367

    
368
        String assertMessage = "Incorrect number of specimens after deletion.";
369
        DeleteResult deleteResult = null;
370
        SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
371

    
372
        FieldUnit fieldUnit = (FieldUnit) occurrenceService.load(fieldUnitUuid);
373
        DerivedUnit derivedUnit = (DerivedUnit) occurrenceService.load(derivedUnitUuid);
374
        DerivedUnit tissueSample = (DerivedUnit) occurrenceService.load(tissueSampleUuid);
375
        DnaSample dnaSample = (DnaSample) occurrenceService.load(dnaSampleUuid);
376
        Sequence consensusSequence = sequenceService.load(sequenceUuid);
377

    
378
        //check initial state
379
        assertNotNull(fieldUnit);
380
        assertNotNull(derivedUnit);
381
        assertNotNull(tissueSample);
382
        assertNotNull(dnaSample);
383
        assertNotNull(consensusSequence);
384

    
385
        assertEquals(assertMessage, 4, occurrenceService.count(SpecimenOrObservationBase.class));
386
        assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
387
        assertEquals(assertMessage, 3, occurrenceService.count(DerivedUnit.class));
388
        assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
389
        assertEquals("incorrect number of amplification results", 1, dnaSample.getAmplificationResults().size());
390
        assertEquals("number of sequences incorrect", 1, dnaSample.getSequences().size());
391
        assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
392
        assertEquals("incorrect number of single reads", 1, consensusSequence.getSingleReads().size());
393
        assertEquals(consensusSequence.getSingleReads().iterator().next(), dnaSample.getAmplificationResults().iterator().next().getSingleReads().iterator().next());
394

    
395
        //allow deletion of molecular data
396
        config.setDeleteMolecularData(true);
397

    
398
        SingleRead singleRead = dnaSample.getAmplificationResults().iterator().next().getSingleReads().iterator().next();
399
        deleteResult = sequenceService.deleteSingleRead(singleRead, consensusSequence);
400
        assertTrue(deleteResult.toString(), deleteResult.isOk());
401
        assertEquals("incorrect number of single reads", 0, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
402
        assertEquals("incorrect number of single reads", 0, consensusSequence.getSingleReads().size());
403
        assertEquals("incorrect number of single reads", 0, singleReadDao.count());
404

    
405
        //delete sequence
406
        deleteResult = sequenceService.delete(consensusSequence);
407
        assertTrue(deleteResult.toString(), deleteResult.isOk());
408
        assertEquals("number of sequences incorrect", 0, dnaSample.getSequences().size());
409

    
410

    
411
        //delete dna sample
412
        deleteResult = occurrenceService.delete(dnaSample, config);
413
        assertTrue(deleteResult.toString(), deleteResult.isOk());
414
        assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
415
        assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
416
        assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class));
417
        assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
418

    
419
        //delete tissue sample
420
        deleteResult = occurrenceService.delete(tissueSample, config);
421
        assertTrue(deleteResult.toString(), deleteResult.isOk());
422
        assertEquals(assertMessage, 2, occurrenceService.count(SpecimenOrObservationBase.class));
423
        assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
424
        assertEquals(assertMessage, 1, occurrenceService.count(DerivedUnit.class));
425
        assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
426

    
427
        //delete derived unit
428
        deleteResult = occurrenceService.delete(derivedUnit, config);
429
        assertTrue(deleteResult.toString(), deleteResult.isOk());
430
        assertEquals(assertMessage, 1, occurrenceService.count(SpecimenOrObservationBase.class));
431
        assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
432
        assertEquals(assertMessage, 0, occurrenceService.count(DerivedUnit.class));
433
        assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
434

    
435
        //delete field unit
436
        deleteResult = occurrenceService.delete(fieldUnit, config);
437

    
438
        assertTrue(deleteResult.toString(), deleteResult.isOk());
439
        assertEquals(assertMessage, 0, occurrenceService.count(SpecimenOrObservationBase.class));
440
        assertEquals(assertMessage, 0, occurrenceService.count(FieldUnit.class));
441
        assertEquals(assertMessage, 0, occurrenceService.count(DerivedUnit.class));
442
        assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
443
    }
444

    
445
    @Override
446
//    @Test
447
    public void createTestDataSet() throws FileNotFoundException {
448
        UUID sequenceA1Uuid = UUID.fromString("3db46d26-94ef-4759-aad8-42d0b9aea9b6");
449
        UUID sequenceA2Uuid = UUID.fromString("afa3771c-2b9d-46d7-82e0-8b9c050706e3");
450
        UUID sequenceB1Uuid = UUID.fromString("d7199db5-708e-470a-a573-9c760dd07cd1");
451
        UUID sequenceB2Uuid = UUID.fromString("1cb83575-38ea-4a8c-9418-d87163f425ce");
452
        UUID singleReadAUuid = UUID.fromString("82f538a1-2274-4d55-b27b-ed2f004ab5cd");
453
        UUID singleReadBUuid = UUID.fromString("fc74199a-89dc-40a0-9cbd-08cebebff4b5");
454

    
455
        //how the XML was generated
456
        Sequence sequenceA1 = Sequence.NewInstance("A");
457
        Sequence sequenceA2 = Sequence.NewInstance("T");
458
        Sequence sequenceB1 = Sequence.NewInstance("C");
459
        Sequence sequenceB2 = Sequence.NewInstance("G");
460

    
461
        SingleRead singleReadA = SingleRead.NewInstance();
462
        SingleRead singleReadB = SingleRead.NewInstance();
463

    
464
        sequenceA1.setUuid(sequenceA1Uuid);
465
        sequenceA2.setUuid(sequenceA2Uuid);
466
        sequenceB1.setUuid(sequenceB1Uuid);
467
        sequenceB1.setUuid(sequenceB2Uuid);
468
        singleReadA.setUuid(singleReadAUuid);
469
        singleReadB.setUuid(singleReadBUuid);
470

    
471
        SingleReadAlignment.NewInstance(sequenceA1, singleReadA);
472
        SingleReadAlignment.NewInstance(sequenceA2, singleReadA);
473
        SingleReadAlignment.NewInstance(sequenceB1, singleReadB);
474
        SingleReadAlignment.NewInstance(sequenceB2, singleReadB);
475

    
476
        sequenceService.save(sequenceA1);
477
        sequenceService.save(sequenceA2);
478
        sequenceService.save(sequenceB1);
479
        sequenceService.save(sequenceB2);
480

    
481
        commitAndStartNewTransaction(null);
482

    
483
        setComplete();
484
        endTransaction();
485

    
486
        try {
487
            writeDbUnitDataSetFile(new String[] {
488
                    "SpecimenOrObservationBase",
489
                    "SpecimenOrObservationBase_DerivationEvent",
490
                    "DerivationEvent",
491
                    "Sequence",
492
                    "SingleRead",
493
                    "SingleReadAlignment",
494
                    "Amplification",
495
                    "AmplificationResult",
496
                    "DescriptionElementBase",
497
                    "DescriptionBase",
498
                    "TaxonBase",
499
                    "TypeDesignationBase",
500
                    "TaxonName",
501
                    "TaxonName_TypeDesignationBase",
502
                    "HomotypicalGroup"
503
            }, "testDeepDelete_SingleRead", true);
504
        } catch (FileNotFoundException e) {
505
            e.printStackTrace();
506
        }
507

    
508
        System.out.println(sequenceA1.getUuid());
509
        System.out.println(sequenceA2.getUuid());
510
        System.out.println(sequenceB1.getUuid());
511
        System.out.println(sequenceB2.getUuid());
512
        System.out.println(singleReadA.getUuid());
513
        System.out.println(singleReadB.getUuid());
514
    }
515
}
(15-15/37)