Merge branch 'mikhail.golubev/configurable-issues-states'
[idea/community.git] / plugins / tasks / tasks-tests / test / com / intellij / tasks / integration / RedmineIntegrationTest.java
1 package com.intellij.tasks.integration;
2
3 import com.intellij.openapi.util.Condition;
4 import com.intellij.tasks.Task;
5 import com.intellij.tasks.TaskBundle;
6 import com.intellij.tasks.TaskManagerTestCase;
7 import com.intellij.tasks.impl.LocalTaskImpl;
8 import com.intellij.tasks.impl.TaskUtil;
9 import com.intellij.tasks.redmine.RedmineRepository;
10 import com.intellij.tasks.redmine.RedmineRepositoryType;
11 import com.intellij.tasks.redmine.model.RedmineProject;
12 import com.intellij.util.containers.ContainerUtil;
13
14 import java.util.List;
15
16 /**
17  * @author Mikhail Golubev
18  */
19 public class RedmineIntegrationTest extends TaskManagerTestCase {
20   private static final String REDMINE_2_0_TEST_SERVER_URL = "http://trackers-tests.labs.intellij.net:8072/";
21
22   private RedmineRepository myRepository;
23
24   public void testIssueFiltering() throws Exception {
25     // TODO: so far supplied query is unused, investigate
26
27     // with closed issues
28     Task[] found = myRepository.getIssues(null, 0, 25, true);
29     assertEquals(6, found.length);
30
31     // without closed issues
32     found = myRepository.getIssues(null, 0, 25, false);
33     assertEquals(5, found.length);
34
35     // unique summary
36     //found = myRepository.getIssues("baz", 0, 25, true);
37     //assertEquals(1, found.length);
38   }
39
40   public void testIssueSearch() throws Exception {
41     Task found = myRepository.findTask("7");
42     assertNotNull(found);
43     assertEquals("Summary contains 'baz'", found.getSummary());
44   }
45
46   public void testPagination() throws Exception {
47     // all issues assigned to Integration Test User
48     Task[] found = myRepository.getIssues("", 0, 20, true);
49     assertTrue(found.length > 3);
50
51     found = myRepository.getIssues("", 10, 20, true);
52     assertEquals(0, found.length);
53
54     found = myRepository.getIssues("", 0, 1, true);
55     assertEquals(1, found.length);
56   }
57
58   public void testCommitMessageFormat() throws Exception {
59     myRepository.setCommitMessageFormat("{project} {number} {id} {summary}");
60     myRepository.setShouldFormatCommitMessage(true);
61     LocalTaskImpl localTask = new LocalTaskImpl(myRepository.findTask(String.valueOf(7)));
62     assertEquals("prj-1 7 7 Summary contains 'baz'", TaskUtil.getChangeListComment(localTask));
63   }
64
65   /**
66    * Redmine doesn't send 401 or 403 errors, when issues are downloaded with wrong credentials, so current user information is
67    * fetched instead.
68    */
69   public void testCredentialsCheck() throws Exception {
70     myRepository.setPassword("wrong-password");
71     try {
72       //noinspection ConstantConditions
73       final Exception exception = myRepository.createCancellableConnection().call();
74       assertNotNull("Test connection must fail when wrong credentials specified", exception);
75     }
76     catch (Exception e) {
77       assertEquals(TaskBundle.message("failure.login"), e.getMessage());
78     }
79   }
80
81   // IDEA-126470
82   public void testIssueWithMissingDescription() throws Exception {
83     final Task issue = myRepository.findTask("8");
84     assertNotNull(issue);
85     assertNull(issue.getDescription());
86     assertEquals(issue.getSummary(), "Artificial issue with no description created via REST API. Do not update it!");
87   }
88
89   public void testProjectFiltering() throws Exception {
90     final List<RedmineProject> allProjects = myRepository.fetchProjects();
91     final RedmineProject project = ContainerUtil.find(allProjects, new Condition<RedmineProject>() {
92       @Override
93       public boolean value(RedmineProject project) {
94         return project.getName().equals("With-Minus");
95       }
96     });
97     assertNotNull(project);
98     myRepository.setCurrentProject(project);
99     final Task[] issues = myRepository.getIssues("", 0, 10, false);
100     assertNotNull(issues);
101     assertEquals(1, issues.length);
102     assertEquals(issues[0].getSummary(), "This issue was created for project filtering tests. Do not change it.");
103   }
104
105   @Override
106   public void setUp() throws Exception {
107     super.setUp();
108     myRepository = new RedmineRepository(new RedmineRepositoryType());
109     myRepository.setUrl(REDMINE_2_0_TEST_SERVER_URL);
110     myRepository.setUsername("buildtest");
111     myRepository.setPassword("buildtest");
112     myRepository.setUseHttpAuthentication(true);
113   }
114 }
115
116