Project

General

Profile

Download (6.31 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2009 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.persistence.dao;
11

    
12
import static org.junit.Assert.assertFalse;
13
import static org.junit.Assert.assertNotNull;
14
import static org.junit.Assert.assertTrue;
15

    
16
import java.io.FileNotFoundException;
17
import java.util.ArrayList;
18
import java.util.List;
19
import java.util.UUID;
20

    
21
import org.hibernate.Hibernate;
22
import org.junit.After;
23
import org.junit.Before;
24
import org.junit.Ignore;
25
import org.junit.Test;
26
import org.unitils.dbunit.annotation.DataSet;
27
import org.unitils.spring.annotation.SpringBeanByType;
28

    
29
import eu.etaxonomy.cdm.model.common.LanguageString;
30
import eu.etaxonomy.cdm.model.description.TextData;
31
import eu.etaxonomy.cdm.model.name.NonViralName;
32
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
33
import eu.etaxonomy.cdm.model.view.AuditEvent;
34
import eu.etaxonomy.cdm.model.view.context.AuditEventContextHolder;
35
import eu.etaxonomy.cdm.persistence.dao.description.IDescriptionElementDao;
36
import eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao;
37
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
38

    
39
@DataSet
40
public class BeanInitializerIntegration extends CdmTransactionalIntegrationTest {
41

    
42
	@SpringBeanByType
43
	ITaxonNameDao taxonNameDao;
44

    
45
	@SpringBeanByType
46
	IDescriptionElementDao descriptionElementDao;
47

    
48
	UUID sphingidaeUuid;
49
	UUID textDataUuid;
50
	AuditEvent previousAuditEvent;
51

    
52
	@Before
53
	public void setUp() {
54
		sphingidaeUuid = UUID.fromString("9640a158-2bdb-4cbc-bff6-8f77e781f86b");
55
		textDataUuid = UUID.fromString("31a0160a-51b2-4565-85cf-2be58cb561d6");
56
		previousAuditEvent = new AuditEvent();
57
		previousAuditEvent.setRevisionNumber(1024);
58
		previousAuditEvent.setUuid(UUID.fromString("1f868a29-9127-4634-90c2-5024cc46be9d"));
59
		AuditEventContextHolder.clearContext(); // By default we're in the current view (i.e. view == null)
60
	}
61

    
62
	@After
63
	public void tearDown() {
64
		AuditEventContextHolder.clearContext();
65
	}
66

    
67
	/**
68
	 * Basic behavior here - we want to be able to initialize properties of this
69
	 * entity
70
	 */
71
	@Test
72
	@Ignore //FIXME homotypicalGroup is initialized even if it shouldn't
73
	public void testInitializeManyToOneProperty() {
74
		List<String> propertyPaths = new ArrayList<String>();
75
		propertyPaths.add("nomenclaturalReference");
76

    
77
		TaxonNameBase sphingidae = taxonNameDao.load(sphingidaeUuid, propertyPaths);
78
		setComplete();
79
		endTransaction();
80

    
81
		assertNotNull("Sphingidae should not be null",sphingidae);
82
		assertFalse("TaxonNameBase.homotypicalGroup should not be initialized",Hibernate.isInitialized(sphingidae.getHomotypicalGroup()));
83
		assertTrue("TaxonNameBase.nomenclaturalReference should be initialized",Hibernate.isInitialized(sphingidae.getNomenclaturalReference()));
84
	}
85

    
86
	/**
87
	 * Slightly more advanced - what happens if we try to initialize
88
	 * a non-existent property - i.e. if we retrieve an object which
89
	 * might be one of many subclasses, and try to initialize a
90
	 * property belonging to another subclass.
91
	 *
92
	 * The bean initialization code should silently catch the
93
	 * MethodNotFound exception (otherwise we would not be able to initialize
94
	 * any properties of a subclass).
95
	 */
96
	@Test
97
	public void testInitializeManyToOneSubclassProperty() {
98
		List<String> propertyPaths = new ArrayList<String>();
99
		propertyPaths.add("combinationAuthorship");
100
		propertyPaths.add("hybridRelationships");
101

    
102
		NonViralName sphingidae = (NonViralName)taxonNameDao.load(sphingidaeUuid, propertyPaths);
103
		setComplete();
104
		endTransaction();
105

    
106
		assertNotNull("Sphingidae should not be null",sphingidae);
107
		assertTrue("TaxonNameBase.nomenclaturalReference should be initialized",Hibernate.isInitialized(sphingidae.getCombinationAuthorship()));
108
	}
109

    
110
	/**
111
	 * Because java.util.Map is not an instanceof java.util.Collection, we need to
112
	 * add an extra clause to DefaultBeanInitializer to catch Map properties
113
	 */
114
	@Test
115
	@Ignore //FIXME disabled since getMultilanguageText() fails when session is closed !!!!
116
	public void testInitializeMapProperty() {
117
		List<String> propertyPaths = new ArrayList<String>();
118
		propertyPaths.add("multilanguageText");
119
		propertyPaths.add("multilanguageText.language");
120

    
121
		TextData textData = (TextData)descriptionElementDao.load(textDataUuid, propertyPaths);
122
		setComplete();
123
		endTransaction();
124

    
125
		assertNotNull("textData should not be null",textData);
126

    
127
		assertTrue("TextData.multilanguageText should be initialized",Hibernate.isInitialized(textData.getMultilanguageText()));
128
		assertFalse("TextData.multilanguageText should not be empty",textData.getMultilanguageText().isEmpty());
129
		LanguageString languageString = textData.getMultilanguageText().values().iterator().next();
130
		assertTrue("LanguageString.language should be initialized",Hibernate.isInitialized(languageString.getLanguage()));
131
	}
132

    
133
	/**
134
	 * Interesting bug in envers where the three entity (object, parent and mapkey) query was not correct.
135
	 * Also Hibernate.initialize does not initalize *-to-Many relationships in envers as envers proxies dont implement
136
	 * HibernateProxy etc.
137
	 */
138
	@Test
139
	@Ignore //FIXME disabled since getMultilanguageText() fails when session is closed !!!!
140
	public void testInitializeMapInPriorView() {
141
		AuditEventContextHolder.getContext().setAuditEvent(previousAuditEvent);
142
		List<String> propertyPaths = new ArrayList<String>();
143
		propertyPaths.add("multilanguageText");
144
		propertyPaths.add("multilanguageText.language");
145

    
146
		TextData textData = (TextData)descriptionElementDao.load(textDataUuid, propertyPaths);
147
		setComplete();
148
		endTransaction();
149

    
150
		assertNotNull("textData should not be null",textData);
151
		assertTrue("TextData.multilanguageText should be initialized",Hibernate.isInitialized(textData.getMultilanguageText()));
152
		assertFalse("TextData.multilanguageText should not be empty",textData.getMultilanguageText().isEmpty());
153
		LanguageString languageString = textData.getMultilanguageText().values().iterator().next();
154
		assertTrue("LanguageString.language should be initialized",Hibernate.isInitialized(languageString.getLanguage()));
155
	}
156

    
157
    /* (non-Javadoc)
158
     * @see eu.etaxonomy.cdm.test.integration.CdmIntegrationTest#createTestData()
159
     */
160
    @Override
161
    public void createTestDataSet() throws FileNotFoundException {
162
        // TODO Auto-generated method stub
163

    
164
    }
165
}
(1-1/2)