package org.jenkinsci.plugins.ghprb; import com.coravy.hudson.plugins.github.GithubProjectProperty; import hudson.model.AbstractProject; import hudson.model.Job; import hudson.model.Run; import hudson.model.TaskListener; import hudson.plugins.git.GitSCM; import org.joda.time.DateTime; import org.kohsuke.github.*; import org.mockito.Mock; import org.mockito.Mockito; import java.util.Map; import static com.google.common.collect.Lists.newArrayList; import static org.mockito.BDDMockito.given; import static org.mockito.Matchers.*; /** * @author mdelapenya (Manuel de la Peña) */ public abstract class GhprbITBaseTestCase { @Mock protected GHCommitPointer commitPointer; @Mock protected GHPullRequest ghPullRequest; @Mock protected GhprbGitHub ghprbGitHub; @Mock protected GHRepository ghRepository; @Mock protected GHUser ghUser; @Mock protected Ghprb helper; @Mock protected GhprbPullRequest ghprbPullRequest; protected GhprbBuilds builds; protected GhprbTrigger trigger; // Stubs protected GHRateLimit ghRateLimit = new GHRateLimit(); protected void beforeTest(Map<String, Object> globalConfig, Map<String, Object> triggerConfig, AbstractProject<?, ?> project) throws Exception { project.addProperty(new GithubProjectProperty("https://github.com/user/dropwizard")); GhprbTestUtil.setupGhprbTriggerDescriptor(globalConfig); trigger = GhprbTestUtil.getTrigger(triggerConfig); GitHub gitHub = trigger.getGitHub(); given(gitHub.getRepository(anyString())).willReturn(ghRepository); given(ghPullRequest.getHead()).willReturn(commitPointer); given(ghPullRequest.getUser()).willReturn(ghUser); given(commitPointer.getRef()).willReturn("ref"); given(commitPointer.getSha()).willReturn("sha"); given(ghRepository.getName()).willReturn("dropwizard"); GhprbTestUtil.mockPR(ghPullRequest, commitPointer, new DateTime(), new DateTime().plusDays(1)); given(ghRepository.getPullRequests(eq(GHIssueState.OPEN))).willReturn(newArrayList(ghPullRequest)).willReturn(newArrayList(ghPullRequest)); given(ghRepository.getPullRequest(Mockito.anyInt())).willReturn(ghPullRequest); given(ghUser.getEmail()).willReturn("email@email.com"); given(ghUser.getLogin()).willReturn("user"); ghRateLimit.remaining = GhprbTestUtil.INITIAL_RATE_LIMIT; GhprbTestUtil.mockCommitList(ghPullRequest); GhprbRepository repo = Mockito.spy(new GhprbRepository("user/dropwizard", trigger)); Mockito.doReturn(ghRepository).when(repo).getGitHubRepo(); Mockito.doNothing().when(repo).addComment(Mockito.anyInt(), Mockito.anyString(), any(Run.class), any(TaskListener.class)); Mockito.doReturn(ghprbPullRequest).when(repo).getPullRequest(Mockito.anyInt()); Mockito.doReturn(repo).when(trigger).getRepository(); builds = new GhprbBuilds(trigger, repo); // Creating spy on ghprb, configuring repo given(helper.getGitHub()).willReturn(ghprbGitHub); given(helper.getTrigger()).willReturn(trigger); given(helper.isWhitelisted(ghUser)).willReturn(true); given(helper.getBuilds()).willReturn(builds); Mockito.doCallRealMethod().when(trigger).run(); // Configuring and adding Ghprb trigger project.addTrigger(trigger); // Configuring Git SCM GitSCM scm = GhprbTestUtil.provideGitSCM(); project.setScm(scm); trigger.start(project, true); trigger.setHelper(helper); } }