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
 */
49
public class OccurrenceServiceDeepDeleteTest extends CdmTransactionalIntegrationTest {
50

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

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

    
60
    @SpringBeanByType
61
    private IOccurrenceService occurrenceService;
62

    
63
    @SpringBeanByType
64
    private IEventBaseService eventService;
65

    
66
    @SpringBeanByType
67
    private ISingleReadDao singleReadDao;
68

    
69
    @SpringBeanByType
70
    private ISequenceService sequenceService;
71

    
72
    @SpringBeanByType
73
    private INameService nameService;
74

    
75

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

    
80

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

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

    
94
        //check initial state
95
        assertEquals(assertMessage, 6, occurrenceService.count(SpecimenOrObservationBase.class));
96
        assertEquals(assertMessage, 4, eventService.count(DerivationEvent.class));
97
        assertEquals(assertMessage, 2, occurrenceService.count(FieldUnit.class));
98
        assertEquals(assertMessage, 4, occurrenceService.count(DerivedUnit.class));
99
        assertEquals(assertMessage, 2, occurrenceService.count(DnaSample.class));
100
        assertEquals("incorrect number of amplification results", 1, dnaSample.getAmplificationResults().size());
101
        assertEquals("number of sequences incorrect", 1, dnaSample.getSequences().size());
102
        assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
103
        assertEquals("incorrect number of gathering events", 1, eventService.count(GatheringEvent.class));
104
        //delete field unit
105
        deleteResult = occurrenceService.delete(fieldUnit, config);
106
        assertTrue(deleteResult.toString(), deleteResult.isOk());
107
        assertEquals(assertMessage, 2, eventService.count(DerivationEvent.class));
108
        assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
109
        assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
110
        assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class));
111
        assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
112
        assertEquals("incorrect number of gathering events", 1, eventService.count(GatheringEvent.class));
113

    
114

    
115
        deleteResult = occurrenceService.delete(fieldUnit2, config);
116
        assertEquals(assertMessage, 0, eventService.count(GatheringEvent.class));
117
    }
118

    
119
    @Test
120
    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="OccurrenceServiceTest.testDeleteDerivateHierarchyStepByStep.xml")
121
    public void testDeepDelete_FieldUnitWithTypeDesignation(){
122

    
123

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

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

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

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

    
172
        DerivedUnit derivedUnit = (DerivedUnit) occurrenceService.load(DERIVED_UNIT_UUID);
173
        DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID);
174

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

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

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

    
202
        DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID);
203

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

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

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

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

    
285
        DeleteResult deleteResult = null;
286
        SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
287
        config.setDeleteMolecularData(true);
288
        config.setDeleteChildren(true);
289

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

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

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

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

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

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

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

    
344
        FieldUnit fieldUnit = (FieldUnit) occurrenceService.load(FIELD_UNIT_UUID);
345

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

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

    
361

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

    
371
        String assertMessage = "Incorrect number of specimens after deletion.";
372
        DeleteResult deleteResult = null;
373
        SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
374

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

    
381
        //check initial state
382
        assertNotNull(fieldUnit);
383
        assertNotNull(derivedUnit);
384
        assertNotNull(tissueSample);
385
        assertNotNull(dnaSample);
386
        assertNotNull(consensusSequence);
387

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

    
398
        //allow deletion of molecular data
399
        config.setDeleteMolecularData(true);
400

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

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

    
413

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

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

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

    
438
        //delete field unit
439
        deleteResult = occurrenceService.delete(fieldUnit, config);
440

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

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

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

    
464
        SingleRead singleReadA = SingleRead.NewInstance();
465
        SingleRead singleReadB = SingleRead.NewInstance();
466

    
467
        sequenceA1.setUuid(sequenceA1Uuid);
468
        sequenceA2.setUuid(sequenceA2Uuid);
469
        sequenceB1.setUuid(sequenceB1Uuid);
470
        sequenceB1.setUuid(sequenceB2Uuid);
471
        singleReadA.setUuid(singleReadAUuid);
472
        singleReadB.setUuid(singleReadBUuid);
473

    
474
        SingleReadAlignment.NewInstance(sequenceA1, singleReadA);
475
        SingleReadAlignment.NewInstance(sequenceA2, singleReadA);
476
        SingleReadAlignment.NewInstance(sequenceB1, singleReadB);
477
        SingleReadAlignment.NewInstance(sequenceB2, singleReadB);
478

    
479
        sequenceService.save(sequenceA1);
480
        sequenceService.save(sequenceA2);
481
        sequenceService.save(sequenceB1);
482
        sequenceService.save(sequenceB2);
483

    
484
        commitAndStartNewTransaction(null);
485

    
486
        setComplete();
487
        endTransaction();
488

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

    
511
        System.out.println(sequenceA1.getUuid());
512
        System.out.println(sequenceA2.getUuid());
513
        System.out.println(sequenceB1.getUuid());
514
        System.out.println(sequenceB2.getUuid());
515
        System.out.println(singleReadA.getUuid());
516
        System.out.println(singleReadB.getUuid());
517
    }
518
}
(16-16/40)