/*******************************************************************************
* 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.live;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
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.RepositoryIssue;
import org.eclipse.egit.github.core.client.PageIterator;
import org.eclipse.egit.github.core.service.IssueService;
import org.junit.Test;
/**
* Unit tests of {@link IssueService}
*/
public class IssueTest extends LiveTest {
/**
* Test fetching an issue
*
* @throws IOException
*/
@Test
public void fetchIssue() throws IOException {
IssueService service = new IssueService(client);
Issue issue = service.getIssue("schacon", "showoff", "1");
assertNotNull(issue);
assertNotNull(issue.getUpdatedAt());
assertNotNull(issue.getCreatedAt());
assertTrue(issue.getNumber() > 0);
assertNotNull(issue.getBody());
assertNotNull(issue.getTitle());
assertNotNull(issue.getHtmlUrl());
assertTrue(issue.getNumber() >= 0);
assertNotNull(issue.getUser());
}
/**
* 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
public void fetchAllIssues() throws IOException {
IssueService service = new IssueService(client);
List<Issue> issues = service.getIssues("schacon", "showoff",
Collections.singletonMap(IssueService.FILTER_STATE,
IssueService.STATE_OPEN));
assertFalse(issues.isEmpty());
for (Issue issue : issues)
assertNotNull(issue);
}
/**
* Test paging of requests
*
* @throws Exception
*/
@Test
public void testPaging() throws Exception {
IssueService service = new IssueService(client);
Map<String, String> params = new HashMap<String, String>();
params.put(IssueService.FILTER_STATE, IssueService.STATE_CLOSED);
PageIterator<Issue> iterator = service.pageIssues("schacon", "showoff",
params, 1);
assertNotNull(iterator);
assertTrue(iterator.hasNext());
Collection<Issue> page = iterator.next();
int pages = iterator.getLastPage();
int read = 1;
assertNotNull(page);
assertEquals(1, page.size());
assertNotNull(iterator.getRequest());
assertNotNull(iterator.getNextUri());
assertTrue(iterator.getNextPage() > 1);
assertNotNull(iterator.getLastUri());
assertTrue(iterator.getLastPage() > iterator.getNextPage());
assertTrue(iterator.hasNext());
Collection<Issue> page2 = iterator.next();
read++;
assertNotNull(page2);
assertFalse(page.equals(page2));
while (iterator.hasNext()) {
iterator.next();
read++;
}
assertEquals(pages, read);
}
/**
* Testing page current user's issues
*
* @throws Exception
*/
@Test
public void pageCurrentUsersIssues() throws Exception {
checkUser();
IssueService service = new IssueService(client);
Collection<RepositoryIssue> issues = service.pageIssues(null, 1).next();
assertNotNull(issues);
assertEquals(1, issues.size());
assertNotNull(issues.toArray()[0]);
}
}