ProducerTest.java
3.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package producer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.OperateOnDeployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import test.Tests;
import br.gov.frameworkdemoiselle.context.RequestContext;
import br.gov.frameworkdemoiselle.internal.proxy.EntityManagerProxy;
import br.gov.frameworkdemoiselle.util.Beans;
import br.gov.frameworkdemoiselle.util.NameQualifier;
@RunWith(Arquillian.class)
public class ProducerTest {
private static final String PATH = "src/test/resources/producer";
@Inject
private RequestContext ctx;
@Deployment(name="request_scoped_producer")
public static WebArchive createDeployment() {
WebArchive deployment = Tests.createDeployment(ProducerTest.class);
deployment.addAsResource(Tests.createFileAsset(PATH + "/persistence.xml"), "META-INF/persistence.xml");
deployment.addAsResource(Tests.createFileAsset(PATH + "/demoiselle.properties"), "demoiselle.properties");
return deployment;
}
@Deployment(name="no_scoped_producer")
public static WebArchive createNoScopedDeployment() {
WebArchive deployment = Tests.createDeployment(ProducerTest.class);
deployment.addAsResource(Tests.createFileAsset(PATH + "/persistence.xml"), "META-INF/persistence.xml");
deployment.addAsResource(Tests.createFileAsset(PATH + "/demoiselle_noscoped.properties"), "demoiselle.properties");
return deployment;
}
@Before
public void before(){
ctx.activate();
}
@After
public void after(){
ctx.deactivate();
}
@Test
@OperateOnDeployment("request_scoped_producer")
public void produceEntityManager() {
EntityManager manager = Beans.getReference(EntityManager.class);
assertNotNull(manager);
assertEquals(EntityManagerProxy.class, manager.getClass());
}
@Test
@OperateOnDeployment("request_scoped_producer")
public void produceMultipleEntityManagers() {
EntityManager m1 = Beans.getReference(EntityManager.class, new NameQualifier("pu"));
assertNotNull(m1);
assertEquals(EntityManagerProxy.class, m1.getClass());
EntityManager m2 = Beans.getReference(EntityManager.class, new NameQualifier("pu2"));
assertNotNull(m2);
assertEquals(EntityManagerProxy.class, m2.getClass());
}
@Test
@OperateOnDeployment("request_scoped_producer")
public void produceOneEntityManagerPerRequest() {
EntityManager m1 = Beans.getReference(EntityManager.class, new NameQualifier("pu"));
assertNotNull(m1);
assertEquals(EntityManagerProxy.class, m1.getClass());
EntityManager m2 = Beans.getReference(EntityManager.class, new NameQualifier("pu"));
assertNotNull(m2);
assertEquals(EntityManagerProxy.class, m2.getClass());
MyEntity entity = new MyEntity();
entity.setId(createId("testID"));
m1.persist(entity);
assertTrue(m2.contains(entity));
}
@Test
@OperateOnDeployment("no_scoped_producer")
public void produceOneEntityManagerPerInjection() {
//Testa se ao usar o produtor sem escopo, mais de um entity manager é criado a cada injeção.
EntityManager m1 = Beans.getReference(EntityManager.class, new NameQualifier("pu"));
assertNotNull(m1);
assertEquals(EntityManagerProxy.class, m1.getClass());
EntityManager m2 = Beans.getReference(EntityManager.class, new NameQualifier("pu"));
assertNotNull(m2);
assertEquals(EntityManagerProxy.class, m2.getClass());
MyEntity entity = new MyEntity();
entity.setId(createId("testID"));
m1.persist(entity);
assertTrue( ! m2.contains(entity));
}
private String createId(String id) {
return this.getClass().getName() + "_" + id;
}
}