-
Notifications
You must be signed in to change notification settings - Fork 14
/
MergeManagerTest.java
130 lines (111 loc) · 5.35 KB
/
MergeManagerTest.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
* <p>
* 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.
* <p>
* 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.sessions;
import cz.cvut.kbss.jopa.environment.OWLClassB;
import cz.cvut.kbss.jopa.environment.utils.Generators;
import cz.cvut.kbss.jopa.environment.utils.MetamodelMocks;
import cz.cvut.kbss.jopa.model.MetamodelImpl;
import cz.cvut.kbss.jopa.model.descriptors.Descriptor;
import cz.cvut.kbss.jopa.model.descriptors.EntityDescriptor;
import cz.cvut.kbss.jopa.sessions.change.ChangeRecordImpl;
import cz.cvut.kbss.jopa.sessions.change.ChangeSetFactory;
import cz.cvut.kbss.jopa.sessions.change.UnitOfWorkChangeSetImpl;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.net.URI;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class MergeManagerTest {
private static final URI DEFAULT_URI = URI.create("http://defaultContext");
private static Descriptor defaultDescriptor;
@Mock
private UnitOfWorkImpl uow;
@Mock
private CloneBuilderImpl cloneBuilder;
@Mock
private MetamodelImpl metamodel;
private UnitOfWorkChangeSet uowChangeSet;
private MergeManagerImpl mm;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
defaultDescriptor = new EntityDescriptor(DEFAULT_URI);
}
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
this.uowChangeSet = new UnitOfWorkChangeSetImpl();
when(uow.getMetamodel()).thenReturn(metamodel);
when(uow.getCloneBuilder()).thenReturn(cloneBuilder);
final MetamodelMocks mocks = new MetamodelMocks();
mocks.setMocks(metamodel);
this.mm = new MergeManagerImpl(uow);
}
@After
public void tearDown() throws Exception {
uow.release();
}
@Test
public void mergeChangesOnObjectCallsCloneBuilderWithChangeSetToMerge() throws Exception {
final OWLClassB orig = new OWLClassB(Generators.createIndividualIdentifier());
orig.setStringAttribute("ANiceAttribute");
final OWLClassB clone = new OWLClassB(orig.getUri());
final ObjectChangeSet chs = createChangeSet(orig, clone);
clone.setStringAttribute("AnotherStringAttribute");
chs.addChangeRecord(new ChangeRecordImpl(OWLClassB.getStrAttField().getName(), clone.getStringAttribute()));
mm.mergeChangesOnObject(chs);
verify(cloneBuilder).mergeChanges(chs);
}
@Test
public void testMergeChangesFromChangeSet() throws Exception {
final OWLClassB objOne = new OWLClassB(Generators.createIndividualIdentifier());
final OWLClassB objTwo = new OWLClassB(Generators.createIndividualIdentifier());
OWLClassB cloneOne = new OWLClassB(objOne.getUri());
OWLClassB cloneTwo = new OWLClassB(objTwo.getUri());
cloneOne.setStringAttribute("testAtt");
uowChangeSet.addDeletedObjectChangeSet(createChangeSet(objTwo, cloneTwo));
final ObjectChangeSet ochs = createChangeSet(objOne, cloneOne);
ochs.addChangeRecord(new ChangeRecordImpl(OWLClassB.getStrAttField().getName(), cloneOne
.getStringAttribute()));
uowChangeSet.addObjectChangeSet(ochs);
mm.mergeChangesFromChangeSet(uowChangeSet);
verify(uow).removeObjectFromCache(objTwo, defaultDescriptor.getContext());
verify(cloneBuilder).mergeChanges(ochs);
}
@Test
public void mergeChangesFromChangeSetWithNewObjectPutsOriginalIntoCache() {
final OWLClassB objOne = new OWLClassB(Generators.createIndividualIdentifier());
objOne.setStringAttribute("ABeautifulAttribute");
final OWLClassB clone = new OWLClassB(objOne.getUri());
final ObjectChangeSet ochs = createChangeSet(objOne, clone);
uowChangeSet.addNewObjectChangeSet(ochs);
mm.mergeChangesFromChangeSet(uowChangeSet);
verify(uow).putObjectIntoCache(objOne.getUri(), objOne, defaultDescriptor.getContext());
}
@Test
public void mergeNewObjectPutsObjectIntoCache() {
final OWLClassB newOne = new OWLClassB(Generators.createIndividualIdentifier());
final OWLClassB clone = new OWLClassB(newOne.getUri());
final ObjectChangeSet ochs = createChangeSet(newOne, clone);
mm.mergeNewObject(ochs);
verify(uow).putObjectIntoCache(newOne.getUri(), newOne, defaultDescriptor.getContext());
}
private static ObjectChangeSet createChangeSet(Object orig, Object clone) {
return ChangeSetFactory.createObjectChangeSet(orig, clone, defaultDescriptor);
}
}