Merging r13268 through r14040 from trunk/cdmlib into branches/cdmlib-unitils3
[cdmlib.git] / cdmlib-persistence / src / test / java / eu / etaxonomy / cdm / persistence / dao / hibernate / agent / AgentDaoImplTest.java
1 /**
2 * Copyright (C) 2009 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.cdm.persistence.dao.hibernate.agent;
11
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertFalse;
14 import static org.junit.Assert.assertNotNull;
15
16 import java.util.ArrayList;
17 import java.util.List;
18 import java.util.UUID;
19
20 import junit.framework.Assert;
21
22 import org.junit.After;
23 import org.junit.Before;
24 import org.junit.Ignore;
25 import org.junit.Test;
26 import org.springframework.test.context.transaction.TransactionConfiguration;
27 import org.unitils.dbunit.annotation.DataSet;
28 import org.unitils.dbunit.annotation.ExpectedDataSet;
29 import org.unitils.spring.annotation.SpringBeanByType;
30
31 import eu.etaxonomy.cdm.model.agent.AgentBase;
32 import eu.etaxonomy.cdm.model.agent.InstitutionalMembership;
33 import eu.etaxonomy.cdm.model.agent.Person;
34 import eu.etaxonomy.cdm.model.agent.Team;
35 import eu.etaxonomy.cdm.model.view.AuditEvent;
36 import eu.etaxonomy.cdm.model.view.context.AuditEventContextHolder;
37 import eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao;
38 import eu.etaxonomy.cdm.persistence.query.OrderHint;
39 import eu.etaxonomy.cdm.persistence.query.OrderHint.SortOrder;
40 import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
41
42
43 public class AgentDaoImplTest extends CdmTransactionalIntegrationTest {
44
45 private static final String[] TABLE_NAMES = new String[] {"AGENTBASE", "AGENTBASE_AUD", "AGENTBASE_AGENTBASE", "AGENTBASE_AGENTBASE_AUD", "INSTITUTIONALMEMBERSHIP", "INSTITUTIONALMEMBERSHIP_AUD"};
46
47
48 @SpringBeanByType
49 private IAgentDao agentDao;
50
51 private UUID uuid;
52 private UUID personUuid;
53 private AuditEvent previousAuditEvent;
54
55 @Before
56 public void setUp() {
57 uuid = UUID.fromString("924fa059-1b83-45f8-bc3a-e754d2757364");
58 personUuid = UUID.fromString("ed6ac546-8c6c-48c4-9b91-40b1157c05c6");
59 previousAuditEvent = new AuditEvent();
60 previousAuditEvent.setRevisionNumber(1000);
61 previousAuditEvent.setUuid(UUID.fromString("a680fab4-365e-4765-b49e-768f2ee30cda"));
62 AuditEventContextHolder.clearContext(); // By default we're in the current view (i.e. view == null)
63 }
64
65 @After
66 public void tearDown() {
67 AuditEventContextHolder.clearContext();
68 }
69
70 @Test
71 @DataSet
72 public void testCountMembers() {
73 Team team = (Team)agentDao.findByUuid(uuid);
74 assert team != null : "team must exist";
75
76 int numberOfMembers = agentDao.countMembers(team);
77 assertEquals("countMembers should return 5",5,numberOfMembers);
78 }
79
80 @Test
81 @DataSet
82 public void testGetMembers() {
83 Team team = (Team)agentDao.findByUuid(uuid);
84 assert team != null : "team must exist";
85
86 List<Person> members = agentDao.getMembers(team, null, null);
87 assertNotNull("getMembers should return a List", members);
88 assertFalse("getMembers should not be empty",members.isEmpty());
89 assertEquals("getMembers should return 5 person instances",5,members.size());
90 //test order (3,4,1)
91 Person firstMember = members.get(0);
92 assertEquals("First member must be the one with agentbase id 3 (sortindex = 0)", 3, firstMember.getId());
93 Person lastMember = members.get(4);
94 assertEquals("Last member must be the one with agentbase id 4 (sortindex = 4)", 4, lastMember.getId());
95 Person id1Member = members.get(2);
96 assertEquals("The member with id = 1 must be the third (sortindex = 2)", 1, id1Member.getId());
97 }
98
99 @Test
100 @DataSet
101 public void testCountInstitutionalMemberships() {
102 Person person = (Person)agentDao.findByUuid(personUuid);
103 assert person != null : "person must exist";
104
105 int numberOfInstitutionalMemberships = agentDao.countInstitutionalMemberships(person);
106 assertEquals("countInstitutionalMemberships should return 3",3,numberOfInstitutionalMemberships);
107 }
108
109 @Test
110 @DataSet
111 public void testGetInstitutionalMemberships() {
112 Person person = (Person)agentDao.findByUuid(personUuid);
113 assert person != null : "person must exist";
114
115 List<InstitutionalMembership> memberships = agentDao.getInstitutionalMemberships(person, null, null);
116 assertNotNull("getInstitutionalMemberships should return a List", memberships);
117 assertFalse("getInstitutionalMemberships should not be empty",memberships.isEmpty());
118 assertEquals("getInstitutionalMemberships should return 3 institutional membership instances",3,memberships.size());
119 }
120
121 @Test
122 @DataSet("AgentDaoImplTest.testSave.xml")
123 @ExpectedDataSet
124 public void testSave() {
125 Person person = Person.NewInstance();
126 person.setFirstname("ben");
127 agentDao.save(person);
128 setComplete();
129 endTransaction();
130 }
131
132 @Test
133 @DataSet
134 @ExpectedDataSet
135 public void testUpdate() {
136 Person person = (Person)agentDao.findByUuid(personUuid);
137 assert person != null : "person must exist";
138 person.setFirstname("Benjamin");
139 agentDao.update(person);
140 setComplete();
141 endTransaction();
142 }
143
144 @Test
145 @DataSet("AgentDaoImplTest.testFind.xml")
146 public void testFindInCurrentView() {
147 Person person = (Person)agentDao.findByUuid(personUuid);
148 Assert.assertEquals("The person's firstname should be \'Benjamin\' in the current view", "Benjamin", person.getFirstname());
149 }
150
151 @Test
152 @DataSet("AgentDaoImplTest.testFind.xml")
153 public void testFindInPreviousView() {
154 AuditEventContextHolder.getContext().setAuditEvent(previousAuditEvent);
155 Person person = (Person)agentDao.findByUuid(personUuid);
156 Assert.assertEquals("The person's firstname should be \'Ben\' in the previous view",person.getFirstname(),"Ben");
157 }
158
159 @Test
160 @DataSet("AgentDaoImplTest.testFind.xml")
161 @ExpectedDataSet
162 public void testDelete() throws Exception {
163 Person person = (Person)agentDao.findByUuid(personUuid);
164 agentDao.delete(person);
165 commitAndStartNewTransaction(null);
166 }
167
168 @Test
169 @DataSet("AgentDaoImplTest.testExists.xml")
170 public void testExists() {
171 Assert.assertFalse("Person with the uuid " + personUuid.toString() + "should not exist in the current view",agentDao.exists(personUuid));
172 }
173
174 @Test
175 @DataSet("AgentDaoImplTest.testExists.xml")
176 public void testExistsInPreviousView() {
177 AuditEventContextHolder.getContext().setAuditEvent(previousAuditEvent);
178 Assert.assertTrue("Person with the uuid " + personUuid.toString() + "should exist in the previous view",agentDao.exists(uuid));
179 }
180
181 @Test
182 @DataSet("AgentDaoImplTest.testExists.xml")
183 public void testCount() {
184 Assert.assertEquals("There should be eight agents in the current view",8, agentDao.count());
185 }
186
187 @Test
188 @DataSet("AgentDaoImplTest.testExists.xml")
189 public void testCountInPreviousView() {
190 AuditEventContextHolder.getContext().setAuditEvent(previousAuditEvent);
191 Assert.assertEquals("There should be nine agents in the previous view",9, agentDao.count());
192 }
193
194 @Test
195 @DataSet("AgentDaoImplTest.testExists.xml")
196 public void testCountAuditEvents() {
197 Assert.assertEquals("There should be eleven AuditEvents",11, agentDao.countAuditEvents(null, null, null, null));
198 }
199
200 @Test
201 @DataSet("AgentDaoImplTest.testExists.xml")
202 public void testList() {
203 List<AgentBase> result = agentDao.list(null,null);
204 Assert.assertNotNull("list() should return a list",result);
205 Assert.assertEquals("list() should return eight agents in the current view", result.size(),8);
206 }
207
208 @Test
209 @DataSet("AgentDaoImplTest.testExists.xml")
210 public void testListInPreviousView() {
211 AuditEventContextHolder.getContext().setAuditEvent(previousAuditEvent);
212 List<AgentBase> result = agentDao.list(null, null);
213 Assert.assertNotNull("list() should return a list",result);
214 Assert.assertEquals("list() should return nine agents in the current view",result.size(),9);
215 }
216
217 @Test
218 @DataSet("AgentDaoImplTest.testExists.xml")
219 public void testSortingListInPreviousView() {
220 AuditEventContextHolder.getContext().setAuditEvent(previousAuditEvent);
221 List<OrderHint> orderHints = new ArrayList<OrderHint>();
222 orderHints.add(new OrderHint("titleCache", SortOrder.ASCENDING));
223 List<AgentBase> result = agentDao.list(null, null, null,orderHints,null);
224 Assert.assertNotNull("list() should return a list",result);
225 Assert.assertEquals("list() should return nine agents in the current view",result.size(),9);
226 Assert.assertEquals(result.get(0).getTitleCache(), "B.R. Clark");
227 Assert.assertEquals(result.get(8).getTitleCache(), "University of Oxford");
228 }
229
230 @Test
231 @DataSet("AgentDaoImplTest.testExists.xml")
232 public void testCountPeople() {
233 Assert.assertEquals("There should be four agents in the current view",4, agentDao.count(Person.class));
234 }
235
236 @Test
237 @DataSet("AgentDaoImplTest.testExists.xml")
238 public void testCountPeopleInPreviousView() {
239 AuditEventContextHolder.getContext().setAuditEvent(previousAuditEvent);
240 Assert.assertEquals("There should be five agents in the previous view",5, agentDao.count(Person.class));
241 }
242
243 @Test
244 @DataSet("AgentDaoImplTest.testExists.xml")
245 public void testListPeople() {
246 List<AgentBase> result = agentDao.list(Person.class,null,null);
247 Assert.assertNotNull("list() should return a list",result);
248 Assert.assertEquals("list() should return four agents in the current view", result.size(),4);
249 }
250
251 @Test
252 @DataSet("AgentDaoImplTest.testExists.xml")
253 public void testListPeopleInPreviousView() {
254 AuditEventContextHolder.getContext().setAuditEvent(previousAuditEvent);
255 List<AgentBase> result = agentDao.list(Person.class,null, null);
256 Assert.assertNotNull("list() should return a list",result);
257 Assert.assertEquals("list() should return five agents in the current view",result.size(),5);
258 }
259 }