1 package org.itracker.persistence.dao;
2
3 import org.hibernate.SessionFactory;
4 import org.itracker.AbstractDependencyInjectionTest;
5 import org.itracker.model.Language;
6 import org.junit.Test;
7 import org.springframework.dao.DataAccessException;
8
9
10
11
12
13
14
15 public class BaseHibernateDaoImplTest extends AbstractDependencyInjectionTest {
16
17 BaseHibernateDAOImpl<Language> dao;
18 LanguageDAO languageDAO;
19
20 @Test
21 public void testSave() {
22
23 try {
24 dao.save(null);
25 fail("save of null entity must throw DataAccessException");
26 } catch (DataAccessException dae) {
27
28 } catch (Throwable t) {
29 fail("save of null entity must throw DataAccessException, not " + t);
30 }
31
32 Language entity = new Language();
33 entity.setLocale("en_US");
34 entity.setResourceKey("org.itracker.test.BaseHibernateDAOImpl");
35
36 try {
37 dao.save(null);
38 fail("save of null not-null property must throw DataAccessException");
39 } catch (DataAccessException dae) {
40
41 } catch (Throwable t) {
42 fail("save of null not-null property must throw DataAccessException, not "
43 + t);
44 }
45
46 entity.setResourceValue("BaseHibernateDAOImpl");
47 assertTrue("entity.new", entity.isNew());
48 dao.save(entity);
49 assertTrue("entity.!new", !entity.isNew());
50 try {
51 Language l = languageDAO.findByKeyAndLocale(
52 entity.getResourceKey(), entity.getLocale());
53
54 assertEquals("entity", entity, l);
55
56
57
58
59
60
61
62
63 } catch (DataAccessException dae) {
64 fail("failed to load entity from languageDAO");
65 }
66
67 }
68
69 @Test
70 public void testSaveOrUpdate() {
71
72 try {
73 dao.saveOrUpdate(null);
74 fail("saveOrUpdate of null entity must throw DataAccessException");
75 } catch (DataAccessException dae) {
76
77 } catch (Throwable t) {
78 fail("saveOrUpdate of null entity must throw DataAccessException, not "
79 + t);
80 }
81
82 Language entity = new Language();
83 entity.setLocale("en_US");
84 entity.setResourceKey("org.itracker.test.BaseHibernateDAOImpl");
85
86 try {
87 dao.saveOrUpdate(null);
88 fail("saveOrUpdate of null not-null property must throw DataAccessException");
89 } catch (DataAccessException dae) {
90
91 } catch (Throwable t) {
92 fail("saveOrUpdate of null not-null property must throw DataAccessException, not "
93 + t);
94 }
95
96 entity.setResourceValue("BaseHibernateDAOImpl");
97 dao.saveOrUpdate(entity);
98
99 try {
100 Language l = languageDAO.findByKeyAndLocale(
101 entity.getResourceKey(), entity.getLocale());
102
103 assertEquals("entity", entity, l);
104 try {
105 dao.saveOrUpdate(entity);
106 } catch (Throwable t) {
107 fail("saveOrUpdate of persisted entity must not throw " + t);
108 }
109 } catch (DataAccessException dae) {
110 fail("failed to load entity from languageDAO");
111 }
112 }
113
114 @Test
115 public void testDelete() throws Exception {
116
117 try {
118 dao.delete(null);
119 fail("delete of null entity must throw DataAccessException");
120 } catch (DataAccessException dae) {
121
122 }
123
124 Language entity = new Language();
125 entity.setLocale("en_US");
126 entity.setResourceKey("org.itracker.test.BaseHibernateDAOImpl");
127 entity.setResourceValue("BaseHibernateDAOImpl");
128
129 dao.save(entity);
130
131 entity = languageDAO.findByKeyAndLocale(entity.getResourceKey(), entity
132 .getLocale());
133 dao.delete(entity);
134
135 try {
136 entity = languageDAO.findByKeyAndLocale(entity.getResourceKey(),
137 entity.getLocale());
138 fail("expecting to catch NoSuchEntityException");
139 } catch (NoSuchEntityException dae) {
140
141 }
142 }
143
144 @Test
145 public void testDetach() throws Exception {
146 try {
147 dao.detach(null);
148 fail("detach of null entity must throw DataAccessException");
149 } catch (DataAccessException dae) {
150
151 }
152
153 Language entity = new Language();
154 entity.setLocale("en_US");
155 entity.setResourceKey("org.itracker.test.BaseHibernateDAOImpl");
156 entity.setResourceValue("BaseHibernateDAOImpl");
157
158 dao.save(entity);
159
160 entity = languageDAO.findByKeyAndLocale(entity.getResourceKey(), entity
161 .getLocale());
162 dao.detach(entity);
163
164 Language l = languageDAO.findByKeyAndLocale(entity.getResourceKey(),
165 entity.getLocale());
166 assertNotSame("detached object", l, entity);
167
168 }
169
170 @Test
171 public void testRefresh() throws Exception {
172
173 try {
174 dao.refresh(null);
175 fail("Should throw DataAccessException");
176 } catch (DataAccessException e) {
177
178 } catch (Exception e) {
179 fail("Should throw DataAccessException not " + e);
180 }
181
182 Language entity = new Language();
183 entity.setLocale("en_US");
184 entity.setResourceKey("org.itracker.test.BaseHibernateDAOImpl");
185 entity.setResourceValue("BaseHibernateDAOImpl");
186
187 dao.save(entity);
188 dao.detach(entity);
189
190 Language l = languageDAO.findByKeyAndLocale(entity.getResourceKey(),
191 entity.getLocale());
192 dao.detach(l);
193
194 entity.setResourceValue("org.itracker.test.BaseHibernateDAO2");
195 dao.merge(entity);
196 assertNotSame("detached and managed entity are same", l, entity);
197
198 assertTrue("entity.resourceValue not equals l.resourceValue", !entity
199 .getResourceValue().equals(l.getResourceValue()));
200
201 l = languageDAO.findByKeyAndLocale(entity.getResourceKey(), entity
202 .getLocale());
203 assertEquals("entity.resourceValue", l.getResourceValue(), entity
204 .getResourceValue());
205
206 }
207
208 @Test
209 public void testMerge() throws Exception {
210 try {
211 dao.merge(null);
212 fail("Should throw DataAccessException");
213 } catch (DataAccessException e) {
214
215 } catch (Exception e) {
216 fail("Should throw DataAccessException not " + e);
217 }
218
219 Language entity = new Language();
220 entity.setLocale("en_US");
221 entity.setResourceKey("org.itracker.test.BaseHibernateDAOImpl");
222 entity.setResourceValue("BaseHibernateDAOImpl");
223
224 dao.save(entity);
225 dao.detach(entity);
226
227 Language l = languageDAO.findByKeyAndLocale(entity.getResourceKey(),
228 entity.getLocale());
229 l.setResourceValue("test");
230 dao.saveOrUpdate(l);
231
232 entity.setResourceValue("org.itracker.test.BaseHibernateDAOImpl2");
233
234 assertTrue("entity.resourceValue not equals l.resourceValue", !l
235 .getResourceValue().equals(entity.getResourceValue()));
236
237 dao.detach(l);
238 dao.merge(entity);
239
240 assertTrue("entity.resourceValue not equals l.resourceValue", !l
241 .getResourceValue().equals(entity.getResourceValue()));
242
243 l = languageDAO.findByKeyAndLocale(entity.getResourceKey(), entity
244 .getLocale());
245
246 assertEquals("entity.resourceKey", l.getResourceKey(), entity
247 .getResourceKey());
248 assertEquals("entity.resourceValue", l.getResourceValue(), entity
249 .getResourceValue());
250 }
251
252 @Override
253 public void onSetUp() throws Exception {
254
255 super.onSetUp();
256
257 languageDAO = (LanguageDAO) applicationContext.getBean("languageDAO");
258 dao = new BaseHibernateDAOImpl<Language>() {
259 };
260 dao.setSessionFactory((SessionFactory) applicationContext
261 .getBean("sessionFactory"));
262 }
263
264 @Override
265 protected String[] getDataSetFiles() {
266 return new String[] { "dataset/languagebean_dataset.xml" };
267 }
268
269 @Override
270 protected String[] getConfigLocations() {
271 return new String[] { "application-context.xml" };
272 }
273 }