View Javadoc
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          // refresh project bean
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         // refresh saved component
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             // ok
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     //TODO
364     @Test
365     @Ignore
366     public void testGetListOfProjectFields() {
367         fail("not implemented");
368     }
369 
370     //TODO
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 }