commit | author | age
|
0f43a5
|
1 |
/*
|
JM |
2 |
* Copyright 2012 gitblit.com.
|
|
3 |
*
|
|
4 |
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5 |
* you may not use this file except in compliance with the License.
|
|
6 |
* You may obtain a copy of the License at
|
|
7 |
*
|
|
8 |
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9 |
*
|
|
10 |
* Unless required by applicable law or agreed to in writing, software
|
|
11 |
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12 |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13 |
* See the License for the specific language governing permissions and
|
|
14 |
* limitations under the License.
|
|
15 |
*/
|
|
16 |
package com.gitblit.tests;
|
|
17 |
|
|
18 |
import static org.junit.Assert.assertEquals;
|
69a559
|
19 |
import static org.junit.Assert.assertFalse;
|
0f43a5
|
20 |
import static org.junit.Assert.assertNotNull;
|
JM |
21 |
import static org.junit.Assert.assertTrue;
|
|
22 |
|
|
23 |
import java.util.List;
|
|
24 |
|
|
25 |
import org.bouncycastle.util.Arrays;
|
|
26 |
import org.eclipse.jgit.lib.Repository;
|
|
27 |
import org.junit.Test;
|
|
28 |
|
d896e6
|
29 |
import com.gitblit.LuceneExecutor;
|
0f43a5
|
30 |
import com.gitblit.models.IssueModel;
|
JM |
31 |
import com.gitblit.models.IssueModel.Attachment;
|
|
32 |
import com.gitblit.models.IssueModel.Change;
|
|
33 |
import com.gitblit.models.IssueModel.Field;
|
|
34 |
import com.gitblit.models.IssueModel.Priority;
|
69a559
|
35 |
import com.gitblit.models.IssueModel.Status;
|
06ff61
|
36 |
import com.gitblit.models.SearchResult;
|
1aa6e0
|
37 |
import com.gitblit.utils.FileUtils;
|
0f43a5
|
38 |
import com.gitblit.utils.IssueUtils;
|
JM |
39 |
import com.gitblit.utils.IssueUtils.IssueFilter;
|
|
40 |
|
69a559
|
41 |
/**
|
JM |
42 |
* Tests the mechanics of distributed issue management on the gb-issues branch.
|
|
43 |
*
|
|
44 |
* @author James Moger
|
|
45 |
*
|
|
46 |
*/
|
0f43a5
|
47 |
public class IssuesTest {
|
JM |
48 |
|
|
49 |
@Test
|
d3065f
|
50 |
public void testLifecycle() throws Exception {
|
0f43a5
|
51 |
Repository repository = GitBlitSuite.getIssuesTestRepository();
|
1aa6e0
|
52 |
String name = FileUtils.getRelativePath(GitBlitSuite.REPOSITORIES, repository.getDirectory());
|
d3065f
|
53 |
|
JM |
54 |
// create and insert an issue
|
69a559
|
55 |
Change c1 = newChange("testCreation() " + Long.toHexString(System.currentTimeMillis()));
|
0f43a5
|
56 |
IssueModel issue = IssueUtils.createIssue(repository, c1);
|
JM |
57 |
assertNotNull(issue.id);
|
|
58 |
|
|
59 |
// retrieve issue and compare
|
|
60 |
IssueModel constructed = IssueUtils.getIssue(repository, issue.id);
|
|
61 |
compare(issue, constructed);
|
|
62 |
|
69a559
|
63 |
assertEquals(1, constructed.changes.size());
|
d3065f
|
64 |
|
69a559
|
65 |
// C1: create the issue
|
d3065f
|
66 |
c1 = newChange("testUpdates() " + Long.toHexString(System.currentTimeMillis()));
|
JM |
67 |
issue = IssueUtils.createIssue(repository, c1);
|
69a559
|
68 |
assertNotNull(issue.id);
|
JM |
69 |
|
d3065f
|
70 |
constructed = IssueUtils.getIssue(repository, issue.id);
|
69a559
|
71 |
compare(issue, constructed);
|
d3065f
|
72 |
assertEquals(1, constructed.changes.size());
|
69a559
|
73 |
|
JM |
74 |
// C2: set owner
|
|
75 |
Change c2 = new Change("C2");
|
|
76 |
c2.comment("I'll fix this");
|
|
77 |
c2.setField(Field.Owner, c2.author);
|
0f43a5
|
78 |
assertTrue(IssueUtils.updateIssue(repository, issue.id, c2));
|
69a559
|
79 |
constructed = IssueUtils.getIssue(repository, issue.id);
|
JM |
80 |
assertEquals(2, constructed.changes.size());
|
|
81 |
assertEquals(c2.author, constructed.owner);
|
|
82 |
|
|
83 |
// C3: add a note
|
|
84 |
Change c3 = new Change("C3");
|
|
85 |
c3.comment("yeah, this is working");
|
|
86 |
assertTrue(IssueUtils.updateIssue(repository, issue.id, c3));
|
|
87 |
constructed = IssueUtils.getIssue(repository, issue.id);
|
|
88 |
assertEquals(3, constructed.changes.size());
|
|
89 |
|
|
90 |
// C4: add attachment
|
|
91 |
Change c4 = new Change("C4");
|
|
92 |
Attachment a = newAttachment();
|
|
93 |
c4.addAttachment(a);
|
|
94 |
assertTrue(IssueUtils.updateIssue(repository, issue.id, c4));
|
|
95 |
|
|
96 |
Attachment a1 = IssueUtils.getIssueAttachment(repository, issue.id, a.name);
|
|
97 |
assertEquals(a.content.length, a1.content.length);
|
|
98 |
assertTrue(Arrays.areEqual(a.content, a1.content));
|
|
99 |
|
|
100 |
// C5: close the issue
|
|
101 |
Change c5 = new Change("C5");
|
|
102 |
c5.comment("closing issue");
|
|
103 |
c5.setField(Field.Status, Status.Fixed);
|
|
104 |
assertTrue(IssueUtils.updateIssue(repository, issue.id, c5));
|
0f43a5
|
105 |
|
JM |
106 |
// retrieve issue again
|
|
107 |
constructed = IssueUtils.getIssue(repository, issue.id);
|
|
108 |
|
69a559
|
109 |
assertEquals(5, constructed.changes.size());
|
JM |
110 |
assertTrue(constructed.status.isClosed());
|
0f43a5
|
111 |
|
69a559
|
112 |
List<IssueModel> allIssues = IssueUtils.getIssues(repository, null);
|
JM |
113 |
List<IssueModel> openIssues = IssueUtils.getIssues(repository, new IssueFilter() {
|
0f43a5
|
114 |
@Override
|
JM |
115 |
public boolean accept(IssueModel issue) {
|
69a559
|
116 |
return !issue.status.isClosed();
|
0f43a5
|
117 |
}
|
JM |
118 |
});
|
69a559
|
119 |
List<IssueModel> closedIssues = IssueUtils.getIssues(repository, new IssueFilter() {
|
JM |
120 |
@Override
|
|
121 |
public boolean accept(IssueModel issue) {
|
|
122 |
return issue.status.isClosed();
|
|
123 |
}
|
|
124 |
});
|
d896e6
|
125 |
|
69a559
|
126 |
assertTrue(allIssues.size() > 0);
|
JM |
127 |
assertEquals(1, openIssues.size());
|
|
128 |
assertEquals(1, closedIssues.size());
|
d3065f
|
129 |
|
JM |
130 |
// build a new Lucene index
|
d896e6
|
131 |
LuceneExecutor lucene = new LuceneExecutor(null, GitBlitSuite.REPOSITORIES);
|
JM |
132 |
lucene.deleteIndex(name);
|
d3065f
|
133 |
for (IssueModel anIssue : allIssues) {
|
d896e6
|
134 |
lucene.index(name, anIssue);
|
06ff61
|
135 |
}
|
d04009
|
136 |
List<SearchResult> hits = lucene.search("working", 1, 10, name);
|
87ee94
|
137 |
assertTrue(hits.size() == 1);
|
06ff61
|
138 |
|
JM |
139 |
// reindex an issue
|
d3065f
|
140 |
issue = allIssues.get(0);
|
06ff61
|
141 |
Change change = new Change("reindex");
|
JM |
142 |
change.comment("this is a test of reindexing an issue");
|
|
143 |
IssueUtils.updateIssue(repository, issue.id, change);
|
|
144 |
issue = IssueUtils.getIssue(repository, issue.id);
|
d896e6
|
145 |
lucene.index(name, issue);
|
d3065f
|
146 |
|
87ee94
|
147 |
hits = lucene.search("working", 1, 10, name);
|
JM |
148 |
assertTrue(hits.size() == 1);
|
|
149 |
|
|
150 |
|
d3065f
|
151 |
// delete all issues
|
JM |
152 |
for (IssueModel anIssue : allIssues) {
|
|
153 |
assertTrue(IssueUtils.deleteIssue(repository, anIssue.id, "D"));
|
|
154 |
}
|
|
155 |
|
d896e6
|
156 |
lucene.close();
|
06ff61
|
157 |
repository.close();
|
JM |
158 |
}
|
|
159 |
|
69a559
|
160 |
@Test
|
JM |
161 |
public void testChangeComment() throws Exception {
|
|
162 |
Repository repository = GitBlitSuite.getIssuesTestRepository();
|
|
163 |
// C1: create the issue
|
|
164 |
Change c1 = newChange("testChangeComment() " + Long.toHexString(System.currentTimeMillis()));
|
|
165 |
IssueModel issue = IssueUtils.createIssue(repository, c1);
|
|
166 |
assertNotNull(issue.id);
|
|
167 |
assertTrue(issue.changes.get(0).hasComment());
|
|
168 |
|
|
169 |
assertTrue(IssueUtils.changeComment(repository, issue, c1, "E1", "I changed the comment"));
|
|
170 |
issue = IssueUtils.getIssue(repository, issue.id);
|
|
171 |
assertTrue(issue.changes.get(0).hasComment());
|
|
172 |
assertEquals("I changed the comment", issue.changes.get(0).comment.text);
|
|
173 |
|
|
174 |
assertTrue(IssueUtils.deleteIssue(repository, issue.id, "D"));
|
|
175 |
|
|
176 |
repository.close();
|
|
177 |
}
|
|
178 |
|
|
179 |
@Test
|
|
180 |
public void testDeleteComment() throws Exception {
|
|
181 |
Repository repository = GitBlitSuite.getIssuesTestRepository();
|
|
182 |
// C1: create the issue
|
|
183 |
Change c1 = newChange("testDeleteComment() " + Long.toHexString(System.currentTimeMillis()));
|
|
184 |
IssueModel issue = IssueUtils.createIssue(repository, c1);
|
|
185 |
assertNotNull(issue.id);
|
|
186 |
assertTrue(issue.changes.get(0).hasComment());
|
|
187 |
|
|
188 |
assertTrue(IssueUtils.deleteComment(repository, issue, c1, "D1"));
|
|
189 |
issue = IssueUtils.getIssue(repository, issue.id);
|
|
190 |
assertEquals(1, issue.changes.size());
|
|
191 |
assertFalse(issue.changes.get(0).hasComment());
|
|
192 |
|
|
193 |
issue = IssueUtils.getIssue(repository, issue.id, false);
|
|
194 |
assertEquals(2, issue.changes.size());
|
|
195 |
assertTrue(issue.changes.get(0).hasComment());
|
|
196 |
assertFalse(issue.changes.get(1).hasComment());
|
|
197 |
|
|
198 |
assertTrue(IssueUtils.deleteIssue(repository, issue.id, "D"));
|
|
199 |
|
|
200 |
repository.close();
|
0f43a5
|
201 |
}
|
JM |
202 |
|
|
203 |
private Change newChange(String summary) {
|
69a559
|
204 |
Change change = new Change("C1");
|
0f43a5
|
205 |
change.setField(Field.Summary, summary);
|
JM |
206 |
change.setField(Field.Description, "this is my description");
|
|
207 |
change.setField(Field.Priority, Priority.High);
|
|
208 |
change.setField(Field.Labels, "helpdesk");
|
|
209 |
change.comment("my comment");
|
|
210 |
return change;
|
69a559
|
211 |
}
|
JM |
212 |
|
|
213 |
private Attachment newAttachment() {
|
|
214 |
Attachment attachment = new Attachment(Long.toHexString(System.currentTimeMillis())
|
|
215 |
+ ".txt");
|
|
216 |
attachment.content = new byte[] { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
|
|
217 |
0x4a };
|
|
218 |
return attachment;
|
0f43a5
|
219 |
}
|
JM |
220 |
|
|
221 |
private void compare(IssueModel issue, IssueModel constructed) {
|
|
222 |
assertEquals(issue.id, constructed.id);
|
|
223 |
assertEquals(issue.reporter, constructed.reporter);
|
|
224 |
assertEquals(issue.owner, constructed.owner);
|
|
225 |
assertEquals(issue.summary, constructed.summary);
|
|
226 |
assertEquals(issue.description, constructed.description);
|
69a559
|
227 |
assertEquals(issue.created, constructed.created);
|
0f43a5
|
228 |
|
JM |
229 |
assertTrue(issue.hasLabel("helpdesk"));
|
|
230 |
}
|
|
231 |
} |