1 package org.itracker.services.implementations;
2
3 import junit.framework.Assert;
4 import org.itracker.AbstractDependencyInjectionTest;
5 import org.itracker.model.*;
6 import org.itracker.persistence.dao.ProjectDAO;
7 import org.itracker.persistence.dao.ProjectScriptDAO;
8 import org.itracker.persistence.dao.VersionDAO;
9 import org.itracker.persistence.dao.WorkflowScriptDAO;
10 import org.itracker.services.ProjectService;
11 import org.junit.Ignore;
12 import org.junit.Test;
13 import org.springframework.dao.DataAccessException;
14
15 import java.text.ParseException;
16 import java.util.*;
17
18 public class ProjectServiceImplIT extends AbstractDependencyInjectionTest {
19
20 private ProjectDAO projectDAO;
21 private ProjectService projectService;
22 private VersionDAO versionDAO;
23 private ProjectScriptDAO projectScriptDAO;
24 private WorkflowScriptDAO workflowScriptDAO;
25
26
27 @Override
28 protected String[] getConfigLocations() {
29 return new String[]{"application-context.xml"};
30 }
31
32 @Override
33 public void onSetUp() throws Exception {
34
35 super.onSetUp();
36 projectService = (ProjectService) applicationContext
37 .getBean("projectService");
38 projectDAO = (ProjectDAO) applicationContext.getBean("projectDAO");
39
40 versionDAO = (VersionDAO) applicationContext.getBean("versionDAO");
41 projectScriptDAO = (ProjectScriptDAO) applicationContext
42 .getBean("projectScriptDAO");
43 workflowScriptDAO = (WorkflowScriptDAO) applicationContext
44 .getBean("workflowScriptDAO");
45
46 }
47
48 @Test
49 public void testGetProject() {
50 Project project = projectService.getProject(2);
51 Assert.assertNotNull("project #2", project);
52 Assert.assertEquals("name", "test_name", project.getName());
53 Assert.assertEquals("description", "test_description", project
54 .getDescription());
55
56 project = projectService.getProject(2);
57 Assert.assertNotNull("project #3", project);
58 Assert.assertEquals("name", "test_name", project.getName());
59 Assert.assertEquals("description", "test_description", project
60 .getDescription());
61
62 }
63
64 @Test
65 public void testGetAllProjects() {
66 List<Project> projects = projectService.getAllProjects();
67 Assert.assertNotNull("allProjects", projects);
68 Assert.assertEquals("allProjects", 2, projects.size());
69 }
70
71 @Test
72 public void testGetAllAvailableProjects() {
73 List<Project> projects = projectService.getAllAvailableProjects();
74 Assert.assertNotNull("allAvailableProjects", projects);
75 Assert.assertEquals("allAvailableProjects", 2, projects.size());
76 }
77
78
79 @Test
80 public void testProjectComponents() {
81
82 Project project = projectService.getProject(2);
83 Component component = new Component(project, "new_component");
84 component.setDescription("new_decription");
85 Assert.assertNull("addProjectComponent", component.getId());
86 Date then = new Date();
87
88 int numberOfComponents = project.getComponents().size();
89
90 projectService.addProjectComponent(project.getId(), component);
91 Assert.assertNotNull("addProjectComponent", component.getId());
92 assertEquals("component size", numberOfComponents + 1, project
93 .getComponents().size());
94
95
96 project = projectService.getProject(project.getId());
97 assertEquals("component size", numberOfComponents + 1, project
98 .getComponents().size());
99
100
101 assertTrue("date created", project.getCreateDate().compareTo(then) >= 0);
102
103
104 Component savedComponent = projectService.getProjectComponent(component
105 .getId());
106 Assert.assertNotNull("addProjectComponent", savedComponent);
107 Assert.assertEquals("addProjectComponent", savedComponent.getName(),
108 component.getName());
109 Assert.assertEquals("addProjectComponent", savedComponent
110 .getDescription(), component.getDescription());
111
112
113 assertTrue("date modified", savedComponent.getLastModifiedDate().compareTo(then) >= 0);
114 assertTrue("date created", savedComponent.getCreateDate().compareTo(then) >= 0);
115 assertEquals("parent project", project, savedComponent.getProject());
116
117 then = new Date();
118 savedComponent.setName("new_name");
119 projectService.updateProjectComponent(savedComponent);
120
121 Component updatedComponent = projectService
122 .getProjectComponent(savedComponent.getId());
123 assertEquals(savedComponent.getName(), updatedComponent.getName());
124 assertEquals(savedComponent.getDescription(), updatedComponent
125 .getDescription());
126
127 assertTrue("date modified", updatedComponent.getLastModifiedDate()
128 .compareTo(then) >= 0);
129
130 assertFalse("date created", updatedComponent.getCreateDate()
131 .compareTo(then) >= 0);
132
133
134 }
135
136 @Test
137 public void testRemoveProjectComponent() {
138
139 Project project = projectService.getProject(2);
140 Assert.assertNotNull("project not found", project.getId());
141
142 assertTrue(projectService.removeProjectComponent(project.getId(), 2));
143 }
144
145 @Test
146 public void testTryRemoveInvalidComponent() {
147
148 Project project = projectService.getProject(2);
149 Assert.assertNotNull("project not found", project.getId());
150
151 assertFalse(projectService.removeProjectComponent(project.getId(), 89));
152 }
153
154 @Test
155 public void testProjectVersions() {
156
157 Version version = projectService.getProjectVersion(1);
158 assertNotNull("version not found", version);
159
160 Project project = projectService.getProject(2);
161 Assert.assertNotNull("project not found", project.getId());
162
163 assertTrue("versions don't match", project.getVersions().size() == 1);
164
165 version = new Version(project, "2.0");
166
167
168 version.setDescription("");
169 projectService.addProjectVersion(project.getId(), version);
170
171 project = projectService.getProject(2);
172 assertTrue("versions dont' match", project.getVersions().size() == 2);
173
174 versionDAO.detach(version);
175 version.setMinor(2);
176 projectService.updateProjectVersion(version);
177
178 version = projectService.getProjectVersion(version.getId());
179 assertEquals("version not updated", version.getMinor(), 2);
180
181 projectDAO.detach(project);
182 projectService.removeProjectVersion(project.getId(), version.getId());
183 assertNull("version not removed", projectService
184 .getProjectVersion(version.getId()));
185
186 }
187
188 @Test
189 public void removeProjectVersion() {
190
191 Version version = projectService.getProjectVersion(1);
192 assertNotNull("version not found", version);
193
194 Project project = projectService.getProject(2);
195 Assert.assertNotNull("project not found", project.getId());
196
197 projectDAO.detach(project);
198 assertTrue(projectService.removeProjectVersion(project.getId(), 1));
199 assertNull("version not removed", projectService
200 .getProjectVersion(1));
201
202
203 }
204
205 @Test
206 public void tryInsertDuplicateVersion() {
207
208 Project project = projectService.getProject(2);
209 Assert.assertNotNull("project not found", project.getId());
210
211 assertTrue("versions don't match", project.getVersions().size() == 1);
212 Version version = project.getVersions().get(0);
213 versionDAO.detach(version);
214 version.setId(null);
215 try {
216 projectService.addProjectVersion(project.getId(), version);
217 fail();
218 } catch (DataAccessException e) {
219
220
221 }
222 }
223
224 @Test
225 public void testProjectOwner() {
226 Project project = projectService.getProject(2);
227 Assert.assertNotNull("project not found", project.getId());
228
229 assertEquals(0, project.getOwners().size());
230 assertEquals(projectService.getProjectOwners(project.getId()).size(),
231 project.getOwners().size());
232
233 Set<Integer> newOwners = new HashSet<Integer>();
234 newOwners.add(1);
235 projectService.setProjectOwners(project, newOwners);
236 assertEquals(1, projectService.getProjectOwners(project.getId()).size());
237
238 projectService.setProjectOwners(project, new HashSet<Integer>());
239 assertEquals(0, projectService.getProjectOwners(project.getId()).size());
240
241 }
242
243 @Test
244 public void testGetTotalNumberIssuesByProject() {
245 Long issuesByProject = projectService.getTotalNumberIssuesByProject(2);
246 assertEquals(Long.valueOf(4), issuesByProject);
247 }
248
249 @Test
250 public void testCountIssuesByVersion() {
251 Long issuesByVersion = projectService.countIssuesByVersion(2);
252 assertEquals(Long.valueOf(0), issuesByVersion);
253
254 }
255
256 @Test
257 public void testCountIssuesByComponent() {
258 Long issuesByComponent = projectService.countIssuesByComponent(2);
259 assertEquals(Long.valueOf(0), issuesByComponent);
260 }
261
262 @Test
263 public void testGetTotalNumberOpenIssuesByProject() {
264 Long issues = projectService.countIssuesByComponent(2);
265 assertEquals(Long.valueOf(0), issues);
266 }
267
268 @Test
269 public void testGetTotalNumberResolvedIssuesByProject() {
270 Long number = projectService.getTotalNumberResolvedIssuesByProject(2);
271 assertEquals(Long.valueOf(0), number);
272 }
273
274 @Test
275 public void getgetTotalNumberOpenIssuesByProject() {
276 Long number = projectService.getTotalNumberOpenIssuesByProject(2);
277 assertEquals(Long.valueOf(4), number);
278 }
279
280 @Test
281 public void getLatestIssueUpdatedDateByProjectId() throws ParseException {
282 Date date = projectService.getLatestIssueUpdatedDateByProjectId(2);
283 assertNotNull(date);
284 Calendar cal = Calendar.getInstance();
285 cal.setTime(date);
286 assertEquals(2008, cal.get(Calendar.YEAR));
287 assertEquals(0, cal.get(Calendar.MONTH));
288 assertEquals(1, cal.get(Calendar.DAY_OF_MONTH));
289 }
290
291 @Test
292 public void testProjectScripts() {
293 ProjectScript projectScript = projectService.getProjectScript(1);
294 assertNotNull("project script not found", projectScript);
295
296 Project project = projectService.getProject(2);
297 Assert.assertNotNull("project not found", project);
298
299 assertEquals("versions don't match", 1, project.getScripts().size());
300 assertEquals("versions don't match", 1, projectService
301 .getProjectScripts().size());
302
303 projectScript = new ProjectScript();
304 projectScript.setProject(project);
305 projectScript.setPriority(1);
306 projectScript.setFieldId(2);
307 projectScript.setFieldType(Configuration.Type.customfield);
308
309 WorkflowScript script = workflowScriptDAO.findByPrimaryKey(2);
310 assertNotNull("workflow script not found", script);
311 projectScript.setScript(script);
312
313 projectScript = projectService.addProjectScript(project.getId(),
314 projectScript);
315
316 projectDAO.refresh(project);
317 assertEquals("project scripts don't match", 2, project.getScripts()
318 .size());
319
320 projectDAO.detach(project);
321 projectScriptDAO.detach(projectScript);
322 projectScript.setPriority(2);
323 projectService.updateProjectScript(projectScript);
324
325 projectScript = projectService.getProjectScript(projectScript.getId());
326 assertEquals("version not updated", projectScript.getPriority(), 2);
327
328 projectService.removeProjectScript(project.getId(), projectScript
329 .getId());
330
331 project = projectService.getProject(2);
332 assertEquals("project scripts don't match", 1, project.getScripts()
333 .size());
334 assertNull("project script not removed", projectService
335 .getProjectScript(projectScript.getId()));
336
337 }
338
339 @Test
340 public void testProjectCustomFields() {
341
342 Project project = projectService.getProject(2);
343 Assert.assertNotNull("project not found", project);
344
345 List<CustomField> fields = projectService.getProjectFields(project
346 .getId());
347 assertEquals("custom field count", 2, fields.size());
348
349 Set<Integer> Ids = new HashSet<Integer>(2);
350 projectService.setProjectFields(project, Ids);
351
352 assertEquals("custom field count", 0, projectService.getProjectFields(
353 project.getId()).size());
354 Ids.add(1);
355 Ids.add(2);
356 projectService.setProjectFields(project, Ids);
357
358 assertEquals("custom field count", 2, projectService.getProjectFields(
359 project.getId()).size());
360
361 }
362
363
364 @Test
365 @Ignore
366 public void testGetListOfProjectFields() {
367 fail("not implemented");
368 }
369
370
371 @Test
372 @Ignore
373 public void getListOfProjectOwners() {
374 fail("not implemented");
375 }
376
377 @Test
378 public void testProjectCreateUpdate() {
379 Project project = new Project("New Project");
380 project.setDescription("desc");
381
382 Project createProject = projectService.createProject(project, 1);
383 assertNotNull(createProject);
384 project = projectService.getProject(createProject.getId());
385 assertNotNull(project);
386
387 project = new Project("New Project2");
388 project.setDescription("desc");
389 List<Component> components = new ArrayList<Component>();
390 Component component = new Component(project, "comp");
391 component.setDescription("comp desc");
392 components.add(component);
393 project.setComponents(components);
394 createProject = projectService.createProject(project, 1);
395 assertNotNull(createProject);
396 project = projectService.getProject(createProject.getId());
397 assertNotNull(project);
398
399 Version version = new Version();
400 version.setProject(project);
401 version.setVersionInfo("2.0");
402 version.setDescription("version one");
403 version.setStatus(Status.ACTIVE);
404 project.setVersions(Arrays.asList(version));
405 projectService.updateProject(project, 1);
406
407 project = projectService.getProject(project.getId());
408 assertNotNull(project);
409 assertEquals("version not updated", 1, project.getVersions().size());
410
411 }
412
413 @Test
414 public void testIsNameUniqueProjectName() throws Exception {
415
416 List<Project> projects = projectDAO.findAll();
417 String existingName = projects.get(0).getName();
418
419 assertTrue("existing name", projectService.isUniqueProjectName(existingName, projects.get(0).getId()));
420 assertFalse("existing name", projectService.isUniqueProjectName(existingName, projects.get(1).getId()));
421 assertFalse("existing name", projectService.isUniqueProjectName(existingName, null));
422
423 }
424
425 @Override
426 protected String[] getDataSetFiles() {
427 return new String[]{
428
429 "dataset/userpreferencesbean_dataset.xml",
430 "dataset/userbean_dataset.xml",
431 "dataset/customfieldbean_dataset.xml",
432 "dataset/customfieldvaluebean_dataset.xml",
433 "dataset/projectbean_dataset.xml",
434 "dataset/project_owner_rel_dataset.xml",
435 "dataset/projectbean_field_rel_dataset.xml",
436 "dataset/workflowscriptbean_dataset.xml",
437 "dataset/projectscriptbean_dataset.xml",
438 "dataset/componentbean_dataset.xml",
439 "dataset/versionbean_dataset.xml",
440 "dataset/permissionbean_dataset.xml",
441 "dataset/issuebean_dataset.xml",
442 "dataset/issuefieldbean_dataset.xml",
443 "dataset/issueattachmentbean_dataset.xml",
444 "dataset/issueactivitybean_dataset.xml",
445 "dataset/issuehistorybean_dataset.xml",
446 "dataset/notificationbean_dataset.xml"};
447
448 }
449
450 }