1
|
/**
|
2
|
* Copyright (C) 2007 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
|
|
10
|
package eu.etaxonomy.cdm.api.service;
|
11
|
|
12
|
import static org.junit.Assert.assertNotNull;
|
13
|
import static org.junit.Assert.assertNull;
|
14
|
|
15
|
import java.io.FileNotFoundException;
|
16
|
import java.util.UUID;
|
17
|
|
18
|
import org.junit.Assert;
|
19
|
import org.junit.Before;
|
20
|
import org.junit.Test;
|
21
|
import org.unitils.dbunit.annotation.DataSet;
|
22
|
import org.unitils.dbunit.datasetloadstrategy.impl.RefreshLoadStrategy;
|
23
|
import org.unitils.spring.annotation.SpringBeanByType;
|
24
|
|
25
|
import eu.etaxonomy.cdm.api.service.config.NodeDeletionConfigurator.ChildHandling;
|
26
|
import eu.etaxonomy.cdm.api.service.config.TermNodeDeletionConfigurator;
|
27
|
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
|
28
|
import eu.etaxonomy.cdm.model.common.ITreeNode;
|
29
|
import eu.etaxonomy.cdm.model.description.Feature;
|
30
|
import eu.etaxonomy.cdm.model.term.TermNode;
|
31
|
import eu.etaxonomy.cdm.model.term.TermTree;
|
32
|
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
|
33
|
|
34
|
/**
|
35
|
* @author a.mueller
|
36
|
* @since 2013-09-28
|
37
|
*/
|
38
|
public class FeatureNodeServiceImplTest extends CdmTransactionalIntegrationTest{
|
39
|
|
40
|
private static final String sep = ITreeNode.separator;
|
41
|
private static final String pref = ITreeNode.treePrefix;
|
42
|
|
43
|
@SpringBeanByType
|
44
|
private IFeatureNodeService featureNodeService;
|
45
|
|
46
|
@SpringBeanByType
|
47
|
private IFeatureTreeService featureTreeService;
|
48
|
|
49
|
@SpringBeanByType
|
50
|
private ITermService termService;
|
51
|
|
52
|
|
53
|
// private static final UUID t2Uuid = UUID.fromString("55c3e41a-c629-40e6-aa6a-ff274ac6ddb1");
|
54
|
// private static final UUID t3Uuid = UUID.fromString("2659a7e0-ff35-4ee4-8493-b453756ab955");
|
55
|
private static final UUID featureTreeUuid = UUID.fromString("6c2bc8d9-ee62-4222-be89-4a8e31770878");
|
56
|
private static final UUID featureTree2Uuid = UUID.fromString("43d67247-936f-42a3-a739-bbcde372e334");
|
57
|
private static final UUID node2Uuid= UUID.fromString("484a1a77-689c-44be-8e65-347d835f47e8");
|
58
|
private static final UUID node3Uuid = UUID.fromString("2d41f0c2-b785-4f73-a436-cc2d5e93cc5b");
|
59
|
private static final UUID node4Uuid = UUID.fromString("fdaec4bd-c78e-44df-ae87-28f18110968c");
|
60
|
private static final UUID node5Uuid = UUID.fromString("c4d5170a-7967-4dac-ab76-ae2019eefde5");
|
61
|
private static final UUID node6Uuid = UUID.fromString("b419ba5e-9c8b-449c-ad86-7abfca9a7340");
|
62
|
|
63
|
private TermNode<Feature> node3;
|
64
|
private TermNode<Feature> node2;
|
65
|
|
66
|
|
67
|
@Before
|
68
|
public void setUp() throws Exception {}
|
69
|
|
70
|
@Test
|
71
|
public final void testIndexCreatRoot() {
|
72
|
TermTree<Feature> featureTree = TermTree.NewFeatureInstance();
|
73
|
featureTreeService.save(featureTree);
|
74
|
|
75
|
Feature feature = (Feature)termService.find(914);
|
76
|
TermNode<Feature> newNode = featureTree.getRoot().addChild(feature);
|
77
|
featureTreeService.save(featureTree);
|
78
|
|
79
|
featureNodeService.saveOrUpdate(newNode);
|
80
|
|
81
|
commitAndStartNewTransaction(/*new String[]{"FeatureNode"}*/);
|
82
|
newNode = featureNodeService.load(newNode.getUuid());
|
83
|
Assert.assertEquals("", sep + pref+featureTree.getId()+sep + featureTree.getRoot().getId()+ sep + newNode.getId() + sep, newNode.treeIndex());
|
84
|
}
|
85
|
|
86
|
|
87
|
@Test
|
88
|
@DataSet(loadStrategy=RefreshLoadStrategy.class, value="FeatureNodeServiceImplTest-indexing.xml")
|
89
|
public final void testIndexCreateNode() {
|
90
|
|
91
|
Feature feature = (Feature)termService.find(914);
|
92
|
|
93
|
node2 = featureNodeService.load(node2Uuid);
|
94
|
String oldTreeIndex = node2.treeIndex();
|
95
|
|
96
|
TermNode<Feature> newNode = node2.addChild(feature);
|
97
|
featureNodeService.saveOrUpdate(node2);
|
98
|
|
99
|
commitAndStartNewTransaction(new String[]{"FeatureNode"});
|
100
|
newNode = featureNodeService.load(newNode.getUuid());
|
101
|
Assert.assertEquals("", oldTreeIndex + newNode.getId() + sep, newNode.treeIndex());
|
102
|
}
|
103
|
|
104
|
|
105
|
@Test
|
106
|
@DataSet(loadStrategy=RefreshLoadStrategy.class ,value="FeatureNodeServiceImplTest-indexing.xml")
|
107
|
//this may fail in single test if it is the first test as long as #8174 is not fixed
|
108
|
public final void testIndexMoveNode() {
|
109
|
//in feature tree
|
110
|
@SuppressWarnings("unused")
|
111
|
TermTree<Feature> featureTree = featureTreeService.load(featureTreeUuid);
|
112
|
node2 = featureNodeService.load(node2Uuid);
|
113
|
node3 = featureNodeService.load(node3Uuid);
|
114
|
node3.addChild(node2);
|
115
|
featureNodeService.saveOrUpdate(node2);
|
116
|
commitAndStartNewTransaction(new String[]{"FeatureNode"});
|
117
|
TermNode<?> node6 = featureNodeService.load(node6Uuid);
|
118
|
Assert.assertEquals("Node6 treeindex is not correct", node3.treeIndex() + "2#4#6#", node6.treeIndex());
|
119
|
|
120
|
//root of new feature tree
|
121
|
TermTree<Feature> featureTree2 = featureTreeService.load(featureTree2Uuid);
|
122
|
node2 = featureNodeService.load(node2Uuid);
|
123
|
featureTree2.getRoot().addChild(node2);
|
124
|
featureNodeService.saveOrUpdate(node2);
|
125
|
commitAndStartNewTransaction(new String[]{"TaxonNode"});
|
126
|
node2 = featureNodeService.load(node2Uuid);
|
127
|
Assert.assertEquals("Node2 treeindex is not correct", "#t5002#7#2#", node2.treeIndex());
|
128
|
node6 = featureNodeService.load(node6Uuid);
|
129
|
Assert.assertEquals("Node6 treeindex is not correct", "#t5002#7#2#4#6#", node6.treeIndex());
|
130
|
|
131
|
//into new classification
|
132
|
node3 = featureNodeService.load(node3Uuid);
|
133
|
TermNode<Feature> node5 = featureNodeService.load(node5Uuid);
|
134
|
node5.addChild(node3);
|
135
|
featureNodeService.saveOrUpdate(node5);
|
136
|
commitAndStartNewTransaction(new String[]{"TaxonNode"});
|
137
|
node3 = featureNodeService.load(node3Uuid);
|
138
|
Assert.assertEquals("Node3 treeindex is not correct", "#t5002#7#2#5#3#", node3.treeIndex());
|
139
|
|
140
|
}
|
141
|
|
142
|
@Test //here we may have a test for testing delete of a node and attaching the children
|
143
|
//to its parents, however this depends on the way delete is implemented and therefore needs
|
144
|
//to wait until this is finally done
|
145
|
@DataSet(loadStrategy=RefreshLoadStrategy.class, value="FeatureNodeServiceImplTest-indexing.xml")
|
146
|
public final void testIndexDeleteNode() {
|
147
|
node2 = featureNodeService.load(node2Uuid);
|
148
|
TermNode<Feature> root = node2.getParent();
|
149
|
TermNodeDeletionConfigurator config = new TermNodeDeletionConfigurator();
|
150
|
config.setDeleteElement(false);
|
151
|
config.setChildHandling(ChildHandling.MOVE_TO_PARENT);
|
152
|
DeleteResult result = featureNodeService.deleteFeatureNode(node2Uuid, config);
|
153
|
commitAndStartNewTransaction(new String[]{"TaxonNode"});
|
154
|
TermTree<Feature> tree1 = featureTreeService.load(featureTreeUuid);
|
155
|
assertNotNull(tree1);
|
156
|
node2 = featureNodeService.load(node2Uuid);
|
157
|
assertNull(node2);
|
158
|
node3 = featureNodeService.load(node3Uuid);
|
159
|
assertNotNull(node3);
|
160
|
TermNode node4 = featureNodeService.load(node4Uuid);
|
161
|
assertNotNull(node4);
|
162
|
config.setDeleteElement(false);
|
163
|
config.setChildHandling(ChildHandling.DELETE);
|
164
|
result = featureNodeService.deleteFeatureNode(node4Uuid, config);
|
165
|
commitAndStartNewTransaction(new String[]{"TaxonNode"});
|
166
|
tree1 = featureTreeService.load(featureTreeUuid);
|
167
|
node4 = featureNodeService.load(node4Uuid);
|
168
|
assertNull(node4);
|
169
|
TermNode node6 = featureNodeService.load(node6Uuid);
|
170
|
assertNull(node6);
|
171
|
|
172
|
HibernateProxyHelper.deproxy(tree1, TermTree.class);
|
173
|
TermNode rootNode = HibernateProxyHelper.deproxy(tree1.getRoot(), TermNode.class);
|
174
|
assertNotNull(tree1);
|
175
|
featureTreeService.delete(tree1.getUuid());
|
176
|
commitAndStartNewTransaction(/*new String[]{"TaxonNode"}*/);
|
177
|
tree1 = featureTreeService.load(featureTreeUuid);
|
178
|
assertNull(tree1);
|
179
|
|
180
|
}
|
181
|
|
182
|
@Override
|
183
|
public void createTestDataSet() throws FileNotFoundException {}
|
184
|
}
|