View Javadoc
1   /*
2    * To change this template, choose Tools | Templates
3    * and open the template in the editor.
4    */
5   package org.itracker.model.util;
6   
7   import org.itracker.AbstractDependencyInjectionTest;
8   import org.itracker.model.*;
9   import org.itracker.model.CustomField.Type;
10  import org.junit.Test;
11  
12  import java.text.SimpleDateFormat;
13  import java.util.*;
14  
15  import static org.itracker.Assert.*;
16  
17  /**
18   * TODO: make tests using the database where appropriate (setup testdata from datasets)
19   *
20   * @author seas at andreysergievskiy.com
21   */
22  public class IssueUtilitiesIT extends AbstractDependencyInjectionTest {
23  
24     @Test
25     public void testGetFieldType() {
26        assertEquals(IssueUtilities.FIELD_TYPE_SINGLE,
27                IssueUtilities.getFieldType(IssueUtilities.FIELD_ID));
28        assertEquals(IssueUtilities.FIELD_TYPE_SINGLE,
29                IssueUtilities.getFieldType(IssueUtilities.FIELD_DESCRIPTION));
30        assertEquals(IssueUtilities.FIELD_TYPE_MAP,
31                IssueUtilities.getFieldType(1)); // custom field
32  
33     }
34  
35     @Test
36     public void testGetFieldName() {
37        assertEquals("id",
38                IssueUtilities.getFieldName(IssueUtilities.FIELD_ID));
39        assertEquals("description",
40                IssueUtilities.getFieldName(IssueUtilities.FIELD_DESCRIPTION));
41        assertEquals("status",
42                IssueUtilities.getFieldName(IssueUtilities.FIELD_STATUS));
43        assertEquals("resolution",
44                IssueUtilities.getFieldName(IssueUtilities.FIELD_RESOLUTION));
45        assertEquals("severity",
46                IssueUtilities.getFieldName(IssueUtilities.FIELD_SEVERITY));
47        assertEquals("creatorId",
48                IssueUtilities.getFieldName(IssueUtilities.FIELD_CREATOR));
49        assertEquals("createdate",
50                IssueUtilities.getFieldName(IssueUtilities.FIELD_CREATEDATE));
51        assertEquals("ownerId",
52                IssueUtilities.getFieldName(IssueUtilities.FIELD_OWNER));
53        assertEquals("lastmodified",
54                IssueUtilities.getFieldName(IssueUtilities.FIELD_LASTMODIFIED));
55        assertEquals("projectId",
56                IssueUtilities.getFieldName(IssueUtilities.FIELD_PROJECT));
57        assertEquals("targetVersion",
58                IssueUtilities.getFieldName(IssueUtilities.FIELD_TARGET_VERSION));
59        assertEquals("components",
60                IssueUtilities.getFieldName(IssueUtilities.FIELD_COMPONENTS));
61        assertEquals("versions",
62                IssueUtilities.getFieldName(IssueUtilities.FIELD_VERSIONS));
63        assertEquals("attachmentDescription",
64                IssueUtilities.getFieldName(IssueUtilities.FIELD_ATTACHMENTDESCRIPTION));
65        assertEquals("attachment",
66                IssueUtilities.getFieldName(IssueUtilities.FIELD_ATTACHMENTFILENAME));
67        assertEquals("history",
68                IssueUtilities.getFieldName(IssueUtilities.FIELD_HISTORY));
69        assertEquals("",
70                IssueUtilities.getFieldName(null));
71        assertEquals("",
72                IssueUtilities.getFieldName(-999));
73        assertEquals("customFields",
74                IssueUtilities.getFieldName(999));
75     }
76  
77     @Test
78     public void testGetFieldNameByLocale() {
79        final List<CustomField> customFields = new Vector<>();
80        final CustomField customField1 = new CustomField();
81        customField1.setFieldType(Type.STRING);
82        customField1.setId(1);
83        customFields.add(customField1);
84        assertEquals("test-field_custom",
85                IssueUtilities.getFieldName(1, customFields, new Locale("test")));
86     }
87  
88     @Test
89     public void testGetStandardFieldKey() {
90        assertEquals("itracker.web.attr.id",
91                IssueUtilities.getStandardFieldKey(IssueUtilities.FIELD_ID));
92        assertEquals("itracker.web.attr.description",
93                IssueUtilities.getStandardFieldKey(IssueUtilities.FIELD_DESCRIPTION));
94        assertEquals("itracker.web.attr.status",
95                IssueUtilities.getStandardFieldKey(IssueUtilities.FIELD_STATUS));
96        assertEquals("itracker.web.attr.resolution",
97                IssueUtilities.getStandardFieldKey(IssueUtilities.FIELD_RESOLUTION));
98        assertEquals("itracker.web.attr.severity",
99                IssueUtilities.getStandardFieldKey(IssueUtilities.FIELD_SEVERITY));
100       assertEquals("itracker.web.attr.creator",
101               IssueUtilities.getStandardFieldKey(IssueUtilities.FIELD_CREATOR));
102       assertEquals("itracker.web.attr.createdate",
103               IssueUtilities.getStandardFieldKey(IssueUtilities.FIELD_CREATEDATE));
104       assertEquals("itracker.web.attr.owner",
105               IssueUtilities.getStandardFieldKey(IssueUtilities.FIELD_OWNER));
106       assertEquals("itracker.web.attr.lastmodified",
107               IssueUtilities.getStandardFieldKey(IssueUtilities.FIELD_LASTMODIFIED));
108       assertEquals("itracker.web.attr.project",
109               IssueUtilities.getStandardFieldKey(IssueUtilities.FIELD_PROJECT));
110       assertEquals("itracker.web.attr.target",
111               IssueUtilities.getStandardFieldKey(IssueUtilities.FIELD_TARGET_VERSION));
112       assertEquals("itracker.web.attr.components",
113               IssueUtilities.getStandardFieldKey(IssueUtilities.FIELD_COMPONENTS));
114       assertEquals("itracker.web.attr.versions",
115               IssueUtilities.getStandardFieldKey(IssueUtilities.FIELD_VERSIONS));
116       assertEquals("itracker.web.attr.attachmentdescription",
117               IssueUtilities.getStandardFieldKey(IssueUtilities.FIELD_ATTACHMENTDESCRIPTION));
118       assertEquals("itracker.web.attr.attachmentfilename",
119               IssueUtilities.getStandardFieldKey(IssueUtilities.FIELD_ATTACHMENTFILENAME));
120       assertEquals("itracker.web.attr.detaileddescription",
121               IssueUtilities.getStandardFieldKey(IssueUtilities.FIELD_HISTORY));
122       assertEquals("itracker.web.generic.unknown",
123               IssueUtilities.getStandardFieldKey(-999));
124       assertEquals("itracker.web.generic.unknown",
125               IssueUtilities.getStandardFieldKey(999));
126    }
127 
128    public void doTestGetStandardFields(final Locale locale,
129                                        final NameValuePair[] expected) {
130       final NameValuePair[] actual = IssueUtilities.getStandardFields(locale);
131       for (final NameValuePair nvpExpected : expected) {
132          boolean found = false;
133          for (final NameValuePair nvpActual : actual) {
134             found = nvpExpected.getName().equals(nvpActual.getName())
135                     && nvpExpected.getValue().equals(nvpActual.getValue());
136             if (found) break;
137          }
138          assertTrue("IssueUtilities.getStandardFields(" + locale + ").contains(" +
139                          "new NameValuePair(" + nvpExpected.getName() + "," +
140                          nvpExpected.getValue() + "))",
141                  found);
142       }
143       assertEquals("IssueUtilities.getStandardFields(" + locale + ").length",
144               expected.length, actual.length);
145    }
146 
147    @Test
148    public void testGetStandardFields() {
149       final NameValuePair[] expected = new NameValuePair[]{
150               new NameValuePair("test-field_id",
151                       Integer.toString(IssueUtilities.FIELD_ID)),
152               new NameValuePair("test-field_description",
153                       Integer.toString(IssueUtilities.FIELD_DESCRIPTION)),
154               new NameValuePair("test-field_status",
155                       Integer.toString(IssueUtilities.FIELD_STATUS)),
156               new NameValuePair("test-field_resolution",
157                       Integer.toString(IssueUtilities.FIELD_RESOLUTION)),
158               new NameValuePair("test-field_severity",
159                       Integer.toString(IssueUtilities.FIELD_SEVERITY)),
160               new NameValuePair("test-field_creator",
161                       Integer.toString(IssueUtilities.FIELD_CREATOR)),
162               new NameValuePair("test-field_createdate",
163                       Integer.toString(IssueUtilities.FIELD_CREATEDATE)),
164               new NameValuePair("test-field_owner",
165                       Integer.toString(IssueUtilities.FIELD_OWNER)),
166               new NameValuePair("test-field_lastmodified",
167                       Integer.toString(IssueUtilities.FIELD_LASTMODIFIED)),
168               new NameValuePair("test-field_project",
169                       Integer.toString(IssueUtilities.FIELD_PROJECT)),
170               new NameValuePair("test-field_target",
171                       Integer.toString(IssueUtilities.FIELD_TARGET_VERSION)),
172               new NameValuePair("test-field_components",
173                       Integer.toString(IssueUtilities.FIELD_COMPONENTS)),
174               new NameValuePair("test-field_versions",
175                       Integer.toString(IssueUtilities.FIELD_VERSIONS)),
176               new NameValuePair("test-field_attachmentdescription",
177                       Integer.toString(IssueUtilities.FIELD_ATTACHMENTDESCRIPTION)),
178               new NameValuePair("test-field_attachmentfilename",
179                       Integer.toString(IssueUtilities.FIELD_ATTACHMENTFILENAME)),
180               new NameValuePair("test-field_detaileddescription",
181                       Integer.toString(IssueUtilities.FIELD_HISTORY))
182       };
183       doTestGetStandardFields(new Locale("test"), expected);
184    }
185 
186    @Test
187    public void testGetRelationNameByLocaleWithInt() {
188       assertEquals("test-cloned_c",
189               IssueUtilities.getRelationName(
190                       IssueRelation.Type.CLONED_C,
191                       new Locale("test")));
192       assertEquals("test-cloned_p",
193               IssueUtilities.getRelationName(
194                       IssueRelation.Type.CLONED_P,
195                       new Locale("test")));
196       assertEquals("test-dependent_c",
197               IssueUtilities.getRelationName(
198                       IssueRelation.Type.DEPENDENT_C,
199                       new Locale("test")));
200       assertEquals("test-dependent_p",
201               IssueUtilities.getRelationName(
202                       IssueRelation.Type.DEPENDENT_P,
203                       new Locale("test")));
204       assertEquals("test-duplicate_c",
205               IssueUtilities.getRelationName(
206                       IssueRelation.Type.DUPLICATE_C,
207                       new Locale("test")));
208       assertEquals("test-duplicate_p",
209               IssueUtilities.getRelationName(
210                       IssueRelation.Type.DUPLICATE_P,
211                       new Locale("test")));
212       assertEquals("test-related_c",
213               IssueUtilities.getRelationName(
214                       IssueRelation.Type.RELATED_C,
215                       new Locale("test")));
216       assertEquals("test-related_p",
217               IssueUtilities.getRelationName(
218                       IssueRelation.Type.RELATED_P,
219                       new Locale("test")));
220       assertEquals("test-split_c",
221               IssueUtilities.getRelationName(
222                       IssueRelation.Type.SPLIT_C,
223                       new Locale("test")));
224       assertEquals("test-split_p",
225               IssueUtilities.getRelationName(
226                       IssueRelation.Type.SPLIT_P,
227                       new Locale("test")));
228    }
229 
230 
231    @Test
232    public void testGetMatchingRelationType() {
233       assertEquals(IssueRelation.Type.RELATED_C,
234               IssueUtilities.getMatchingRelationType(
235                       IssueRelation.Type.RELATED_P));
236       assertEquals(IssueRelation.Type.RELATED_P,
237               IssueUtilities.getMatchingRelationType(
238                       IssueRelation.Type.RELATED_C));
239       assertEquals(IssueRelation.Type.DUPLICATE_C,
240               IssueUtilities.getMatchingRelationType(
241                       IssueRelation.Type.DUPLICATE_P));
242       assertEquals(IssueRelation.Type.DUPLICATE_P,
243               IssueUtilities.getMatchingRelationType(
244                       IssueRelation.Type.DUPLICATE_C));
245       assertEquals(IssueRelation.Type.CLONED_C,
246               IssueUtilities.getMatchingRelationType(
247                       IssueRelation.Type.CLONED_P));
248       assertEquals(IssueRelation.Type.CLONED_P,
249               IssueUtilities.getMatchingRelationType(
250                       IssueRelation.Type.CLONED_C));
251       assertEquals(IssueRelation.Type.SPLIT_C,
252               IssueUtilities.getMatchingRelationType(
253                       IssueRelation.Type.SPLIT_P));
254       assertEquals(IssueRelation.Type.SPLIT_P,
255               IssueUtilities.getMatchingRelationType(
256                       IssueRelation.Type.SPLIT_C));
257       assertEquals(IssueRelation.Type.DEPENDENT_C,
258               IssueUtilities.getMatchingRelationType(
259                       IssueRelation.Type.DEPENDENT_P));
260       assertEquals(IssueRelation.Type.DEPENDENT_P,
261               IssueUtilities.getMatchingRelationType(
262                       IssueRelation.Type.DEPENDENT_C));
263    }
264 
265    @Test
266    public void testComponentsToString() {
267       final Issue issue = new Issue();
268       final Project project = new Project("project");
269       {
270          final Component component = new Component(project, "component1");
271          issue.getComponents().add(component);
272       }
273       {
274          final Component component = new Component(project, "component2");
275          issue.getComponents().add(component);
276       }
277       assertEquals("component1, component2",
278               IssueUtilities.componentsToString(issue));
279    }
280 
281    @Test
282    public void testVersionsToString() {
283       final Issue issue = new Issue();
284       issue.getVersions().add(new Version(new Project("project"), "1.1.1"));
285       issue.getVersions().add(new Version(new Project("project"), "1.2.3"));
286       issue.getVersions().add(new Version(new Project("project"), "3.2.1"));
287       assertEquals("1.1.1, 1.2.3, 3.2.1",
288               IssueUtilities.versionsToString(issue));
289    }
290 
291    @Test
292    public void testHistoryToString() {
293       final Issue issue = new Issue();
294       final User user = new User("user");
295       user.setFirstName("firstName");
296       user.setLastName("lastName");
297       final IssueHistory issueHistory = new IssueHistory(issue,
298               user, "description", IssueUtilities.STATUS_CLOSED);
299       issue.getHistory().add(issueHistory);
300       final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
301       assertEquals("description,firstName lastName,"
302                       + dateFormat.format(new Date()),
303               IssueUtilities.historyToString(issue,
304                       dateFormat));
305    }
306 
307    @Test
308    public void testGetStatusNameByLocaleInt() {
309       assertEquals("test-status_assigned",
310               IssueUtilities.getStatusName(IssueUtilities.STATUS_ASSIGNED,
311                       new Locale("test")));
312       assertEquals("test-status_closed",
313               IssueUtilities.getStatusName(IssueUtilities.STATUS_CLOSED,
314                       new Locale("test")));
315       assertEquals("test-status_end",
316               IssueUtilities.getStatusName(IssueUtilities.STATUS_END,
317                       new Locale("test")));
318       assertEquals("test-status_new",
319               IssueUtilities.getStatusName(IssueUtilities.STATUS_NEW,
320                       new Locale("test")));
321       assertEquals("test-status_resolved",
322               IssueUtilities.getStatusName(IssueUtilities.STATUS_RESOLVED,
323                       new Locale("test")));
324       assertEquals("test-status_unassigned",
325               IssueUtilities.getStatusName(IssueUtilities.STATUS_UNASSIGNED,
326                       new Locale("test")));
327    }
328 
329    public void doTestGetStatusesByLocale(final Locale locale,
330                                          final List<NameValuePair> expected) {
331       assertEquals(expected.size(), IssueUtilities.getNumberStatuses());
332       final List<NameValuePair> actual = IssueUtilities.getStatuses(locale);
333       assertEquals(expected.size(), actual.size());
334       for (final NameValuePair nvpExpected : expected) {
335          boolean found = false;
336          for (final NameValuePair nvpActual : actual) {
337             found = nvpExpected.getName().equals(nvpActual.getName())
338                     && nvpExpected.getValue().equals(nvpActual.getValue());
339             if (found) break;
340          }
341          assertTrue(found);
342       }
343    }
344 
345    @Test
346    public void testSetStatuses() {
347       final List<Configuration> statuses_ = IssueUtilities.getStatuses();
348       final List<Configuration> statuses = new Vector<>();
349       final Configuration configuration = new Configuration(Configuration.Type.status,
350               new NameValuePair("key", "100"));
351       statuses.add(configuration);
352       IssueUtilities.setStatuses(statuses);
353       final List<NameValuePair> expected = new Vector<>();
354       expected.add(new NameValuePair("test-status_new", "100"));
355       doTestGetStatusesByLocale(new Locale("test"), expected);
356 
357    }
358 
359 
360    @Test
361    public void testGetSeverityNameByLocale() {
362       assertEquals("test-severity_low",
363               IssueUtilities.getSeverityName(1, new Locale("test")));
364       assertEquals("test-severity_middle",
365               IssueUtilities.getSeverityName(2, new Locale("test")));
366       assertEquals("test-severity_high",
367               IssueUtilities.getSeverityName(3, new Locale("test")));
368       assertEquals("test-severity_critical",
369               IssueUtilities.getSeverityName(4, new Locale("test")));
370    }
371 
372    public void doTestGetSeverities(final Locale locale,
373                                    final List<NameValuePair> expected) {
374       final List<NameValuePair> actual = IssueUtilities.getSeverities(locale);
375       assertEquals(expected.size(), actual.size());
376       for (final NameValuePair nvpExpected : expected) {
377          boolean found = false;
378          for (final NameValuePair nvpActual : actual) {
379             found = nvpExpected.getName().equals(nvpActual.getName())
380                     && nvpExpected.getValue().equals(nvpActual.getValue());
381             if (found) break;
382          }
383          assertTrue(found);
384       }
385    }
386 
387    @Test
388    public void testGetSeverities() {
389       final List<Configuration> severities = new Vector<>();
390       final Configuration severity1 = new Configuration(Configuration.Type.severity,
391               new NameValuePair("1", "1"));
392       severities.add(severity1);
393       final Configuration severity2 = new Configuration(Configuration.Type.severity,
394               new NameValuePair("2", "2"));
395       severities.add(severity2);
396       final Configuration severity3 = new Configuration(Configuration.Type.severity,
397               new NameValuePair("3", "3"));
398       severities.add(severity3);
399       final Configuration severity4 = new Configuration(Configuration.Type.severity,
400               new NameValuePair("4", "4"));
401       severities.add(severity4);
402       IssueUtilities.setSeverities(severities);
403       final List<NameValuePair> expected = new Vector<>();
404       expected.add(new NameValuePair("test-severity_low", "1"));
405       expected.add(new NameValuePair("test-severity_middle", "2"));
406       expected.add(new NameValuePair("test-severity_high", "3"));
407       expected.add(new NameValuePair("test-severity_critical", "4"));
408       doTestGetSeverities(new Locale("test"), expected);
409    }
410 
411    @Test
412    public void testSetSeverities() {
413       final List<Configuration> severities = new Vector<>();
414       final Configuration severity = new Configuration(Configuration.Type.severity,
415               new NameValuePair("88", "1"));
416       severities.add(severity);
417       IssueUtilities.setSeverities(severities);
418       final List<NameValuePair> expected = new Vector<>();
419       expected.add(new NameValuePair("test-severity_low", "1"));
420       doTestGetSeverities(new Locale("test"), expected);
421    }
422 
423    @Test
424    public void testCompareSeverities() {
425       final Issue issueA = new Issue();
426       issueA.setSeverity(1);
427       final Issue issueB = new Issue();
428       issueB.setSeverity(2);
429       assertEquals(1, IssueUtilities.compareSeverity(issueA, issueB));
430    }
431 
432    @Test
433    public void testGetResolutionName() {
434       assertEquals("test-resolution_fixed",
435               IssueUtilities.getResolutionName(1, new Locale("test")));
436       assertEquals("test-resolution_pending",
437               IssueUtilities.getResolutionName(2, new Locale("test")));
438    }
439 
440    @Test
441    public void testCheckResolutionName() {
442       assertEquals("test-resolution_fixed",
443               IssueUtilities.checkResolutionName("1", new Locale("test")));
444       assertEquals("test-resolution_pending",
445               IssueUtilities.checkResolutionName("2", new Locale("test")));
446    }
447 
448    public void doTestGetResolutionsByLocale(final Locale locale,
449                                             final List<NameValuePair> expected) {
450       final List<NameValuePair> actual = IssueUtilities.getResolutions(locale);
451       assertEquals(expected.size(), actual.size());
452       for (final NameValuePair nvpExpected : expected) {
453          boolean found = false;
454          for (final NameValuePair nvpActual : actual) {
455             found = nvpExpected.getName().equals(nvpActual.getName())
456                     && nvpExpected.getValue().equals(nvpActual.getValue());
457          }
458          assertTrue(found);
459       }
460    }
461 
462    @Test
463    public void testGetResolutionsByLocale() {
464       final List<Configuration> resolutions = new Vector<>();
465       final Configuration resolution = new Configuration(Configuration.Type.resolution,
466               new NameValuePair("one", "1"));
467       resolutions.add(resolution);
468       IssueUtilities.setResolutions(resolutions);
469       final List<NameValuePair> expected = new Vector<>();
470       expected.add(new NameValuePair("test-resolution_fixed", "1"));
471       doTestGetResolutionsByLocale(new Locale("test"), expected);
472    }
473 
474    @Test
475    public void testSetResolutions() {
476       final List<Configuration> resolutions = new Vector<>();
477       final Configuration resolution = new Configuration(Configuration.Type.resolution,
478               new NameValuePair("key", "1"));
479       resolutions.add(resolution);
480       IssueUtilities.setResolutions(resolutions);
481       final List<NameValuePair> expected = new Vector<>();
482       expected.add(new NameValuePair("test-resolution_fixed", "1"));
483       doTestGetResolutionsByLocale(new Locale("test"), expected);
484    }
485 
486    @Test
487    public void testGetActivityNameByLocale() {
488       assertEquals("test-activity_issue_created",
489               IssueUtilities.getActivityName(IssueActivityType.ISSUE_CREATED,
490                       new Locale("test")));
491 
492    }
493 
494    public void doTestGetCustomFields(final List<CustomField> expected) {
495       final List<CustomField> actual = IssueUtilities.getCustomFields();
496       assertEquals(expected.size(), actual.size());
497       for (final CustomField cf : expected) {
498          boolean found = false;
499          for (final CustomField cfActual : actual) {
500             found = cf.equals(cfActual);
501             if (found) break;
502          }
503          assertTrue(found);
504       }
505    }
506 
507    @Test
508    public void testGetCustomFields() {
509       final List<CustomField> expected = new Vector<>();
510       final CustomField customField1 = new CustomField();
511       customField1.setFieldType(Type.STRING);
512       customField1.setId(1);
513       expected.add(customField1);
514       IssueUtilities.setCustomFields(expected);
515       doTestGetCustomFields(expected);
516    }
517 
518    @Test
519    public void testSetCustomFields() {
520       final List<CustomField> expected = new Vector<>();
521       final CustomField customField1 = new CustomField();
522       customField1.setFieldType(Type.STRING);
523       customField1.setId(1);
524       expected.add(customField1);
525       IssueUtilities.setCustomFields(expected);
526       assertEquals(expected, IssueUtilities.getCustomFields());
527    }
528 
529 
530    @Test
531    public void testCanViewIssue() {
532       final Project project = new Project("project");
533       project.setId(1);
534       final Issue issue = new Issue();
535       issue.setProject(project);
536       final User user1 = new User();
537       user1.setId(1);
538       issue.setCreator(user1);
539       final User user2 = new User();
540       user2.setId(2);
541       final Map<Integer, Set<PermissionType>> permissions =
542               new HashMap<>();
543       assertTrue(IssueUtilities.canViewIssue(issue, user1, permissions));
544       assertFalse(IssueUtilities.canViewIssue(issue, user2, permissions));
545       final Set<PermissionType> permissionSet = new HashSet<>();
546       permissionSet.add(PermissionType.ISSUE_VIEW_ALL);
547       permissions.put(1, permissionSet);
548       assertTrue(IssueUtilities.canViewIssue(issue, user2, permissions));
549    }
550 
551    @Test
552    public void testCanEditIssue() {
553       final Project project = new Project("project");
554       project.setId(1);
555       final Issue issue = new Issue();
556       issue.setProject(project);
557       final User user1 = new User();
558       user1.setId(1);
559       issue.setCreator(user1);
560       final User user2 = new User();
561       user2.setId(2);
562       final Map<Integer, Set<PermissionType>> permissions =
563               new HashMap<>();
564       final Set<PermissionType> permissionSet = new HashSet<>();
565       permissions.put(1, permissionSet);
566       permissionSet.add(PermissionType.ISSUE_EDIT_USERS);
567       assertTrue(IssueUtilities.canEditIssue(issue, user1.getId(), permissions));
568       assertFalse(IssueUtilities.canEditIssue(issue, user2.getId(), permissions));
569       permissionSet.add(PermissionType.ISSUE_EDIT_ALL);
570       assertTrue(IssueUtilities.canEditIssue(issue, user1.getId(), permissions));
571       assertTrue(IssueUtilities.canEditIssue(issue, user2.getId(), permissions));
572    }
573 
574    @Test
575    public void testCanBeAssignedIssue() {
576       final Project project = new Project("project");
577       project.setId(1);
578       final Issue issue = new Issue();
579       issue.setProject(project);
580       final Integer user1Id = 1;
581       final Integer user2Id = 2;
582       final Map<Integer, Set<PermissionType>> permissions =
583               new HashMap<>();
584       final Set<PermissionType> permissionSet = new HashSet<>();
585       permissionSet.add(PermissionType.ISSUE_ASSIGNABLE);
586       permissionSet.add(PermissionType.ISSUE_EDIT_ALL);
587       permissions.put(1, permissionSet);
588       assertTrue(IssueUtilities.canBeAssignedIssue(issue, user1Id, permissions));
589       assertTrue(IssueUtilities.canBeAssignedIssue(issue, user2Id, permissions));
590    }
591 
592    @Test
593    public void testCanUnassigneIssue() {
594       final Project project = new Project("project");
595       project.setId(1);
596       final Issue issue = new Issue();
597       issue.setProject(project);
598       final User user1 = new User();
599       user1.setId(1);
600       issue.setOwner(user1);
601       final User user2 = new User();
602       user2.setId(2);
603       final Map<Integer, Set<PermissionType>> permissions =
604               new HashMap<>();
605       final Set<PermissionType> permissionSet = new HashSet<>();
606       permissionSet.add(PermissionType.ISSUE_UNASSIGN_SELF);
607       permissions.put(1, permissionSet);
608       assertTrue(IssueUtilities.canUnassignIssue(issue, user1.getId(), permissions));
609       assertFalse(IssueUtilities.canUnassignIssue(issue, user2.getId(), permissions));
610    }
611 
612    @Test
613    public void testHasIssueRelation() {
614       final Project project = new Project("project");
615       project.setId(1);
616       final Issue issue = new Issue();
617       final Issue related = new Issue();
618       related.setId(1);
619       final IssueRelation relation =
620               new IssueRelation(issue, related,
621                       IssueRelation.Type.CLONED_C);
622       issue.getRelations().add(relation);
623       assertTrue(IssueUtilities.hasIssueRelation(issue, 1));
624       assertFalse(IssueUtilities.hasIssueRelation(issue, 2));
625    }
626 
627    @Test
628    public void testHasIssueNotification() {
629       final Project project = new Project("project");
630       project.setId(1);
631       final Issue issue = new Issue();
632       issue.setId(1);
633       issue.setProject(project);
634       final User user1 = new User();
635       user1.setId(1);
636       issue.setCreator(user1);
637       issue.setOwner(user1);
638       assertTrue(IssueUtilities.hasIssueNotification(issue, 1));
639       //assertFalse(IssueUtilities.hasIssueNotification(issue, 2));
640    }
641 
642    @Override
643    public void onSetUp() throws Exception {
644 
645       super.onSetUp();
646    }
647 
648    /**
649     * Defines a set of datafiles to be uploaded into database.
650     *
651     * @return an array with datafiles.
652     */
653    protected String[] getDataSetFiles() {
654       return new String[]{
655               "dataset/languagebean_dataset.xml"
656       };
657    }
658 
659 }