From 27ae9095639bb228a1b7ff86a3ebe4264abf05be Mon Sep 17 00:00:00 2001
From: mschaefers <mschaefers@scoop-gmbh.de>
Date: Thu, 29 Nov 2012 12:33:09 -0500
Subject: [PATCH] feature: when using LdapUserService one can configure Gitblit to fetch all users from ldap that can possibly login. This allows to see newly generated LDAP users instantly in Gitblit. By now an LDAP user had to log in once to appear in GitBlit.
---
tests/com/gitblit/tests/IssuesTest.java | 186 +++++++++++++++++++++++++++++++++++++--------
1 files changed, 151 insertions(+), 35 deletions(-)
diff --git a/tests/com/gitblit/tests/IssuesTest.java b/tests/com/gitblit/tests/IssuesTest.java
index 1522ec6..54cac33 100644
--- a/tests/com/gitblit/tests/IssuesTest.java
+++ b/tests/com/gitblit/tests/IssuesTest.java
@@ -16,6 +16,7 @@
package com.gitblit.tests;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -25,21 +26,33 @@
import org.eclipse.jgit.lib.Repository;
import org.junit.Test;
+import com.gitblit.LuceneExecutor;
import com.gitblit.models.IssueModel;
import com.gitblit.models.IssueModel.Attachment;
import com.gitblit.models.IssueModel.Change;
import com.gitblit.models.IssueModel.Field;
import com.gitblit.models.IssueModel.Priority;
+import com.gitblit.models.IssueModel.Status;
+import com.gitblit.models.SearchResult;
+import com.gitblit.utils.FileUtils;
import com.gitblit.utils.IssueUtils;
import com.gitblit.utils.IssueUtils.IssueFilter;
+/**
+ * Tests the mechanics of distributed issue management on the gb-issues branch.
+ *
+ * @author James Moger
+ *
+ */
public class IssuesTest {
@Test
- public void testInsertion() throws Exception {
+ public void testLifecycle() throws Exception {
Repository repository = GitBlitSuite.getIssuesTestRepository();
- // create and insert the issue
- Change c1 = newChange("Test issue " + Long.toHexString(System.currentTimeMillis()));
+ String name = FileUtils.getRelativePath(GitBlitSuite.REPOSITORIES, repository.getDirectory());
+
+ // create and insert an issue
+ Change c1 = newChange("testCreation() " + Long.toHexString(System.currentTimeMillis()));
IssueModel issue = IssueUtils.createIssue(repository, c1);
assertNotNull(issue.id);
@@ -47,68 +60,171 @@
IssueModel constructed = IssueUtils.getIssue(repository, issue.id);
compare(issue, constructed);
- // add a note and update
- Change c2 = new Change();
- c2.author = "dave";
- c2.comment("yeah, this is working");
+ assertEquals(1, constructed.changes.size());
+
+ // C1: create the issue
+ c1 = newChange("testUpdates() " + Long.toHexString(System.currentTimeMillis()));
+ issue = IssueUtils.createIssue(repository, c1);
+ assertNotNull(issue.id);
+
+ constructed = IssueUtils.getIssue(repository, issue.id);
+ compare(issue, constructed);
+ assertEquals(1, constructed.changes.size());
+
+ // C2: set owner
+ Change c2 = new Change("C2");
+ c2.comment("I'll fix this");
+ c2.setField(Field.Owner, c2.author);
assertTrue(IssueUtils.updateIssue(repository, issue.id, c2));
+ constructed = IssueUtils.getIssue(repository, issue.id);
+ assertEquals(2, constructed.changes.size());
+ assertEquals(c2.author, constructed.owner);
+
+ // C3: add a note
+ Change c3 = new Change("C3");
+ c3.comment("yeah, this is working");
+ assertTrue(IssueUtils.updateIssue(repository, issue.id, c3));
+ constructed = IssueUtils.getIssue(repository, issue.id);
+ assertEquals(3, constructed.changes.size());
+
+ // C4: add attachment
+ Change c4 = new Change("C4");
+ Attachment a = newAttachment();
+ c4.addAttachment(a);
+ assertTrue(IssueUtils.updateIssue(repository, issue.id, c4));
+
+ Attachment a1 = IssueUtils.getIssueAttachment(repository, issue.id, a.name);
+ assertEquals(a.content.length, a1.content.length);
+ assertTrue(Arrays.areEqual(a.content, a1.content));
+
+ // C5: close the issue
+ Change c5 = new Change("C5");
+ c5.comment("closing issue");
+ c5.setField(Field.Status, Status.Fixed);
+ assertTrue(IssueUtils.updateIssue(repository, issue.id, c5));
// retrieve issue again
constructed = IssueUtils.getIssue(repository, issue.id);
- assertEquals(2, constructed.changes.size());
+ assertEquals(5, constructed.changes.size());
+ assertTrue(constructed.status.isClosed());
- Attachment a = IssueUtils.getIssueAttachment(repository, issue.id, "test.txt");
+ List<IssueModel> allIssues = IssueUtils.getIssues(repository, null);
+ List<IssueModel> openIssues = IssueUtils.getIssues(repository, new IssueFilter() {
+ @Override
+ public boolean accept(IssueModel issue) {
+ return !issue.status.isClosed();
+ }
+ });
+ List<IssueModel> closedIssues = IssueUtils.getIssues(repository, new IssueFilter() {
+ @Override
+ public boolean accept(IssueModel issue) {
+ return issue.status.isClosed();
+ }
+ });
+
+ assertTrue(allIssues.size() > 0);
+ assertEquals(1, openIssues.size());
+ assertEquals(1, closedIssues.size());
+
+ // build a new Lucene index
+ LuceneExecutor lucene = new LuceneExecutor(null, GitBlitSuite.REPOSITORIES);
+ lucene.deleteIndex(name);
+ for (IssueModel anIssue : allIssues) {
+ lucene.index(name, anIssue);
+ }
+ List<SearchResult> hits = lucene.search("working", 1, 10, name);
+ assertTrue(hits.size() == 1);
+
+ // reindex an issue
+ issue = allIssues.get(0);
+ Change change = new Change("reindex");
+ change.comment("this is a test of reindexing an issue");
+ IssueUtils.updateIssue(repository, issue.id, change);
+ issue = IssueUtils.getIssue(repository, issue.id);
+ lucene.index(name, issue);
+
+ hits = lucene.search("working", 1, 10, name);
+ assertTrue(hits.size() == 1);
+
+
+ // delete all issues
+ for (IssueModel anIssue : allIssues) {
+ assertTrue(IssueUtils.deleteIssue(repository, anIssue.id, "D"));
+ }
+
+ lucene.close();
repository.close();
+ }
+
+ @Test
+ public void testChangeComment() throws Exception {
+ Repository repository = GitBlitSuite.getIssuesTestRepository();
+ // C1: create the issue
+ Change c1 = newChange("testChangeComment() " + Long.toHexString(System.currentTimeMillis()));
+ IssueModel issue = IssueUtils.createIssue(repository, c1);
+ assertNotNull(issue.id);
+ assertTrue(issue.changes.get(0).hasComment());
- assertEquals(10, a.content.length);
- assertTrue(Arrays.areEqual(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, a.content));
+ assertTrue(IssueUtils.changeComment(repository, issue, c1, "E1", "I changed the comment"));
+ issue = IssueUtils.getIssue(repository, issue.id);
+ assertTrue(issue.changes.get(0).hasComment());
+ assertEquals("I changed the comment", issue.changes.get(0).comment.text);
+
+ assertTrue(IssueUtils.deleteIssue(repository, issue.id, "D"));
+
+ repository.close();
}
@Test
- public void testQuery() throws Exception {
+ public void testDeleteComment() throws Exception {
Repository repository = GitBlitSuite.getIssuesTestRepository();
- List<IssueModel> list = IssueUtils.getIssues(repository, null);
- List<IssueModel> list2 = IssueUtils.getIssues(repository, new IssueFilter() {
- boolean hasFirst = false;
- @Override
- public boolean accept(IssueModel issue) {
- if (!hasFirst) {
- hasFirst = true;
- return true;
- }
- return false;
- }
- });
+ // C1: create the issue
+ Change c1 = newChange("testDeleteComment() " + Long.toHexString(System.currentTimeMillis()));
+ IssueModel issue = IssueUtils.createIssue(repository, c1);
+ assertNotNull(issue.id);
+ assertTrue(issue.changes.get(0).hasComment());
+
+ assertTrue(IssueUtils.deleteComment(repository, issue, c1, "D1"));
+ issue = IssueUtils.getIssue(repository, issue.id);
+ assertEquals(1, issue.changes.size());
+ assertFalse(issue.changes.get(0).hasComment());
+
+ issue = IssueUtils.getIssue(repository, issue.id, false);
+ assertEquals(2, issue.changes.size());
+ assertTrue(issue.changes.get(0).hasComment());
+ assertFalse(issue.changes.get(1).hasComment());
+
+ assertTrue(IssueUtils.deleteIssue(repository, issue.id, "D"));
+
repository.close();
- assertTrue(list.size() > 0);
- assertEquals(1, list2.size());
}
private Change newChange(String summary) {
- Change change = new Change();
- change.setField(Field.Reporter, "james");
- change.setField(Field.Owner, "dave");
+ Change change = new Change("C1");
change.setField(Field.Summary, summary);
change.setField(Field.Description, "this is my description");
change.setField(Field.Priority, Priority.High);
change.setField(Field.Labels, "helpdesk");
change.comment("my comment");
-
- Attachment attachment = new Attachment("test.txt");
- attachment.content = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- change.addAttachment(attachment);
-
return change;
+ }
+
+ private Attachment newAttachment() {
+ Attachment attachment = new Attachment(Long.toHexString(System.currentTimeMillis())
+ + ".txt");
+ attachment.content = new byte[] { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
+ 0x4a };
+ return attachment;
}
private void compare(IssueModel issue, IssueModel constructed) {
assertEquals(issue.id, constructed.id);
assertEquals(issue.reporter, constructed.reporter);
assertEquals(issue.owner, constructed.owner);
- assertEquals(issue.created.getTime() / 1000, constructed.created.getTime() / 1000);
assertEquals(issue.summary, constructed.summary);
assertEquals(issue.description, constructed.description);
+ assertEquals(issue.created, constructed.created);
assertTrue(issue.hasLabel("helpdesk"));
}
--
Gitblit v1.9.1