-
Notifications
You must be signed in to change notification settings - Fork 14
/
EntityManagerImplTest.java
130 lines (111 loc) · 5.22 KB
/
EntityManagerImplTest.java
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
/**
* Copyright (C) 2016 Czech Technical University in Prague
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any
* later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details. You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package cz.cvut.kbss.jopa.model;
import cz.cvut.kbss.jopa.environment.OWLClassA;
import cz.cvut.kbss.jopa.environment.OWLClassC;
import cz.cvut.kbss.jopa.environment.OWLClassJ;
import cz.cvut.kbss.jopa.environment.utils.MetamodelMocks;
import cz.cvut.kbss.jopa.model.annotations.CascadeType;
import cz.cvut.kbss.jopa.model.descriptors.Descriptor;
import cz.cvut.kbss.jopa.model.metamodel.Metamodel;
import cz.cvut.kbss.jopa.sessions.ServerSession;
import cz.cvut.kbss.jopa.sessions.UnitOfWorkImpl;
import cz.cvut.kbss.jopa.utils.Configuration;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.net.URI;
import java.util.Collections;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
* @author kidney
*/
public class EntityManagerImplTest {
@Mock
private EntityManagerFactoryImpl emfMock;
@Mock
private ServerSession serverSessionMock;
@Mock
private UnitOfWorkImpl uowMock;
@Mock
private Metamodel metamodelMock;
private MetamodelMocks mocks;
private EntityManagerImpl em;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
when(serverSessionMock.acquireUnitOfWork()).thenReturn(uowMock);
when(uowMock.getMetamodel()).thenReturn(metamodelMock);
when(emfMock.getMetamodel()).thenReturn(metamodelMock);
this.mocks = new MetamodelMocks();
mocks.setMocks(metamodelMock);
this.em = new EntityManagerImpl(emfMock, new Configuration(Collections.emptyMap()), serverSessionMock);
}
@Test
public void testCascadeMergeOnNullCollection() throws Exception {
final OWLClassJ j = new OWLClassJ();
j.setUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#entityJ"));
when(uowMock.getState(eq(j), any(Descriptor.class))).thenReturn(EntityManagerImpl.State.NOT_MANAGED);
when(uowMock.mergeDetached(eq(j), any(Descriptor.class))).thenReturn(j);
mocks.forOwlClassJ().setAttribute().getJavaField().setAccessible(true);
assertNull(j.getOwlClassA());
em.merge(j);
final ArgumentCaptor<OWLClassJ> argumentCaptor = ArgumentCaptor.forClass(OWLClassJ.class);
verify(uowMock).mergeDetached(argumentCaptor.capture(), any(Descriptor.class));
assertSame(j, argumentCaptor.getValue());
// Check that there is no exception thrown (there was a NPX bug in merging null collections) and that
// the merged object is correctly passed to merge in UoW
}
@Test
public void mergeDetachedWithSingletonSet() throws Exception {
final OWLClassJ j = new OWLClassJ();
j.setUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#entityF"));
final OWLClassA a = new OWLClassA(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#entityA"));
j.setOwlClassA(Collections.singleton(a));
when(uowMock.getState(any(), any())).thenReturn(EntityManagerImpl.State.NOT_MANAGED);
when(uowMock.mergeDetached(eq(j), any())).thenReturn(j);
when(uowMock.mergeDetached(eq(a), any())).thenReturn(a);
final OWLClassJ merged = em.merge(j);
assertSame(j, merged);
verify(uowMock).mergeDetached(eq(j), any());
verify(uowMock).mergeDetached(eq(a), any());
}
@Test
public void mergeDetachedWithSingletonList() throws Exception {
final OWLClassC c = new OWLClassC(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#entityF"));
final OWLClassA a = new OWLClassA(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#entityA"));
c.setSimpleList(Collections.singletonList(a));
when(uowMock.getState(any(), any())).thenReturn(EntityManagerImpl.State.NOT_MANAGED);
when(uowMock.mergeDetached(eq(c), any())).thenReturn(c);
when(uowMock.mergeDetached(eq(a), any())).thenReturn(a);
// Just for this test
when(mocks.forOwlClassC().simpleListAtt().getCascadeTypes()).thenReturn(new CascadeType[]{CascadeType.MERGE});
final OWLClassC merged = em.merge(c);
assertSame(c, merged);
verify(uowMock).mergeDetached(eq(c), any());
verify(uowMock).mergeDetached(eq(a), any());
}
@Test
public void unwrapReturnsItselfWhenClassMatches() throws Exception {
assertSame(em, em.unwrap(EntityManagerImpl.class));
}
}