diff options
author | Kevin Sawicki | 2011-09-08 18:04:20 +0000 |
---|---|---|
committer | Kevin Sawicki | 2011-09-08 18:04:20 +0000 |
commit | 85c5496800bcfd3bda20f4b2727ad2af3d28cce1 (patch) | |
tree | f1948ec71b7fe18b1f7dafe7db2ee2af43a7f1c7 | |
parent | 8a7b634cd68da00df271b561ff6503d608d75c02 (diff) | |
download | egit-github-85c5496800bcfd3bda20f4b2727ad2af3d28cce1.tar.gz egit-github-85c5496800bcfd3bda20f4b2727ad2af3d28cce1.tar.xz egit-github-85c5496800bcfd3bda20f4b2727ad2af3d28cce1.zip |
Add service support for issue events API
Change-Id: I373f013d575da87c73a59d3d7deef406f85f4c4e
Signed-off-by: Kevin Sawicki <kevin@github.com>
7 files changed, 482 insertions, 12 deletions
diff --git a/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/AllHeadlessTests.java b/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/AllHeadlessTests.java index dd66df79..fe9b68f5 100644 --- a/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/AllHeadlessTests.java +++ b/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/AllHeadlessTests.java @@ -29,14 +29,14 @@ import org.junit.runners.Suite.SuiteClasses; EncodingUtilsTest.class, FieldErrorTest.class, GistChangeStatusTest.class, GistFileTest.class, GistRevisionTest.class, GistServiceTest.class, GistTest.class, GitHubClientTest.class, - IdTest.class, IssueServiceTest.class, IssueTest.class, KeyTest.class, - LabelComparatorTest.class, LabelServiceTest.class, LabelTest.class, - LanguageTest.class, MergeStatusTest.class, - MilestoneComparatorTest.class, MilestoneServiceTest.class, - MilestoneTest.class, OrganizationServiceTest.class, - PagedRequestTest.class, PullRequestMarkerTest.class, - PullRequestServiceTest.class, PullRequestTest.class, - ReferenceTest.class, RepositoryCommitTest.class, + IdTest.class, IssueEventTest.class, IssueServiceTest.class, + IssueTest.class, KeyTest.class, LabelComparatorTest.class, + LabelServiceTest.class, LabelTest.class, LanguageTest.class, + MergeStatusTest.class, MilestoneComparatorTest.class, + MilestoneServiceTest.class, MilestoneTest.class, + OrganizationServiceTest.class, PagedRequestTest.class, + PullRequestMarkerTest.class, PullRequestServiceTest.class, + PullRequestTest.class, ReferenceTest.class, RepositoryCommitTest.class, RepositoryIdTest.class, RepositoryTest.class, RequestErrorTest.class, SearchRepositoryTest.class, ShaResourceTest.class, TagTest.class, TeamServiceTest.class, TeamTest.class, TreeEntryTest.class, diff --git a/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/IssueEventTest.java b/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/IssueEventTest.java new file mode 100644 index 00000000..058cb63d --- /dev/null +++ b/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/IssueEventTest.java @@ -0,0 +1,73 @@ +/****************************************************************************** + * Copyright (c) 2011 GitHub Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Kevin Sawicki (GitHub Inc.) - initial API and implementation + *****************************************************************************/ +package org.eclipse.egit.github.core.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; + +import java.util.Date; + +import org.eclipse.egit.github.core.Issue; +import org.eclipse.egit.github.core.IssueEvent; +import org.eclipse.egit.github.core.User; +import org.junit.Test; + +/** + * Unit tests of {@link IssueEvent} + */ +public class IssueEventTest { + + /** + * Test default state of issue event + */ + @Test + public void defaultState() { + IssueEvent event = new IssueEvent(); + assertNull(event.getActor()); + assertNull(event.getCommitId()); + assertNull(event.getCreatedAt()); + assertNull(event.getEvent()); + assertEquals(0, event.getId()); + assertNull(event.getUrl()); + assertNull(event.getIssue()); + } + + /** + * Test updating issue event fields + */ + @Test + public void updateFields() { + IssueEvent event = new IssueEvent(); + User actor = new User().setName("Act Tor"); + assertEquals(actor, event.setActor(actor).getActor()); + assertEquals("a12b", event.setCommitId("a12b").getCommitId()); + assertEquals(new Date(60000), event.setCreatedAt(new Date(60000)) + .getCreatedAt()); + assertEquals(4356, event.setId(4356).getId()); + assertEquals("commit", event.setEvent("commit").getEvent()); + assertEquals("url://a", event.setUrl("url://a").getUrl()); + Issue issue = new Issue().setNumber(30); + assertEquals(issue, event.setIssue(issue).getIssue()); + } + + /** + * Test non-mutable created at date + */ + @Test + public void nonMutableCreatedAt() { + IssueEvent event = new IssueEvent(); + Date date = new Date(1000); + event.setCreatedAt(date); + date.setTime(0); + assertFalse(date.equals(event.getCreatedAt())); + } +} diff --git a/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/IssueServiceTest.java b/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/IssueServiceTest.java index 36ec4284..e1ef9063 100644 --- a/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/IssueServiceTest.java +++ b/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/IssueServiceTest.java @@ -24,6 +24,7 @@ import java.util.Map; import org.eclipse.egit.github.core.Comment; import org.eclipse.egit.github.core.Issue; +import org.eclipse.egit.github.core.IssueEvent; import org.eclipse.egit.github.core.client.GitHubClient; import org.eclipse.egit.github.core.client.GitHubRequest; import org.eclipse.egit.github.core.client.GitHubResponse; @@ -585,4 +586,46 @@ public class IssueServiceTest { assertNotNull(issues); assertTrue(issues.isEmpty()); } + + /** + * Page all issue events for repository + * + * @throws IOException + */ + @Test + public void pageEvents() throws IOException { + PageIterator<IssueEvent> iter = issueService.pageEvents("user", "repo"); + assertNotNull(iter); + assertTrue(iter.hasNext()); + assertEquals(Utils.page("/repos/user/repo/issues/events"), iter + .getRequest().generateUri()); + } + + /** + * Page issue events for repository + * + * @throws IOException + */ + @Test + public void pageIssueEvents() throws IOException { + PageIterator<IssueEvent> iter = issueService.pageIssueEvents("user", + "repo", 16); + assertNotNull(iter); + assertTrue(iter.hasNext()); + assertEquals(Utils.page("/repos/user/repo/issues/16/events"), iter + .getRequest().generateUri()); + } + + /** + * Get issue event + * + * @throws IOException + */ + @Test + public void getIssueEvent() throws IOException { + issueService.getIssueEvent("user", "repo", 4399); + GitHubRequest request = new GitHubRequest(); + request.setUri("/repos/user/repo/issues/events/4399"); + verify(gitHubClient).get(request); + } } diff --git a/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/live/IssueTest.java b/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/live/IssueTest.java index 05de354c..9d6fd115 100644 --- a/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/live/IssueTest.java +++ b/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/live/IssueTest.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Map; import org.eclipse.egit.github.core.Issue; +import org.eclipse.egit.github.core.IssueEvent; import org.eclipse.egit.github.core.client.PageIterator; import org.eclipse.egit.github.core.service.IssueService; import org.junit.Test; @@ -34,7 +35,7 @@ public class IssueTest extends LiveTest { /** * Test fetching an issue - * + * * @throws IOException */ @Test @@ -53,8 +54,73 @@ public class IssueTest extends LiveTest { } /** + * Test issue events + * + * @throws IOException + */ + @Test + public void getIssueEvents() throws IOException { + IssueService service = new IssueService(client); + PageIterator<IssueEvent> iter = service.pageIssueEvents("schacon", + "showoff", 1); + assertNotNull(iter); + assertTrue(iter.hasNext()); + for (Collection<IssueEvent> page : iter) { + assertNotNull(page); + assertFalse(page.isEmpty()); + for (IssueEvent event : page) { + assertNotNull(event); + assertTrue(event.getId() > 0); + assertNotNull(event.getActor()); + if (event.getIssue() != null) + assertTrue(event.getIssue().getNumber() > 0); + assertNotNull(event.getCreatedAt()); + assertNotNull(event.getEvent()); + assertNotNull(event.getUrl()); + IssueEvent fetched = service.getIssueEvent("schacon", + "showoff", event.getId()); + assertNotNull(fetched); + assertEquals(event.getId(), fetched.getId()); + assertNotNull(fetched.getActor()); + assertEquals(event.getActor().getLogin(), fetched.getActor() + .getLogin()); + if (event.getCommitId() != null) + assertEquals(event.getCommitId(), fetched.getCommitId()); + assertEquals(event.getCreatedAt(), fetched.getCreatedAt()); + assertEquals(event.getEvent(), fetched.getEvent()); + assertEquals(event.getUrl(), fetched.getUrl()); + } + } + } + + /** + * Get single page of repository issue events + * + * @throws IOException + */ + @Test + public void pageAllIssueEvents() throws IOException { + IssueService service = new IssueService(client); + PageIterator<IssueEvent> iter = service.pageEvents("schacon", + "showoff", 10); + assertNotNull(iter); + assertTrue(iter.hasNext()); + Collection<IssueEvent> firstPage = iter.next(); + assertNotNull(firstPage); + assertFalse(firstPage.isEmpty()); + for (IssueEvent event : firstPage) { + assertNotNull(event); + assertTrue(event.getId() > 0); + assertNotNull(event.getActor()); + assertNotNull(event.getCreatedAt()); + assertNotNull(event.getEvent()); + assertNotNull(event.getUrl()); + } + } + + /** * Test fetching multiple issues - * + * * @throws IOException */ @Test @@ -70,7 +136,7 @@ public class IssueTest extends LiveTest { /** * Test paging of requests - * + * * @throws Exception */ @Test @@ -106,7 +172,7 @@ public class IssueTest extends LiveTest { /** * Testing page current user's issues - * + * * @throws Exception */ @Test diff --git a/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/IssueEvent.java b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/IssueEvent.java new file mode 100644 index 00000000..8197b534 --- /dev/null +++ b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/IssueEvent.java @@ -0,0 +1,151 @@ +/****************************************************************************** + * Copyright (c) 2011 GitHub Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Kevin Sawicki (GitHub Inc.) - initial API and implementation + *****************************************************************************/ +package org.eclipse.egit.github.core; + +import java.io.Serializable; +import java.util.Date; + +import org.eclipse.egit.github.core.util.DateUtils; + +/** + * Issue event model class + */ +public class IssueEvent implements Serializable { + + /** serialVersionUID */ + private static final long serialVersionUID = -842754108817725707L; + + private Date createdAt; + + private Issue issue; + + private long id; + + private String commitId; + + private String event; + + private String url; + + private User actor; + + /** + * @return createdAt + */ + public Date getCreatedAt() { + return DateUtils.clone(createdAt); + } + + /** + * @param createdAt + * @return this issue event + */ + public IssueEvent setCreatedAt(Date createdAt) { + this.createdAt = DateUtils.clone(createdAt); + return this; + } + + /** + * @return issue + */ + public Issue getIssue() { + return issue; + } + + /** + * @param issue + * @return this issue event + */ + public IssueEvent setIssue(Issue issue) { + this.issue = issue; + return this; + } + + /** + * @return id + */ + public long getId() { + return id; + } + + /** + * @param id + * @return this issue event + */ + public IssueEvent setId(long id) { + this.id = id; + return this; + } + + /** + * @return commitId + */ + public String getCommitId() { + return commitId; + } + + /** + * @param commitId + * @return this issue event + */ + public IssueEvent setCommitId(String commitId) { + this.commitId = commitId; + return this; + } + + /** + * @return event + */ + public String getEvent() { + return event; + } + + /** + * @param event + * @return this issue event + */ + public IssueEvent setEvent(String event) { + this.event = event; + return this; + } + + /** + * @return url + */ + public String getUrl() { + return url; + } + + /** + * @param url + * @return this issue event + */ + public IssueEvent setUrl(String url) { + this.url = url; + return this; + } + + /** + * @return actor + */ + public User getActor() { + return actor; + } + + /** + * @param actor + * @return this issue event + */ + public IssueEvent setActor(User actor) { + this.actor = actor; + return this; + } +} diff --git a/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/client/IGitHubConstants.java b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/client/IGitHubConstants.java index 9054b0f0..10d86061 100644 --- a/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/client/IGitHubConstants.java +++ b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/client/IGitHubConstants.java @@ -83,6 +83,8 @@ public interface IGitHubConstants { /** */ String SEGMENT_EMAILS = "/emails"; //$NON-NLS-1$ /** */ + String SEGMENT_EVENTS = "/events"; //$NON-NLS-1$ + /** */ String SEGMENT_FILES = "/files"; //$NON-NLS-1$ /** */ String SEGMENT_FOLLOWERS = "/followers"; //$NON-NLS-1$ diff --git a/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/IssueService.java b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/IssueService.java index 89c50249..0e125885 100644 --- a/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/IssueService.java +++ b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/IssueService.java @@ -11,6 +11,7 @@ package org.eclipse.egit.github.core.service; import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_COMMENTS; +import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_EVENTS; import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_ISSUES; import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_REPOS; import static org.eclipse.egit.github.core.client.PagedRequest.PAGE_FIRST; @@ -26,6 +27,7 @@ import java.util.Map; import org.eclipse.egit.github.core.Comment; import org.eclipse.egit.github.core.Issue; +import org.eclipse.egit.github.core.IssueEvent; import org.eclipse.egit.github.core.Label; import org.eclipse.egit.github.core.Milestone; import org.eclipse.egit.github.core.User; @@ -550,4 +552,137 @@ public class IssueService extends GitHubService { uri.append('/').append(comment); client.delete(uri.toString()); } + + /** + * Page issue events for repository + * + * @param user + * @param repository + * @return iterator over issue event pages + * @throws IOException + */ + public PageIterator<IssueEvent> pageEvents(String user, String repository) + throws IOException { + return pageEvents(user, repository, PAGE_SIZE); + } + + /** + * Page issue events for repository + * + * @param user + * @param repository + * @param size + * @return iterator over issue event pages + * @throws IOException + */ + public PageIterator<IssueEvent> pageEvents(String user, String repository, + int size) throws IOException { + return pageEvents(user, repository, PAGE_FIRST, size); + } + + /** + * Page events for issue in repository + * + * @param user + * @param repository + * @param start + * @param size + * @return iterator over issue event pages + * @throws IOException + */ + public PageIterator<IssueEvent> pageEvents(String user, String repository, + int start, int size) throws IOException { + verifyRepository(user, repository); + + PagedRequest<IssueEvent> request = createPagedRequest(start, size); + StringBuilder uri = new StringBuilder(SEGMENT_REPOS); + uri.append('/').append(user).append('/').append(repository); + uri.append(SEGMENT_ISSUES); + uri.append(SEGMENT_EVENTS); + request.setUri(uri); + request.setType(new TypeToken<List<IssueEvent>>() { + }.getType()); + return createPageIterator(request); + } + + /** + * Page events for issue in repository + * + * @param user + * @param repository + * @param issueId + * @return iterator over issue event pages + * @throws IOException + */ + public PageIterator<IssueEvent> pageIssueEvents(String user, + String repository, int issueId) throws IOException { + return pageIssueEvents(user, repository, issueId, PAGE_SIZE); + } + + /** + * Page events for issue in repository + * + * @param user + * @param repository + * @param issueId + * @param size + * @return iterator over issue event pages + * @throws IOException + */ + public PageIterator<IssueEvent> pageIssueEvents(String user, + String repository, int issueId, int size) throws IOException { + return pageIssueEvents(user, repository, issueId, PAGE_FIRST, size); + } + + /** + * Page issue events for repository + * + * @param user + * @param repository + * @param issueId + * @param start + * @param size + * @return iterator over issue event pages + * @throws IOException + */ + public PageIterator<IssueEvent> pageIssueEvents(String user, + String repository, int issueId, int start, int size) + throws IOException { + verifyRepository(user, repository); + + PagedRequest<IssueEvent> request = createPagedRequest(start, size); + StringBuilder uri = new StringBuilder(SEGMENT_REPOS); + uri.append('/').append(user).append('/').append(repository); + uri.append(SEGMENT_ISSUES); + uri.append('/').append(issueId); + uri.append(SEGMENT_EVENTS); + request.setUri(uri); + request.setType(new TypeToken<List<IssueEvent>>() { + }.getType()); + return createPageIterator(request); + } + + /** + * Get issue event for repository + * + * @param user + * @param repository + * @param eventId + * @return iterator over issue event pages + * @throws IOException + */ + public IssueEvent getIssueEvent(String user, String repository, long eventId) + throws IOException { + verifyRepository(user, repository); + + GitHubRequest request = createRequest(); + StringBuilder uri = new StringBuilder(SEGMENT_REPOS); + uri.append('/').append(user).append('/').append(repository); + uri.append(SEGMENT_ISSUES); + uri.append(SEGMENT_EVENTS); + uri.append('/').append(eventId); + request.setUri(uri); + request.setType(IssueEvent.class); + return (IssueEvent) client.get(request).getBody(); + } } |