ee12ee448c579e81d0b44fe27a3b7f023b5aea52
[taxeditor.git] / eu.etaxonomy.taxeditor.test / src / test / java / eu / etaxonomy / cdm / model / TaxonNameEditorTest.java
1 // $Id$
2 /**
3 * Copyright (C) 2015 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.model;
11
12 import java.util.ArrayList;
13 import java.util.Iterator;
14 import java.util.List;
15 import java.util.Set;
16 import java.util.UUID;
17
18 import org.apache.log4j.Logger;
19 import org.eclipse.core.commands.ExecutionException;
20 import org.junit.Assert;
21 import org.junit.Before;
22 import org.junit.BeforeClass;
23 import org.junit.Test;
24 import org.unitils.dbunit.annotation.DataSet;
25
26 import eu.etaxonomy.cdm.api.service.IClassificationService;
27 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
28 import eu.etaxonomy.cdm.api.service.ITaxonService;
29 import eu.etaxonomy.cdm.model.common.Language;
30 import eu.etaxonomy.cdm.model.name.BotanicalName;
31 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
32 import eu.etaxonomy.cdm.model.name.NonViralName;
33 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
34 import eu.etaxonomy.cdm.model.taxon.Synonym;
35 import eu.etaxonomy.cdm.model.taxon.Taxon;
36 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
37 import eu.etaxonomy.taxeditor.editor.name.operation.CreateSynonymInExistingHomotypicalGroupOperation;
38 import eu.etaxonomy.taxeditor.operations.OperationTestBase;
39 import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher;
40 import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
41 import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
42 import eu.etaxonomy.taxeditor.session.MockSessionOwner;
43
44 /**
45 * @author cmathew
46 * @date 3 Feb 2015
47 *
48 */
49 @DataSet
50 public class TaxonNameEditorTest extends OperationTestBase {
51
52 private static final Logger logger = Logger.getLogger(TaxonNameEditorTest.class);
53
54 ITaxonNodeService taxonNodeService = getRemoteApplicationController().getTaxonNodeService();
55 ITaxonService taxonService = getRemoteApplicationController().getTaxonService();
56 IClassificationService classificationService = getRemoteApplicationController().getClassificationService();
57
58
59 private CdmTransientEntityCacher cacher;
60 private ICdmEntitySessionEnabled sessionOwner;
61
62 private ICdmEntitySession cdmEntitySession;
63
64 Language english = Language.getLanguageFromUuid(Language.uuidEnglish);
65
66
67
68 @BeforeClass
69 public static void initializePolytomousKeyTest() {
70 }
71
72 @Before
73 public void initializeSession() {
74 sessionOwner = new MockSessionOwner();
75 cdmEntitySession = cdmEntitySessionManager.newSession(sessionOwner, true);
76 cacher = getCacher(sessionOwner);
77 }
78
79 @Test
80 public void testAddHomotypicSynonym() throws ExecutionException {
81 UUID taxonNodeUuid = UUID.fromString("ce54c396-3694-47f2-abb0-1d7b7e057985");
82
83 TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid);
84 Taxon taxon = taxonNode.getTaxon();
85 HomotypicalGroup group = taxon.getHomotypicGroup();
86 BotanicalName newSynonymName = BotanicalName.NewInstance(null);
87 newSynonymName.setTitleCache("New Synonym", true);
88 operation = new CreateSynonymInExistingHomotypicalGroupOperation("Create Synonym In Existing Homotypical Group",
89 undoContext, taxon, group, newSynonymName, postOperation);
90
91 operation.execute(monitor, info);
92 taxonNodeService.merge(taxonNode);
93 Assert.assertEquals(taxon.getHomotypicGroup().getTypifiedNames().size(), 2);
94 Assert.assertEquals(taxon.getSynonyms().size(), 1);
95 Iterator<Synonym> synonymItr = taxon.getSynonyms().iterator();
96 Synonym synonym = synonymItr.next();
97 Assert.assertTrue(taxon.getHomotypicGroup().getTypifiedNames().contains(synonym.getName()));
98 }
99
100 @Test
101 public void addHeterotypicSynonym() throws ExecutionException {
102 UUID taxonNodeUuid = UUID.fromString("ce54c396-3694-47f2-abb0-1d7b7e057985");
103
104 TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid);
105 Taxon taxon = taxonNode.getTaxon();
106 HomotypicalGroup group = taxon.getHomotypicGroup();
107 BotanicalName newSynonymName = BotanicalName.NewInstance(null);
108 newSynonymName.setTitleCache("New Synonym", true);
109 operation = new CreateSynonymInExistingHomotypicalGroupOperation("Create Synonym In Existing Homotypical Group",
110 undoContext, taxon, group, newSynonymName, postOperation);
111
112 operation.execute(monitor, info);
113 taxonNodeService.merge(taxonNode);
114
115
116 }
117
118 @Test
119 public void addDeleteAddHomotypicSynonym() throws ExecutionException {
120 UUID taxonNodeUuid = UUID.fromString("ce54c396-3694-47f2-abb0-1d7b7e057985");
121
122 TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid);
123 Taxon taxon = taxonNode.getTaxon();
124 HomotypicalGroup group = taxon.getHomotypicGroup();
125 BotanicalName newSynonymName = BotanicalName.NewInstance(null);
126 newSynonymName.setTitleCache("New Synonym", true);
127 operation = new CreateSynonymInExistingHomotypicalGroupOperation("Create Synonym In Existing Homotypical Group",
128 undoContext, taxon, group, newSynonymName, postOperation);
129
130 operation.execute(monitor, info);
131 taxonNodeService.merge(taxonNode);
132 Assert.assertEquals(taxon.getHomotypicGroup().getTypifiedNames().size(), 2);
133
134 Set<Synonym> synonyms = taxon.getSynonyms();
135 for(Synonym synonym : synonyms) {
136 taxonService.deleteSynonym(synonym.getUuid(), taxon.getUuid(), null);
137 }
138
139 taxonNodeService.merge(taxonNode);
140
141 newSynonymName = BotanicalName.NewInstance(null);
142 newSynonymName.setTitleCache("Another New Synonym", true);
143 operation = new CreateSynonymInExistingHomotypicalGroupOperation("Create Synonym In Existing Homotypical Group",
144 undoContext, taxon, group, newSynonymName, postOperation);
145
146 operation.execute(monitor, info);
147 taxonNodeService.merge(taxonNode);
148 }
149
150 @Test
151 public void swapSynonymWithAcceptedTaxon() throws ExecutionException {
152 List<TaxonNode> rootEntities = new ArrayList<TaxonNode>();
153 UUID taxonNodeUuid = UUID.fromString("d425a971-1abe-4895-9e1f-1e5c8ff1c84c");
154 TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid);
155 rootEntities.add(taxonNode);
156 sessionOwner = new MockSessionOwner(rootEntities);
157 cdmEntitySession = cdmEntitySessionManager.newSession(sessionOwner, true);
158
159 UUID taxonUuid = UUID.fromString("9763e5f0-6cd4-4d96-b8a4-4420854f7727");
160 Taxon taxon = (Taxon)taxonService.load(taxonUuid);
161 TaxonNameBase taxonName = taxon.getName();
162
163 UUID synonymUuid = UUID.fromString("1eb173bd-b174-4162-8ff5-5136d8f1e746");
164 Synonym synonym = (Synonym)taxonService.load(synonymUuid);
165 TaxonNameBase synonymName = synonym.getName();
166
167 taxonService.swapSynonymAndAcceptedTaxon(synonym.getUuid(), taxon.getUuid());
168
169 Assert.assertEquals(taxonName, synonym.getName());
170 Assert.assertEquals(synonymName, taxon.getName());
171 }
172
173 @Test
174 public void addTaxon() {
175 NonViralName taxonName = NonViralName.NewInstance(null);
176 Taxon taxon = Taxon.NewInstance(taxonName, null);
177 taxonService.merge(taxon);
178 }
179
180 }
181