Commit d9fb40ecbb45cae248410e25fab1ece302e64e4b
1 parent
b181c1b4
Exists in
master
Refatoração de testes unitários: QueryProxyTest e TypedQueryProxyTest
Showing
2 changed files
with
411 additions
and
358 deletions
Show diff stats
impl/extension/jpa/src/test/java/br/gov/frameworkdemoiselle/internal/proxy/QueryProxyTest.java
1 | +/* | |
2 | + * Demoiselle Framework | |
3 | + * Copyright (C) 2010 SERPRO | |
4 | + * ---------------------------------------------------------------------------- | |
5 | + * This file is part of Demoiselle Framework. | |
6 | + * | |
7 | + * Demoiselle Framework is free software; you can redistribute it and/or | |
8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | |
9 | + * as published by the Free Software Foundation. | |
10 | + * | |
11 | + * This program is distributed in the hope that it will be useful, | |
12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | + * GNU General Public License for more details. | |
15 | + * | |
16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | |
17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | |
18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | |
20 | + * ---------------------------------------------------------------------------- | |
21 | + * Este arquivo é parte do Framework Demoiselle. | |
22 | + * | |
23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
25 | + * do Software Livre (FSF). | |
26 | + * | |
27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
30 | + * para maiores detalhes. | |
31 | + * | |
32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
36 | + */ | |
1 | 37 | package br.gov.frameworkdemoiselle.internal.proxy; |
2 | 38 | |
39 | +import static junit.framework.Assert.assertTrue; | |
40 | +import static org.easymock.EasyMock.expect; | |
41 | +import static org.junit.Assert.assertEquals; | |
42 | +import static org.powermock.api.easymock.PowerMock.replay; | |
43 | +import static org.powermock.api.easymock.PowerMock.verifyAll; | |
44 | + | |
45 | +import java.util.ArrayList; | |
46 | +import java.util.Calendar; | |
3 | 47 | import java.util.Collections; |
4 | 48 | import java.util.Date; |
5 | 49 | import java.util.HashMap; |
... | ... | @@ -10,15 +54,13 @@ import javax.persistence.EntityManager; |
10 | 54 | import javax.persistence.EntityManagerFactory; |
11 | 55 | import javax.persistence.FlushModeType; |
12 | 56 | import javax.persistence.LockModeType; |
13 | -import javax.persistence.NoResultException; | |
57 | +import javax.persistence.Parameter; | |
14 | 58 | import javax.persistence.Persistence; |
15 | 59 | import javax.persistence.Query; |
16 | 60 | import javax.persistence.TemporalType; |
17 | 61 | |
18 | 62 | import org.easymock.EasyMock; |
19 | -import org.junit.Assert; | |
20 | 63 | import org.junit.Before; |
21 | -import org.junit.Ignore; | |
22 | 64 | import org.junit.Test; |
23 | 65 | import org.junit.runner.RunWith; |
24 | 66 | import org.powermock.api.easymock.PowerMock; |
... | ... | @@ -32,224 +74,221 @@ import br.gov.frameworkdemoiselle.util.Beans; |
32 | 74 | |
33 | 75 | /** |
34 | 76 | * Test the proxied {@link Query} class, {@link QueryProxy}. |
77 | + * | |
35 | 78 | * @author 81986912515 |
36 | - * | |
37 | 79 | */ |
38 | -@Ignore | |
39 | 80 | @RunWith(PowerMockRunner.class) |
40 | -@PrepareForTest({Beans.class}) | |
81 | +@PrepareForTest({ Beans.class }) | |
41 | 82 | public class QueryProxyTest { |
42 | - | |
83 | + | |
43 | 84 | private EntityManager manager; |
85 | + | |
44 | 86 | private EntityManagerProducer producer; |
45 | - | |
87 | + | |
88 | + private QueryProxy queryProxy; | |
89 | + | |
46 | 90 | @Before |
47 | - public void setUp(){ | |
48 | - | |
91 | + public void setUp() { | |
92 | + | |
49 | 93 | Map<String, Object> configOverrides = new HashMap<String, Object>(); |
50 | 94 | configOverrides.put("javax.persistence.provider", "org.hibernate.ejb.HibernatePersistence"); |
51 | - configOverrides.put("javax.persistence.jdbc.url", "jdbc:hsqldb:hsql:."); | |
95 | + | |
96 | + configOverrides.put("javax.persistence.jdbc.url", "jdbc:hsqldb:mem:."); | |
97 | + configOverrides.put("javax.persistence.jdbc.driver", "org.hsqldb.jdbcDriver"); | |
98 | + configOverrides.put("javax.persistence.jdbc.user", "sa"); | |
99 | + configOverrides.put("javax.persistence.jdbc.password", ""); | |
100 | + | |
52 | 101 | configOverrides.put("hibernate.show_sql", "true"); |
53 | 102 | configOverrides.put("hibernate.hbm2ddl.auto", "create-drop"); |
54 | - | |
103 | + | |
55 | 104 | EntityManagerFactory factory = Persistence.createEntityManagerFactory("pu1", configOverrides); |
56 | 105 | EntityManager delegate = factory.createEntityManager(); |
57 | - | |
106 | + | |
58 | 107 | Map<String, EntityManager> cache = Collections.synchronizedMap(new HashMap<String, EntityManager>()); |
59 | 108 | cache.put("pu1", delegate); |
60 | - | |
109 | + | |
61 | 110 | producer = new EntityManagerProducer(); |
62 | 111 | Whitebox.setInternalState(producer, "cache", cache); |
63 | - | |
112 | + | |
64 | 113 | PowerMock.mockStatic(Beans.class); |
65 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(12); | |
114 | + EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).anyTimes(); | |
66 | 115 | PowerMock.replayAll(); |
67 | 116 | |
68 | 117 | manager = new EntityManagerProxy("pu1"); |
69 | - | |
70 | - manager.getTransaction().begin(); | |
71 | - manager.createQuery("delete from Client").executeUpdate(); | |
72 | - | |
73 | - Client client = new Client(); | |
74 | - client.setName("Cliente 1"); | |
75 | - client.setBirthDate(new Date()); | |
76 | - manager.persist(client); | |
77 | - | |
78 | - client = new Client(); | |
79 | - client.setName("Cliente 2"); | |
80 | - client.setBirthDate(new Date()); | |
81 | - manager.persist(client); | |
82 | - | |
83 | - client = new Client(); | |
84 | - client.setName("Cliente 3"); | |
85 | - client.setBirthDate(new Date()); | |
86 | - manager.persist(client); | |
87 | - | |
88 | - manager.flush(); | |
89 | - manager.getTransaction().commit(); | |
90 | - manager.clear(); | |
91 | - | |
92 | - PowerMock.resetAll(); | |
93 | 118 | } |
94 | - | |
95 | - private QueryProxy getQueryProxy(String jpql,Object... params){ | |
96 | - Query q = manager.createQuery(jpql); | |
97 | - if (!(q instanceof QueryProxy)){ | |
98 | - Assert.fail("Query não é instância de QueryProxy"); | |
99 | - } | |
100 | - | |
101 | - if (params!=null){ | |
102 | - int count = 1; | |
103 | - for (Object param : params){ | |
104 | - q.setParameter(count++, param); | |
105 | - } | |
106 | - } | |
107 | - | |
108 | - return (QueryProxy)q; | |
109 | - } | |
110 | - | |
119 | + | |
111 | 120 | @Test |
112 | - public void testResultList(){ | |
113 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(2); | |
114 | - PowerMock.replay(Beans.class); | |
115 | - | |
116 | - List<?> retorno = getQueryProxy("select c from Client c").getResultList(); | |
117 | - Assert.assertNotNull(retorno); | |
118 | - Assert.assertFalse(retorno.isEmpty()); | |
121 | + public void testGetResultList() { | |
122 | + Query queryDelegate = PowerMock.createMock(Query.class); | |
123 | + List<String> result = new ArrayList<String>(); | |
124 | + result.add("x"); | |
125 | + EasyMock.expect(queryDelegate.getResultList()).andReturn(result).anyTimes(); | |
126 | + | |
127 | + replay(queryDelegate); | |
128 | + | |
129 | + queryProxy = new QueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
130 | + queryProxy.getResultList(); | |
131 | + assertEquals(queryProxy.getResultList().size(), queryDelegate.getResultList().size()); | |
132 | + | |
133 | + verifyAll(); | |
119 | 134 | } |
120 | - | |
135 | + | |
121 | 136 | @Test |
122 | - public void testSingleResult(){ | |
123 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(2); | |
124 | - PowerMock.replay(Beans.class); | |
125 | - | |
126 | - Client retorno = (Client)getQueryProxy("select c from Client c where c.name=?1","Cliente 1").getSingleResult(); | |
127 | - Assert.assertNotNull(retorno); | |
137 | + public void testSingleResult() { | |
138 | + Query queryDelegate = PowerMock.createMock(Query.class); | |
139 | + String result = "Resultado"; | |
140 | + EasyMock.expect(queryDelegate.getSingleResult()).andReturn(result).anyTimes(); | |
141 | + | |
142 | + replay(queryDelegate); | |
143 | + | |
144 | + queryProxy = new QueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
145 | + assertEquals(queryProxy.getSingleResult(), queryDelegate.getSingleResult()); | |
146 | + | |
147 | + verifyAll(); | |
128 | 148 | } |
129 | - | |
149 | + | |
130 | 150 | @Test |
131 | - public void testExecuteUpdate(){ | |
132 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(4); | |
133 | - PowerMock.replay(Beans.class); | |
134 | - | |
135 | - manager.getTransaction().begin(); | |
136 | - int linesAffected = getQueryProxy("update Client set name=?1 where name=?2","Novo Cliente","Cliente 1").executeUpdate(); | |
137 | - manager.getTransaction().commit(); | |
138 | - Assert.assertEquals(1, linesAffected); | |
151 | + public void testExecuteUpdate() { | |
152 | + Query queryDelegate = PowerMock.createMock(Query.class); | |
153 | + EasyMock.expect(queryDelegate.executeUpdate()).andReturn(1).anyTimes(); | |
154 | + | |
155 | + replay(queryDelegate); | |
156 | + | |
157 | + queryProxy = new QueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
158 | + assertEquals(queryProxy.executeUpdate(), 1); | |
159 | + | |
160 | + verifyAll(); | |
139 | 161 | } |
140 | - | |
162 | + | |
141 | 163 | @Test |
142 | - public void testPagination(){ | |
143 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(2); | |
144 | - PowerMock.replay(Beans.class); | |
145 | - | |
146 | - QueryProxy proxy = getQueryProxy("select c from Client c"); | |
147 | - | |
148 | - proxy.setMaxResults(2); | |
149 | - Assert.assertEquals(2, proxy.getMaxResults()); | |
150 | - | |
151 | - proxy.setFirstResult(1); | |
152 | - Assert.assertEquals(1, proxy.getFirstResult()); | |
153 | - | |
154 | - List<?> result = proxy.getResultList(); | |
155 | - Assert.assertEquals(2, result.size()); | |
164 | + public void testPagination() { | |
165 | + Query queryDelegate = PowerMock.createMock(Query.class); | |
166 | + expect(queryDelegate.getMaxResults()).andReturn(4).times(2); | |
167 | + expect(queryDelegate.getFirstResult()).andReturn(2).times(2); | |
168 | + expect(queryDelegate.setMaxResults(EasyMock.anyInt())).andReturn(queryDelegate); | |
169 | + expect(queryDelegate.setFirstResult(EasyMock.anyInt())).andReturn(queryDelegate); | |
170 | + replay(queryDelegate); | |
171 | + | |
172 | + queryProxy = new QueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
173 | + queryProxy.setMaxResults(4); | |
174 | + queryProxy.setFirstResult(2); | |
175 | + assertEquals(queryProxy.getMaxResults(), queryDelegate.getMaxResults()); | |
176 | + assertEquals(queryProxy.getFirstResult(), queryDelegate.getFirstResult()); | |
177 | + | |
178 | + verifyAll(); | |
156 | 179 | } |
157 | - | |
180 | + | |
158 | 181 | @Test |
159 | - public void testHint(){ | |
160 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(14); | |
161 | - PowerMock.replay(Beans.class); | |
162 | - | |
163 | - //Consulta um cliente definindo a hint readOnly, que torna a entidade retornada não atualizável. | |
164 | - manager.getTransaction().begin(); | |
165 | - QueryProxy proxy = getQueryProxy("select c from Client c where c.name=?1","Cliente 1"); | |
166 | - proxy.setHint("org.hibernate.readOnly", true); | |
167 | - Assert.assertFalse( proxy.getHints().isEmpty() ); | |
168 | - | |
169 | - //Tenta atualizar a entidade e limpar o cache de primeiro nível | |
170 | - Client c = (Client)proxy.getSingleResult(); | |
171 | - c.setName("Cliente 1 Alterado"); | |
172 | - manager.flush(); | |
173 | - manager.getTransaction().commit(); | |
174 | - manager.clear(); | |
175 | - | |
176 | - //Reconsultar a entidade tem que retornar 1 resultado, pois o nome "Cliente 1" não deve ter sido alterado. | |
177 | - manager.getTransaction().begin(); | |
178 | - proxy = getQueryProxy("select c from Client c where c.name=?1","Cliente 1"); | |
179 | - c = (Client)proxy.getSingleResult(); | |
180 | - Assert.assertNotNull(c); | |
181 | - | |
182 | - //Mudar a entidade agora tem que funcionar, pois não foi informado o hint | |
183 | - c.setName("Cliente 1 Alterado"); | |
184 | - manager.flush(); | |
185 | - manager.getTransaction().commit(); | |
186 | - manager.clear(); | |
187 | - | |
188 | - proxy = getQueryProxy("select c from Client c where c.name=?1","Cliente 1"); | |
189 | - | |
190 | - try{ | |
191 | - proxy.getSingleResult(); | |
192 | - Assert.fail(); | |
193 | - } | |
194 | - catch(NoResultException ne){ | |
195 | - } | |
196 | - | |
197 | - PowerMock.verifyAll(); | |
182 | + public void testHint() { | |
183 | + Query queryDelegate = PowerMock.createMock(Query.class); | |
184 | + Map<String, Object> map = new HashMap<String, Object>(); | |
185 | + Client client = new Client(); | |
186 | + map.put("1", client); | |
187 | + expect(queryDelegate.getHints()).andReturn(map).times(2); | |
188 | + expect(queryDelegate.setHint(EasyMock.anyObject(String.class), EasyMock.anyObject())).andReturn(queryDelegate); | |
189 | + replay(queryDelegate); | |
190 | + | |
191 | + queryProxy = new QueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
192 | + queryProxy.setHint("1", client); | |
193 | + assertEquals(queryProxy.getHints(), queryDelegate.getHints()); | |
194 | + | |
195 | + verifyAll(); | |
198 | 196 | } |
199 | - | |
197 | + | |
198 | + @SuppressWarnings({ "unused", "rawtypes", "unchecked" }) | |
200 | 199 | @Test |
201 | - public void testParameters(){ | |
202 | - | |
203 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(2); | |
204 | - PowerMock.replay(Beans.class); | |
205 | - | |
206 | - QueryProxy proxy = getQueryProxy("select c.name from Client c where 'Named Parameter'=:name and c.birthDate=:dateName and c.name=?1 and c.birthDate=?2"); | |
207 | - | |
200 | + public void testParameters() { | |
201 | + Query queryDelegate = PowerMock.createMock(Query.class); | |
208 | 202 | Date dateValue = new Date(); |
209 | - | |
210 | - proxy.setParameter("name", "Named Parameter"); | |
211 | - proxy.setParameter("dateName", dateValue, TemporalType.DATE); | |
212 | - | |
213 | - proxy.setParameter(1, "Cliente 1"); | |
214 | - proxy.setParameter(2, dateValue,TemporalType.DATE); | |
215 | - | |
216 | - Assert.assertEquals(proxy.getParameterValue("name"),"Named Parameter"); | |
217 | - Assert.assertEquals(proxy.getParameterValue(1), "Cliente 1"); | |
218 | - | |
219 | - @SuppressWarnings("unchecked") | |
220 | - List<Map<String, Object>> result = proxy.getResultList(); | |
221 | - | |
222 | - Assert.assertNotNull(result); | |
223 | - Assert.assertFalse(result.isEmpty()); | |
224 | - | |
225 | - PowerMock.verifyAll(); | |
203 | + Calendar calendar = PowerMock.createMock(Calendar.class); | |
204 | + Class<Date> type = Date.class; | |
205 | + Parameter parameter = PowerMock.createMock(Parameter.class); | |
206 | + | |
207 | + expect(queryDelegate.setParameter(EasyMock.anyObject(String.class), EasyMock.anyObject(String.class))) | |
208 | + .andReturn(queryDelegate); | |
209 | + expect(queryDelegate.getParameterValue(EasyMock.anyObject(String.class))).andReturn("Named Parameter") | |
210 | + .anyTimes(); | |
211 | + expect(queryDelegate.setParameter(EasyMock.anyInt(), EasyMock.anyObject(String.class))) | |
212 | + .andReturn(queryDelegate); | |
213 | + expect(queryDelegate.getParameterValue(EasyMock.anyInt())).andReturn("Client").anyTimes(); | |
214 | + expect( | |
215 | + queryDelegate.setParameter(EasyMock.anyObject(String.class), EasyMock.anyObject(Date.class), | |
216 | + EasyMock.anyObject(TemporalType.class))).andReturn(queryDelegate); | |
217 | + expect( | |
218 | + queryDelegate.setParameter(EasyMock.anyInt(), EasyMock.anyObject(Date.class), | |
219 | + EasyMock.anyObject(TemporalType.class))).andReturn(queryDelegate); | |
220 | + expect(queryDelegate.setParameter(EasyMock.anyObject(Parameter.class), EasyMock.anyObject())).andReturn( | |
221 | + queryDelegate); | |
222 | + expect(queryDelegate.getParameterValue(EasyMock.anyObject(Parameter.class))).andReturn(parameter).anyTimes(); | |
223 | + expect( | |
224 | + queryDelegate.setParameter(EasyMock.anyObject(String.class), EasyMock.anyObject(Calendar.class), | |
225 | + EasyMock.anyObject(TemporalType.class))).andReturn(queryDelegate); | |
226 | + expect( | |
227 | + queryDelegate.setParameter(EasyMock.anyInt(), EasyMock.anyObject(Calendar.class), | |
228 | + EasyMock.anyObject(TemporalType.class))).andReturn(queryDelegate); | |
229 | + | |
230 | + replay(queryDelegate, parameter, calendar); | |
231 | + | |
232 | + queryProxy = new QueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
233 | + queryProxy.setParameter("name", "Named Parameter"); | |
234 | + assertEquals(queryProxy.getParameterValue("name"), queryDelegate.getParameterValue("name")); | |
235 | + queryProxy.setParameter(1, "Client"); | |
236 | + assertEquals(queryProxy.getParameterValue("1"), queryDelegate.getParameterValue("1")); | |
237 | + queryProxy.setParameter("dateName", dateValue, TemporalType.DATE); | |
238 | + queryProxy.setParameter(2, dateValue, TemporalType.DATE); | |
239 | + queryProxy.setParameter(parameter, "X"); | |
240 | + queryProxy.getParameterValue(parameter); | |
241 | + assertEquals(queryProxy.getParameterValue(parameter), parameter); | |
242 | + queryProxy.setParameter("dateName", calendar, TemporalType.DATE); | |
243 | + queryProxy.setParameter(2, calendar, TemporalType.DATE); | |
244 | + | |
245 | + verifyAll(); | |
246 | + } | |
247 | + | |
248 | + @SuppressWarnings("rawtypes") | |
249 | + @Test | |
250 | + public void testIsBound() { | |
251 | + Query queryDelegate = PowerMock.createMock(Query.class); | |
252 | + Parameter parameter = PowerMock.createMock(Parameter.class); | |
253 | + expect(queryDelegate.isBound(EasyMock.anyObject(Parameter.class))).andReturn(true); | |
254 | + | |
255 | + replay(queryDelegate, parameter); | |
256 | + | |
257 | + queryProxy = new QueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
258 | + assertTrue(queryProxy.isBound(parameter)); | |
259 | + | |
260 | + verifyAll(); | |
226 | 261 | } |
227 | - | |
262 | + | |
228 | 263 | @Test |
229 | - public void testFlushMode(){ | |
230 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(3); | |
231 | - PowerMock.replay(Beans.class); | |
232 | - | |
233 | - manager.getTransaction().begin(); | |
234 | - QueryProxy proxy = getQueryProxy("update Client set name=?1 where name=?2","Cliente 1 Alterado","Cliente 1"); | |
235 | - proxy.setFlushMode(FlushModeType.COMMIT); | |
236 | - Assert.assertEquals(proxy.getFlushMode(), FlushModeType.COMMIT); | |
237 | - manager.getTransaction().commit(); | |
238 | - | |
239 | - PowerMock.verifyAll(); | |
264 | + public void testFlushMode() { | |
265 | + Query queryDelegate = PowerMock.createMock(Query.class); | |
266 | + FlushModeType flushModeType = FlushModeType.AUTO; | |
267 | + | |
268 | + expect(queryDelegate.setFlushMode(FlushModeType.AUTO)).andReturn(queryDelegate); | |
269 | + expect(queryDelegate.getFlushMode()).andReturn(flushModeType).anyTimes(); | |
270 | + | |
271 | + replay(queryDelegate); | |
272 | + | |
273 | + queryProxy = new QueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
274 | + queryProxy.setFlushMode(FlushModeType.AUTO); | |
275 | + assertEquals(queryProxy.getFlushMode(), queryDelegate.getFlushMode()); | |
276 | + verifyAll(); | |
240 | 277 | } |
241 | - | |
278 | + | |
242 | 279 | @Test |
243 | - public void testLockMode(){ | |
244 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(4); | |
245 | - PowerMock.replay(Beans.class); | |
246 | - | |
247 | - manager.getTransaction().begin(); | |
248 | - QueryProxy proxy = getQueryProxy("update Client set name=?1 where name=?2","Cliente 1 Alterado","Cliente 1"); | |
249 | - proxy.setLockMode(LockModeType.OPTIMISTIC); | |
250 | - Assert.assertEquals(proxy.getLockMode(), LockModeType.OPTIMISTIC); | |
251 | - manager.getTransaction().commit(); | |
252 | - | |
253 | - PowerMock.verifyAll(); | |
280 | + public void testLockMode() { | |
281 | + Query queryDelegate = PowerMock.createMock(Query.class); | |
282 | + LockModeType lockModeType = LockModeType.OPTIMISTIC; | |
283 | + | |
284 | + expect(queryDelegate.setLockMode(lockModeType)).andReturn(queryDelegate); | |
285 | + expect(queryDelegate.getLockMode()).andReturn(lockModeType).anyTimes(); | |
286 | + | |
287 | + replay(queryDelegate); | |
288 | + | |
289 | + queryProxy = new QueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
290 | + queryProxy.setLockMode(lockModeType); | |
291 | + assertEquals(queryProxy.getLockMode(), queryDelegate.getLockMode()); | |
292 | + verifyAll(); | |
254 | 293 | } |
255 | 294 | } | ... | ... |
impl/extension/jpa/src/test/java/br/gov/frameworkdemoiselle/internal/proxy/TypedQueryProxyTest.java
1 | 1 | package br.gov.frameworkdemoiselle.internal.proxy; |
2 | 2 | |
3 | +import static junit.framework.Assert.assertTrue; | |
4 | +import static org.easymock.EasyMock.expect; | |
5 | +import static org.junit.Assert.assertEquals; | |
6 | +import static org.powermock.api.easymock.PowerMock.replay; | |
7 | +import static org.powermock.api.easymock.PowerMock.verifyAll; | |
8 | + | |
9 | +import java.util.ArrayList; | |
10 | +import java.util.Calendar; | |
3 | 11 | import java.util.Collections; |
4 | 12 | import java.util.Date; |
5 | 13 | import java.util.HashMap; |
... | ... | @@ -10,16 +18,14 @@ import javax.persistence.EntityManager; |
10 | 18 | import javax.persistence.EntityManagerFactory; |
11 | 19 | import javax.persistence.FlushModeType; |
12 | 20 | import javax.persistence.LockModeType; |
13 | -import javax.persistence.NoResultException; | |
21 | +import javax.persistence.Parameter; | |
14 | 22 | import javax.persistence.Persistence; |
15 | 23 | import javax.persistence.Query; |
16 | 24 | import javax.persistence.TemporalType; |
17 | 25 | import javax.persistence.TypedQuery; |
18 | 26 | |
19 | 27 | import org.easymock.EasyMock; |
20 | -import org.junit.Assert; | |
21 | 28 | import org.junit.Before; |
22 | -import org.junit.Ignore; | |
23 | 29 | import org.junit.Test; |
24 | 30 | import org.junit.runner.RunWith; |
25 | 31 | import org.powermock.api.easymock.PowerMock; |
... | ... | @@ -33,212 +39,220 @@ import br.gov.frameworkdemoiselle.util.Beans; |
33 | 39 | |
34 | 40 | /** |
35 | 41 | * Test the proxied {@link Query} class, {@link TypedQueryProxy}. |
42 | + * | |
36 | 43 | * @author 81986912515 |
37 | - * | |
44 | + * @param <X> | |
38 | 45 | */ |
39 | -@Ignore | |
46 | + | |
47 | +@SuppressWarnings("rawtypes") | |
40 | 48 | @RunWith(PowerMockRunner.class) |
41 | -@PrepareForTest({Beans.class}) | |
49 | +@PrepareForTest({ Beans.class }) | |
42 | 50 | public class TypedQueryProxyTest { |
43 | - | |
51 | + | |
44 | 52 | private EntityManager manager; |
53 | + | |
45 | 54 | private EntityManagerProducer producer; |
46 | - | |
55 | + | |
56 | + private TypedQueryProxy typedQueryProxy; | |
57 | + | |
47 | 58 | @Before |
48 | - public void setUp(){ | |
49 | - | |
59 | + public void setUp() { | |
60 | + | |
50 | 61 | Map<String, Object> configOverrides = new HashMap<String, Object>(); |
51 | 62 | configOverrides.put("javax.persistence.provider", "org.hibernate.ejb.HibernatePersistence"); |
52 | - configOverrides.put("javax.persistence.jdbc.url", "jdbc:hsqldb:hsql:."); | |
63 | + | |
64 | + configOverrides.put("javax.persistence.jdbc.url", "jdbc:hsqldb:mem:."); | |
65 | + configOverrides.put("javax.persistence.jdbc.driver", "org.hsqldb.jdbcDriver"); | |
66 | + configOverrides.put("javax.persistence.jdbc.user", "sa"); | |
67 | + configOverrides.put("javax.persistence.jdbc.password", ""); | |
68 | + | |
53 | 69 | configOverrides.put("hibernate.show_sql", "true"); |
54 | 70 | configOverrides.put("hibernate.hbm2ddl.auto", "create-drop"); |
55 | - | |
71 | + | |
56 | 72 | EntityManagerFactory factory = Persistence.createEntityManagerFactory("pu1", configOverrides); |
57 | 73 | EntityManager delegate = factory.createEntityManager(); |
58 | - | |
74 | + | |
59 | 75 | Map<String, EntityManager> cache = Collections.synchronizedMap(new HashMap<String, EntityManager>()); |
60 | 76 | cache.put("pu1", delegate); |
61 | - | |
77 | + | |
62 | 78 | producer = new EntityManagerProducer(); |
63 | 79 | Whitebox.setInternalState(producer, "cache", cache); |
64 | - | |
80 | + | |
65 | 81 | PowerMock.mockStatic(Beans.class); |
66 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(12); | |
82 | + EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).anyTimes(); | |
67 | 83 | PowerMock.replayAll(); |
68 | 84 | |
69 | 85 | manager = new EntityManagerProxy("pu1"); |
70 | - | |
71 | - manager.getTransaction().begin(); | |
72 | - manager.createQuery("delete from Client").executeUpdate(); | |
73 | - | |
74 | - Client client = new Client(); | |
75 | - client.setName("Cliente 1"); | |
76 | - client.setBirthDate(new Date()); | |
77 | - manager.persist(client); | |
78 | - | |
79 | - client = new Client(); | |
80 | - client.setName("Cliente 2"); | |
81 | - client.setBirthDate(new Date()); | |
82 | - manager.persist(client); | |
83 | - | |
84 | - client = new Client(); | |
85 | - client.setName("Cliente 3"); | |
86 | - client.setBirthDate(new Date()); | |
87 | - manager.persist(client); | |
88 | - | |
89 | - manager.flush(); | |
90 | - manager.getTransaction().commit(); | |
91 | - manager.clear(); | |
92 | - | |
93 | - PowerMock.resetAll(); | |
94 | - } | |
95 | - | |
96 | - private <T> TypedQueryProxy<T> getQueryProxy(String jpql,Class<T> classType,Object... params){ | |
97 | - TypedQuery<T> q = manager.createQuery(jpql,classType); | |
98 | - if (!(q instanceof TypedQueryProxy)){ | |
99 | - Assert.fail("Query não é instância de QueryProxy"); | |
100 | - } | |
101 | - | |
102 | - if (params!=null){ | |
103 | - int count = 1; | |
104 | - for (Object param : params){ | |
105 | - q.setParameter(count++, param); | |
106 | - } | |
107 | - } | |
108 | - | |
109 | - return (TypedQueryProxy<T>)q; | |
86 | + | |
87 | + // PowerMock.resetAll(); | |
110 | 88 | } |
111 | - | |
89 | + | |
90 | + @SuppressWarnings("unchecked") | |
112 | 91 | @Test |
113 | - public void testResultList(){ | |
114 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(2); | |
115 | - PowerMock.replay(Beans.class); | |
116 | - | |
117 | - List<?> retorno = getQueryProxy("select c from Client c",Client.class).getResultList(); | |
118 | - Assert.assertNotNull(retorno); | |
119 | - Assert.assertFalse(retorno.isEmpty()); | |
92 | + public void testResultList() { | |
93 | + | |
94 | + TypedQuery queryDelegate = PowerMock.createMock(TypedQuery.class); | |
95 | + List<String> result = new ArrayList<String>(); | |
96 | + result.add("x"); | |
97 | + EasyMock.expect(queryDelegate.getResultList()).andReturn(result).anyTimes(); | |
98 | + | |
99 | + replay(queryDelegate); | |
100 | + | |
101 | + typedQueryProxy = new TypedQueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
102 | + assertEquals(typedQueryProxy.getResultList().size(), queryDelegate.getResultList().size()); | |
103 | + | |
104 | + verifyAll(); | |
120 | 105 | } |
121 | - | |
106 | + | |
107 | + @SuppressWarnings("unchecked") | |
122 | 108 | @Test |
123 | - public void testSingleResult(){ | |
124 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(2); | |
125 | - PowerMock.replay(Beans.class); | |
126 | - | |
127 | - Client retorno = (Client)getQueryProxy("select c from Client c where c.name=?1",Client.class,"Cliente 1").getSingleResult(); | |
128 | - Assert.assertNotNull(retorno); | |
109 | + public void testSingleResult() { | |
110 | + TypedQuery queryDelegate = PowerMock.createMock(TypedQuery.class); | |
111 | + String result = "Resultado"; | |
112 | + EasyMock.expect(queryDelegate.getSingleResult()).andReturn(result).anyTimes(); | |
113 | + | |
114 | + replay(queryDelegate); | |
115 | + | |
116 | + typedQueryProxy = new TypedQueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
117 | + assertEquals(typedQueryProxy.getSingleResult(), queryDelegate.getSingleResult()); | |
118 | + | |
119 | + verifyAll(); | |
129 | 120 | } |
130 | - | |
121 | + | |
122 | + @SuppressWarnings("unchecked") | |
131 | 123 | @Test |
132 | - public void testPagination(){ | |
133 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(2); | |
134 | - PowerMock.replay(Beans.class); | |
135 | - | |
136 | - TypedQueryProxy<Client> proxy = getQueryProxy("select c from Client c",Client.class); | |
137 | - | |
138 | - proxy.setMaxResults(2); | |
139 | - Assert.assertEquals(2, proxy.getMaxResults()); | |
140 | - | |
141 | - proxy.setFirstResult(1); | |
142 | - Assert.assertEquals(1, proxy.getFirstResult()); | |
143 | - | |
144 | - List<?> result = proxy.getResultList(); | |
145 | - Assert.assertEquals(2, result.size()); | |
124 | + public void testPagination() { | |
125 | + TypedQuery queryDelegate = PowerMock.createMock(TypedQuery.class); | |
126 | + expect(queryDelegate.getMaxResults()).andReturn(4).times(2); | |
127 | + expect(queryDelegate.getFirstResult()).andReturn(2).times(2); | |
128 | + expect(queryDelegate.setMaxResults(EasyMock.anyInt())).andReturn(queryDelegate); | |
129 | + expect(queryDelegate.setFirstResult(EasyMock.anyInt())).andReturn(queryDelegate); | |
130 | + replay(queryDelegate); | |
131 | + | |
132 | + typedQueryProxy = new TypedQueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
133 | + typedQueryProxy.setMaxResults(4); | |
134 | + typedQueryProxy.setFirstResult(2); | |
135 | + assertEquals(typedQueryProxy.getMaxResults(), queryDelegate.getMaxResults()); | |
136 | + assertEquals(typedQueryProxy.getFirstResult(), queryDelegate.getFirstResult()); | |
137 | + | |
138 | + verifyAll(); | |
146 | 139 | } |
147 | - | |
140 | + | |
141 | + @SuppressWarnings("unchecked") | |
148 | 142 | @Test |
149 | - public void testHint(){ | |
150 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(14); | |
151 | - PowerMock.replay(Beans.class); | |
152 | - | |
153 | - //Consulta um cliente definindo a hint readOnly, que torna a entidade retornada não atualizável. | |
154 | - manager.getTransaction().begin(); | |
155 | - TypedQueryProxy<Client> proxy = getQueryProxy("select c from Client c where c.name=?1",Client.class,"Cliente 1"); | |
156 | - proxy.setHint("org.hibernate.readOnly", true); | |
157 | - Assert.assertFalse( proxy.getHints().isEmpty() ); | |
158 | - | |
159 | - //Tenta atualizar a entidade e limpar o cache de primeiro nível | |
160 | - Client c = (Client)proxy.getSingleResult(); | |
161 | - c.setName("Cliente 1 Alterado"); | |
162 | - manager.flush(); | |
163 | - manager.getTransaction().commit(); | |
164 | - manager.clear(); | |
165 | - | |
166 | - //Reconsultar a entidade tem que retornar 1 resultado, pois o nome "Cliente 1" não deve ter sido alterado. | |
167 | - manager.getTransaction().begin(); | |
168 | - proxy = getQueryProxy("select c from Client c where c.name=?1",Client.class,"Cliente 1"); | |
169 | - c = (Client)proxy.getSingleResult(); | |
170 | - Assert.assertNotNull(c); | |
171 | - | |
172 | - //Mudar a entidade agora tem que funcionar, pois não foi informado o hint | |
173 | - c.setName("Cliente 1 Alterado"); | |
174 | - manager.flush(); | |
175 | - manager.getTransaction().commit(); | |
176 | - manager.clear(); | |
177 | - | |
178 | - proxy = getQueryProxy("select c from Client c where c.name=?1",Client.class,"Cliente 1"); | |
179 | - | |
180 | - try{ | |
181 | - proxy.getSingleResult(); | |
182 | - Assert.fail(); | |
183 | - } | |
184 | - catch(NoResultException ne){ | |
185 | - } | |
186 | - | |
187 | - PowerMock.verifyAll(); | |
143 | + public void testHint() { | |
144 | + TypedQuery queryDelegate = PowerMock.createMock(TypedQuery.class); | |
145 | + Map<String, Object> map = new HashMap<String, Object>(); | |
146 | + Client client = new Client(); | |
147 | + map.put("1", client); | |
148 | + expect(queryDelegate.getHints()).andReturn(map).times(2); | |
149 | + expect(queryDelegate.setHint(EasyMock.anyObject(String.class), EasyMock.anyObject())).andReturn(queryDelegate); | |
150 | + replay(queryDelegate); | |
151 | + | |
152 | + typedQueryProxy = new TypedQueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
153 | + typedQueryProxy.setHint("1", client); | |
154 | + assertEquals(typedQueryProxy.getHints(), queryDelegate.getHints()); | |
155 | + | |
156 | + verifyAll(); | |
188 | 157 | } |
189 | - | |
158 | + | |
159 | + @SuppressWarnings({ "unchecked", "unused" }) | |
190 | 160 | @Test |
191 | - public void testParameters(){ | |
192 | - | |
193 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(2); | |
194 | - PowerMock.replay(Beans.class); | |
195 | - | |
196 | - TypedQueryProxy<Client> proxy = getQueryProxy("select c from Client c where 'Named Parameter'=:name and c.birthDate=:dateName and c.name=?1 and c.birthDate=?2",Client.class); | |
197 | - | |
161 | + public void testParameters() { | |
162 | + TypedQuery queryDelegate = PowerMock.createMock(TypedQuery.class); | |
198 | 163 | Date dateValue = new Date(); |
199 | - | |
200 | - proxy.setParameter("name", "Named Parameter"); | |
201 | - proxy.setParameter("dateName", dateValue, TemporalType.DATE); | |
202 | - | |
203 | - proxy.setParameter(1, "Cliente 1"); | |
204 | - proxy.setParameter(2, dateValue,TemporalType.DATE); | |
205 | - | |
206 | - Assert.assertEquals(proxy.getParameterValue("name"),"Named Parameter"); | |
207 | - Assert.assertEquals(proxy.getParameterValue(1), "Cliente 1"); | |
208 | - | |
209 | - List<Client> result = proxy.getResultList(); | |
210 | - | |
211 | - Assert.assertNotNull(result); | |
212 | - Assert.assertFalse(result.isEmpty()); | |
213 | - | |
214 | - PowerMock.verifyAll(); | |
164 | + Calendar calendar = PowerMock.createMock(Calendar.class); | |
165 | + Class<Date> type = Date.class; | |
166 | + Parameter parameter = PowerMock.createMock(Parameter.class); | |
167 | + | |
168 | + expect(queryDelegate.setParameter(EasyMock.anyObject(String.class), EasyMock.anyObject(String.class))) | |
169 | + .andReturn(queryDelegate); | |
170 | + expect(queryDelegate.getParameterValue(EasyMock.anyObject(String.class))).andReturn("Named Parameter") | |
171 | + .anyTimes(); | |
172 | + expect(queryDelegate.setParameter(EasyMock.anyInt(), EasyMock.anyObject(String.class))) | |
173 | + .andReturn(queryDelegate); | |
174 | + expect(queryDelegate.getParameterValue(EasyMock.anyInt())).andReturn("Client").anyTimes(); | |
175 | + expect( | |
176 | + queryDelegate.setParameter(EasyMock.anyObject(String.class), EasyMock.anyObject(Date.class), | |
177 | + EasyMock.anyObject(TemporalType.class))).andReturn(queryDelegate); | |
178 | + expect( | |
179 | + queryDelegate.setParameter(EasyMock.anyInt(), EasyMock.anyObject(Date.class), | |
180 | + EasyMock.anyObject(TemporalType.class))).andReturn(queryDelegate); | |
181 | + expect(queryDelegate.setParameter(EasyMock.anyObject(Parameter.class), EasyMock.anyObject())).andReturn( | |
182 | + queryDelegate); | |
183 | + expect(queryDelegate.getParameterValue(EasyMock.anyObject(Parameter.class))).andReturn(parameter).anyTimes(); | |
184 | + expect( | |
185 | + queryDelegate.setParameter(EasyMock.anyObject(String.class), EasyMock.anyObject(Calendar.class), | |
186 | + EasyMock.anyObject(TemporalType.class))).andReturn(queryDelegate); | |
187 | + expect( | |
188 | + queryDelegate.setParameter(EasyMock.anyInt(), EasyMock.anyObject(Calendar.class), | |
189 | + EasyMock.anyObject(TemporalType.class))).andReturn(queryDelegate); | |
190 | + | |
191 | + replay(queryDelegate, parameter, calendar); | |
192 | + | |
193 | + typedQueryProxy = new TypedQueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
194 | + typedQueryProxy.setParameter("name", "Named Parameter"); | |
195 | + assertEquals(typedQueryProxy.getParameterValue("name"), queryDelegate.getParameterValue("name")); | |
196 | + typedQueryProxy.setParameter(1, "Client"); | |
197 | + assertEquals(typedQueryProxy.getParameterValue("1"), queryDelegate.getParameterValue("1")); | |
198 | + typedQueryProxy.setParameter("dateName", dateValue, TemporalType.DATE); | |
199 | + typedQueryProxy.setParameter(2, dateValue, TemporalType.DATE); | |
200 | + typedQueryProxy.setParameter(parameter, "X"); | |
201 | + typedQueryProxy.getParameterValue(parameter); | |
202 | + assertEquals(typedQueryProxy.getParameterValue(parameter), parameter); | |
203 | + typedQueryProxy.setParameter("dateName", calendar, TemporalType.DATE); | |
204 | + typedQueryProxy.setParameter(2, calendar, TemporalType.DATE); | |
205 | + | |
206 | + verifyAll(); | |
207 | + } | |
208 | + | |
209 | + @SuppressWarnings("unchecked") | |
210 | + @Test | |
211 | + public void testIsBound() { | |
212 | + TypedQuery queryDelegate = PowerMock.createMock(TypedQuery.class); | |
213 | + Parameter parameter = PowerMock.createMock(Parameter.class); | |
214 | + expect(queryDelegate.isBound(EasyMock.anyObject(Parameter.class))).andReturn(true); | |
215 | + | |
216 | + replay(queryDelegate, parameter); | |
217 | + | |
218 | + typedQueryProxy = new TypedQueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
219 | + assertTrue(typedQueryProxy.isBound(parameter)); | |
220 | + | |
221 | + verifyAll(); | |
215 | 222 | } |
216 | - | |
223 | + | |
224 | + @SuppressWarnings("unchecked") | |
217 | 225 | @Test |
218 | - public void testFlushMode(){ | |
219 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(3); | |
220 | - PowerMock.replay(Beans.class); | |
221 | - | |
222 | - manager.getTransaction().begin(); | |
223 | - TypedQueryProxy<Client> proxy = getQueryProxy("select c from Client c where c.name=?1",Client.class,"Cliente 1"); | |
224 | - proxy.setFlushMode(FlushModeType.COMMIT); | |
225 | - Assert.assertEquals(proxy.getFlushMode(), FlushModeType.COMMIT); | |
226 | - manager.getTransaction().commit(); | |
227 | - | |
228 | - PowerMock.verifyAll(); | |
226 | + public void testFlushMode() { | |
227 | + TypedQuery queryDelegate = PowerMock.createMock(TypedQuery.class); | |
228 | + FlushModeType flushModeType = FlushModeType.AUTO; | |
229 | + | |
230 | + expect(queryDelegate.setFlushMode(FlushModeType.AUTO)).andReturn(queryDelegate); | |
231 | + expect(queryDelegate.getFlushMode()).andReturn(flushModeType).anyTimes(); | |
232 | + | |
233 | + replay(queryDelegate); | |
234 | + | |
235 | + typedQueryProxy = new TypedQueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
236 | + typedQueryProxy.setFlushMode(FlushModeType.AUTO); | |
237 | + assertEquals(typedQueryProxy.getFlushMode(), queryDelegate.getFlushMode()); | |
238 | + verifyAll(); | |
229 | 239 | } |
230 | - | |
240 | + | |
241 | + @SuppressWarnings("unchecked") | |
231 | 242 | @Test |
232 | - public void testLockMode(){ | |
233 | - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(3); | |
234 | - PowerMock.replay(Beans.class); | |
235 | - | |
236 | - manager.getTransaction().begin(); | |
237 | - TypedQueryProxy<Client> proxy = getQueryProxy("select c from Client c where c.name=?1",Client.class,"Cliente 1"); | |
238 | - proxy.setLockMode(LockModeType.OPTIMISTIC); | |
239 | - Assert.assertEquals(proxy.getLockMode(), LockModeType.OPTIMISTIC); | |
240 | - manager.getTransaction().commit(); | |
241 | - | |
242 | - PowerMock.verifyAll(); | |
243 | + public void testLockMode() { | |
244 | + TypedQuery queryDelegate = PowerMock.createMock(TypedQuery.class); | |
245 | + LockModeType lockModeType = LockModeType.OPTIMISTIC; | |
246 | + | |
247 | + expect(queryDelegate.setLockMode(lockModeType)).andReturn(queryDelegate); | |
248 | + expect(queryDelegate.getLockMode()).andReturn(lockModeType).anyTimes(); | |
249 | + | |
250 | + replay(queryDelegate); | |
251 | + | |
252 | + typedQueryProxy = new TypedQueryProxy(queryDelegate, (EntityManagerProxy) manager); | |
253 | + typedQueryProxy.setLockMode(lockModeType); | |
254 | + assertEquals(typedQueryProxy.getLockMode(), queryDelegate.getLockMode()); | |
255 | + verifyAll(); | |
243 | 256 | } |
257 | + | |
244 | 258 | } | ... | ... |