package org.jenkinsci.plugins.ghprb;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kohsuke.github.GHCommitPointer;
import org.kohsuke.github.GHPullRequest;
import org.kohsuke.github.GHRepository;
import org.kohsuke.github.GHUser;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import java.io.IOException;
import java.util.Date;
import static org.fest.assertions.Assertions.assertThat;
import static org.mockito.BDDMockito.given;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
/**
* Unit test for {@link org.jenkinsci.plugins.ghprb.GhprbPullRequest}.
*/
@RunWith(MockitoJUnitRunner.class)
public class GhprbPullRequestTest {
@Mock
private GHPullRequest pr;
@Mock
private Ghprb helper;
@Mock
private GhprbRepository repo;
@Mock
private GHCommitPointer head, base;
@Mock
private GhprbRepository ghprbRepository;
@Mock
private GHUser ghUser;
@Mock
private GhprbBuilds builds;
@Before
public void setup() throws IOException {
given(head.getSha()).willReturn("some sha");
given(base.getRef()).willReturn("some ref");
// Mocks for GHPullRequest
given(pr.getNumber()).willReturn(10);
given(pr.getCreatedAt()).willReturn(new Date());
given(pr.getUpdatedAt()).willReturn(new Date());
given(pr.getTitle()).willReturn("title");
given(pr.getHead()).willReturn(head);
given(pr.getBase()).willReturn(base);
given(ghUser.getEmail()).willReturn("email");
given(ghprbRepository.getActualPullRequest(10)).willReturn(pr);
given(ghprbRepository.getName()).willReturn("name");
given(pr.getHead()).willReturn(head);
given(pr.getUser()).willReturn(ghUser);
// Mocks for Ghprb
given(helper.isWhitelisted(ghUser)).willReturn(true);
given(helper.getBuilds()).willReturn(builds);
doNothing().when(builds).build(any(GhprbPullRequest.class), any(GHUser.class), anyString());
// Mocks for GhprbRepository
given(repo.getName()).willReturn("repoName");
// Mocks for GhprbRepository
doNothing().when(repo).addComment(Mockito.anyInt(), anyString());
}
@Test
public void testConstructorWhenAuthorIsWhitelisted() throws IOException {
// WHEN
GhprbPullRequest ghprbPullRequest = new GhprbPullRequest(pr, helper, repo);
// THEN
assertThat(ghprbPullRequest.getId()).isEqualTo(10);
assertThat(ghprbPullRequest.getAuthorEmail()).isEqualTo("email");
assertThat(ghprbPullRequest.getHead()).isEqualTo("some sha");
assertThat(ghprbPullRequest.getTitle()).isEqualTo("title");
assertThat(ghprbPullRequest.getTarget()).isEqualTo("some ref");
assertThat(ghprbPullRequest.isMergeable()).isFalse();
}
@Test
public void testInitRepoNameNull() throws IOException {
given(repo.getName()).willReturn(null);
GhprbPullRequest ghprbPullRequest = new GhprbPullRequest(pr, helper, repo);
// WHEN
ghprbPullRequest.init(helper, ghprbRepository);
// THEN
verify(pr, times(1)).getHead();
verify(pr, times(1)).getBase();
verify(pr, times(1)).getNumber();
verify(pr, times(1)).getCreatedAt();
verify(pr, times(2)).getUser();
Mockito.verifyNoMoreInteractions(pr);
}
@Test
public void testInitRepoNameNotNull() throws IOException {
// Mocks for GhprbRepository
given(repo.getName()).willReturn("name");
doNothing().when(repo).addComment(eq(10), anyString());
GhprbPullRequest ghprbPullRequest = new GhprbPullRequest(pr, helper, repo);
// WHEN
ghprbPullRequest.init(helper, ghprbRepository);
// THEN
verify(ghprbRepository, never()).getName();
Mockito.verifyNoMoreInteractions(ghprbRepository);
}
@Test
public void authorRepoGitUrlShouldBeNullWhenNoRepository() throws Exception {
// GIVEN
GhprbPullRequest ghprbPullRequest = new GhprbPullRequest(pr, helper, repo);
// WHEN
ghprbPullRequest.init(helper, ghprbRepository);
// THEN
assertThat(ghprbPullRequest.getAuthorRepoGitUrl()).isEqualTo("");
}
@Test
public void authorRepoGitUrlShouldBeSetWhenRepository() throws Exception {
// GIVEN
String expectedAuthorRepoGitUrl = "https://github.com/jenkinsci/ghprb-plugin";
GHRepository repository = mock(GHRepository.class);
given(repository.gitHttpTransportUrl()).willReturn(expectedAuthorRepoGitUrl);
given(head.getRepository()).willReturn(repository);
GhprbPullRequest ghprbPullRequest = new GhprbPullRequest(pr, helper, repo);
// THEN
assertThat(ghprbPullRequest.getAuthorRepoGitUrl()).isEqualTo(expectedAuthorRepoGitUrl);
}
}