merge trunk to cdm-3.3 branch
[cdmlib.git] / cdmlib-persistence / src / test / java / eu / etaxonomy / cdm / persistence / dao / hibernate / description / DescriptionElementDaoHibernateImplTest.java
1 // $Id$
2 /**
3 * Copyright (C) 2009 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.persistence.dao.hibernate.description;
11
12 import java.util.Map;
13 import java.util.UUID;
14
15 import org.apache.log4j.Logger;
16 import org.junit.Assert;
17 import org.junit.Before;
18 import org.junit.BeforeClass;
19 import org.junit.Ignore;
20 import org.junit.Test;
21 import org.unitils.dbunit.annotation.DataSet;
22 import org.unitils.dbunit.annotation.ExpectedDataSet;
23 import org.unitils.dbunit.datasetfactory.impl.MultiSchemaXmlDataSetFactory;
24 import org.unitils.spring.annotation.SpringBeanByType;
25
26 import eu.etaxonomy.cdm.model.common.Language;
27 import eu.etaxonomy.cdm.model.common.LanguageString;
28 import eu.etaxonomy.cdm.model.description.CategoricalData;
29 import eu.etaxonomy.cdm.model.description.Feature;
30 import eu.etaxonomy.cdm.model.description.State;
31 import eu.etaxonomy.cdm.model.description.StateData;
32 import eu.etaxonomy.cdm.model.description.TextData;
33 import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;
34 import eu.etaxonomy.cdm.persistence.dao.description.IDescriptionElementDao;
35 import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
36
37 /**
38 * @author a.mueller
39 * @date 25.11.2010
40 *
41 */
42 public class DescriptionElementDaoHibernateImplTest extends CdmTransactionalIntegrationTest{
43 private static final Logger logger = Logger.getLogger(DescriptionElementDaoHibernateImplTest.class);
44
45 @SpringBeanByType
46 IDescriptionElementDao descriptionElementDao;
47
48 @SpringBeanByType
49 IDefinedTermDao termDao;
50
51
52 private UUID uuidSingleTextData = UUID.fromString("31a0160a-51b2-4565-85cf-2be58cb561d6");
53 private UUID uuidDobuleTextData = UUID.fromString("50f6b799-3585-40a7-b69d-e7be77b2651a");
54
55 private boolean printDatasets = false;
56
57 /**
58 * @throws java.lang.Exception
59 */
60 @BeforeClass
61 public static void setUpBeforeClass() throws Exception {
62 }
63
64 /**
65 * @throws java.lang.Exception
66 */
67 @Before
68 public void setUp() throws Exception {
69 }
70
71 // ***************************** TESTS ************************************/
72
73
74
75 /**
76 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.description.DescriptionElementDaoImpl#countMedia(eu.etaxonomy.cdm.model.description.DescriptionElementBase)}.
77 */
78 @Test
79 public void testCountMedia() {
80 logger.warn("Not yet implemented");
81 }
82
83
84 /**
85 * See #2114
86 */
87 @Test
88 @DataSet // (value="DescriptionElementDaoHibernateImplTest.xml")
89 public void testRetrieveMultiLanguageString(){
90 // int count = descriptionElementDao.count(TextData.class);
91 // Assert.assertTrue("There must exist TextData", count > 0);
92
93 //test read
94 TextData textDataTwo = (TextData)descriptionElementDao.findByUuid(uuidDobuleTextData);
95 Assert.assertEquals("There should be exactly 2 languageText in the multilanguageText", 2, textDataTwo.size());
96 Assert.assertTrue("One language should be English", textDataTwo.containsKey(Language.ENGLISH()));
97 Language eng = Language.ENGLISH();
98 // System.out.println("English: " + eng.getLabel() + "("+ eng.getId() + ", " + eng.getUuid() + ")");
99 //
100 // for (Language lang: multiLangText.keySet()){
101 // System.out.println(lang.getLabel() + "("+ lang.getId() + ", " + lang.getUuid() + ")");
102 // boolean equal = lang.equals(eng);
103 // System.out.println(equal);
104 // }
105 // boolean contains = multiLangText.keySet().contains(eng);
106 // String et = doubleLanguageTextData.getText(eng);
107 LanguageString englishText = textDataTwo.getLanguageText(eng);
108 Assert.assertNotNull("English text should exist", englishText);
109 Assert.assertEquals("The English text should be correct", "Praesent vitae turpis vitae sapien sodales sagittis.", englishText.getText());
110 LanguageString czechText = textDataTwo.getLanguageText(Language.CZECH());
111 Assert.assertNotNull("Czech", czechText);
112 Assert.assertEquals("The Czech text should be correct", "A Czech translation for Praesent ...", czechText.getText());
113 }
114
115 /**
116 * See #2114
117 */
118 @Test
119 @DataSet //(value="DescriptionElementDaoHibernateImplTest.xml")
120 @ExpectedDataSet
121 public void testPersistMultiLanguageString(){
122
123 //test write
124 TextData singleLanguageTextData = (TextData)descriptionElementDao.findByUuid(uuidSingleTextData);
125 Map<Language, LanguageString> multiLangText = singleLanguageTextData.getMultilanguageText();
126 Assert.assertEquals("There should be exactly 1 languageText in the multilanguageText", 1, multiLangText.size());
127 Assert.assertTrue("The language should be English", multiLangText.containsKey(Language.ENGLISH()));
128 singleLanguageTextData.putText(Language.GERMAN(), "Ein test auf deutsch");
129 Assert.assertEquals("There should be exactly 2 languageText in the multilanguageText", 2, singleLanguageTextData.size());
130 String germanText = singleLanguageTextData.getText(Language.GERMAN());
131 Assert.assertNotNull("German text should exist", germanText);
132
133 LanguageString germanLanguageText = singleLanguageTextData.getLanguageText(Language.GERMAN());
134 Assert.assertNotNull("German language text should exist", germanLanguageText);
135
136 singleLanguageTextData.putText(Language.ENGLISH(), singleLanguageTextData.getText(Language.ENGLISH()));
137 descriptionElementDao.saveOrUpdate(singleLanguageTextData);
138
139 setComplete(); endTransaction();
140 try {if (printDatasets){printDataSet(System.out, new String[]{"LanguageString", "DescriptionElementBase", "DESCRIPTIONELEMENTBASE_LANGUAGESTRING"});}
141 } catch(Exception e) { logger.warn(e);}
142 }
143
144 /**
145 * See #2114
146 */
147 @Test
148 @DataSet //(value="DescriptionElementDaoHibernateImplTest.xml")
149 @ExpectedDataSet
150 public void testChangeLanguageString(){
151
152 //test write
153 TextData singleLanguageTextData = (TextData)descriptionElementDao.findByUuid(uuidSingleTextData);
154 Map<Language, LanguageString> multiLangText = singleLanguageTextData.getMultilanguageText();
155 Assert.assertEquals("There should be exactly 1 languageText in the multilanguageText", 1, multiLangText.size());
156 Assert.assertTrue("The language should be English", multiLangText.containsKey(Language.ENGLISH()));
157
158 singleLanguageTextData.putText(Language.ENGLISH(), "A new English text");
159 descriptionElementDao.saveOrUpdate(singleLanguageTextData);
160
161 setComplete(); endTransaction();
162 try {if (printDatasets){printDataSet(System.out, new String[]{"LanguageString", "DescriptionElementBase", "DESCRIPTIONELEMENTBASE_LANGUAGESTRING"});}
163 } catch(Exception e) { logger.warn(e);}
164 }
165
166 /**
167 * See #2114
168 */
169 @Test
170 @DataSet //(value="DescriptionElementDaoHibernateImplTest.xml")
171 @ExpectedDataSet
172 public void testRemoveLanguageString(){
173
174 //test write
175 TextData textDataTwo = (TextData)descriptionElementDao.findByUuid(uuidDobuleTextData);
176 Assert.assertEquals("There should be exactly 2 languageText in the multilanguageText", 2, textDataTwo.size());
177
178 Assert.assertTrue("The language should be English", textDataTwo.containsKey(Language.ENGLISH()));
179
180 textDataTwo.removeText(Language.ENGLISH());
181 Assert.assertEquals("There should be only 1 language left", 1, textDataTwo.size());
182 descriptionElementDao.saveOrUpdate(textDataTwo);
183
184 setComplete(); endTransaction();
185 try {if (printDatasets){printDataSet(System.out, new String[]{"LanguageString", "DescriptionElementBase", "DESCRIPTIONELEMENTBASE_LANGUAGESTRING"});}
186 } catch(Exception e) { logger.warn(e);}
187 }
188
189 /**
190 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.description.DescriptionElementDaoImpl#count(java.lang.Class, java.lang.String)}.
191 */
192 @Test
193 public void testCountClassOfQextendsDescriptionElementBaseString() {
194 logger.warn("Not yet implemented");
195 }
196
197 /**
198 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.description.DescriptionElementDaoImpl#getMedia(eu.etaxonomy.cdm.model.description.DescriptionElementBase, java.lang.Integer, java.lang.Integer, java.util.List)}.
199 */
200 @Test
201 public void testGetMedia() {
202 logger.warn("Not yet implemented");
203 }
204
205 /**
206 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.description.DescriptionElementDaoImpl#search(java.lang.Class, java.lang.String, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)}.
207 */
208 @Test
209 public void testSearch() {
210 logger.warn("Not yet implemented");
211 }
212
213 /**
214 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.description.DescriptionElementDaoImpl#purgeIndex()}.
215 */
216 @Test
217 public void testPurgeIndex() {
218 logger.warn("Not yet implemented");
219 }
220
221 /**
222 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.description.DescriptionElementDaoImpl#rebuildIndex()}.
223 */
224 @Test
225 public void testRebuildIndex() {
226 logger.warn("Not yet implemented");
227 }
228
229 /**
230 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.description.DescriptionElementDaoImpl#optimizeIndex()}.
231 */
232 @Test
233 public void testOptimizeIndex() {
234 logger.warn("Not yet implemented");
235 }
236
237 /**
238 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.description.DescriptionElementDaoImpl#count(java.lang.String)}.
239 */
240 @Test
241 public void testCountString() {
242 logger.warn("Not yet implemented");
243 }
244
245 /**
246 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.description.DescriptionElementDaoImpl#suggestQuery(java.lang.String)}.
247 */
248 @Test
249 public void testSuggestQuery() {
250 logger.warn("Not yet implemented");
251 }
252
253 @Test //cascading for modifying text didn't work
254 @ExpectedDataSet(factory=MultiSchemaXmlDataSetFactory.class)
255 @Ignore //FIXME unitils3 upgrade problem: Differences found between the expected data set and actual database content.
256 public void testSaveCategoricalData(){
257 UUID uuidDummyState = UUID.fromString("881b9c80-626d-47a6-b308-a63ee5f4178f");
258 // State state = State.NewInstance("TestState", "TestState", "TestState");
259 // termDao.saveOrUpdate(state);
260 State state = (State)termDao.findByUuid(uuidDummyState);
261 CategoricalData data = CategoricalData.NewInstance();
262 data.setUuid(UUID.fromString("5c3f2340-f675-4d50-af96-89a2a12993b8"));
263 data.setFeature(Feature.DESCRIPTION());
264 StateData stateData = StateData.NewInstance(state);
265 stateData.setUuid(UUID.fromString("04b9190d-d4ab-4c3a-8dec-8293dc820ddc"));
266 stateData.putModifyingText(Language.ENGLISH(), "test modifier");
267 LanguageString langString = stateData.getModifyingText().get(Language.ENGLISH());
268 langString.setUuid(UUID.fromString("53a91bd4-d758-47ec-a385-94799bdb9f32"));
269 data.addStateData(stateData);
270 // Modifier modifier = Modifier.NewInstance("my test modifier", "test", null);
271 // TODO still throws JDBC batch update exception, one reason may be that in hibernate_sequence nextVal for definedtermbase is "1"
272 // stateData.addModifier(modifier);
273
274 descriptionElementDao.save(data);
275
276 // commitAndStartNewTransaction(new String[]{"Hibernate_sequences","DescriptionElementBase","DescriptionElementBase_StateData","StateData_DefinedTermBase", "StateData", "StateData_LanguageString", "LanguageString"});
277 }
278
279 }