You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2015/03/19 08:02:43 UTC
[2/5] camel git commit: CAMEL-8497 Add support for setting a commit
status,
getting list of files associated with PR and retrieving a specific file
content.
http://git-wip-us.apache.org/repos/asf/camel/blob/1cb3c092/components/camel-github/src/test/java/org/apache/camel/component/github/producer/PullRequestStateProducerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-github/src/test/java/org/apache/camel/component/github/producer/PullRequestStateProducerTest.java b/components/camel-github/src/test/java/org/apache/camel/component/github/producer/PullRequestStateProducerTest.java
new file mode 100644
index 0000000..1aabe95
--- /dev/null
+++ b/components/camel-github/src/test/java/org/apache/camel/component/github/producer/PullRequestStateProducerTest.java
@@ -0,0 +1,94 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.github.producer;
+
+import java.util.Date;
+import java.util.Map;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.github.GitHubComponent;
+import org.apache.camel.component.github.GitHubComponentTestBase;
+import org.eclipse.egit.github.core.CommitStatus;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PullRequestStateProducerTest extends GitHubComponentTestBase {
+ protected static final Logger LOG = LoggerFactory.getLogger(PullRequestStateProducerTest.class);
+ private String commitsha;
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+
+ @Override
+ public void configure() throws Exception {
+ context.addComponent("github", new GitHubComponent());
+ from("direct:validPullRequest")
+ .process(new MockPullRequestStateProducerProcessor())
+ .to("github://pullRequestState?state=success&" + GITHUB_CREDENTIALS_STRING);
+ } // end of configure
+
+
+ };
+ }
+
+
+ @Test
+ public void testPullRequestStateProducer() throws Exception {
+ commitsha = commitService.getNextSha();
+
+ Endpoint stateProducerEndpoint = getMandatoryEndpoint("direct:validPullRequest");
+ Exchange exchange = stateProducerEndpoint.createExchange();
+ String text = "Message sent at " + new Date();
+ exchange.getIn().setBody(text);
+ Exchange response=template.send(stateProducerEndpoint, exchange);
+
+ assertNotNull(response.getOut().getBody());
+
+ if (!(response.getOut().getBody() instanceof CommitStatus)) {
+ fail("Expecting CommitStatus");
+ }
+
+ CommitStatus status=response.getOut().getBody(CommitStatus.class);
+
+ // Check status set on commit service
+ if (commitService.getCommitStatus(commitsha) != status) {
+ fail("Commit status sent to service is different from response");
+ }
+
+ assertEquals(status.getState(), "success");
+
+ assertEquals(status.getDescription(), text);
+ }
+
+
+ public class MockPullRequestStateProducerProcessor implements Processor {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ Message in = exchange.getIn();
+ Map<String, Object> headers = in.getHeaders();
+ headers.put("GitHubPullRequestHeadCommitSHA", commitsha);
+ }
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/1cb3c092/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockCommitService.java
----------------------------------------------------------------------
diff --git a/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockCommitService.java b/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockCommitService.java
new file mode 100644
index 0000000..4759170
--- /dev/null
+++ b/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockCommitService.java
@@ -0,0 +1,77 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.github.services;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.eclipse.egit.github.core.CommitStatus;
+import org.eclipse.egit.github.core.IRepositoryIdProvider;
+import org.eclipse.egit.github.core.RepositoryCommit;
+import org.eclipse.egit.github.core.User;
+import org.eclipse.egit.github.core.service.CommitService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MockCommitService extends CommitService {
+ protected static final Logger LOG = LoggerFactory.getLogger(MockCommitService.class);
+
+ private List<RepositoryCommit> commitsList = new ArrayList<RepositoryCommit>();
+ private AtomicLong fakeSha = new AtomicLong(System.currentTimeMillis());
+ private Map<String,CommitStatus> commitStatus = new HashMap<String,CommitStatus>();
+
+ public synchronized RepositoryCommit addRepositoryCommit() {
+ User author = new User();
+ author.setEmail("someguy@gmail.com"); // TODO change
+ author.setHtmlUrl("http://github/someguy");
+ author.setLogin("someguy");
+
+ RepositoryCommit rc = new RepositoryCommit();
+ rc.setAuthor(author);
+ rc.setSha(fakeSha.incrementAndGet() + "");
+ LOG.debug("In MockCommitService added commit with sha " + rc.getSha());
+ commitsList.add(rc);
+
+ return rc;
+ }
+
+ @Override
+ public synchronized List<RepositoryCommit> getCommits(IRepositoryIdProvider repository, String sha, String path) throws IOException {
+ LOG.debug("Returning list of size " + commitsList.size());
+ return commitsList;
+ }
+
+ @Override
+ public CommitStatus createStatus(IRepositoryIdProvider repository,
+ String sha, CommitStatus status) throws IOException {
+ commitStatus.put(sha, status);
+
+ return status;
+ }
+
+ public String getNextSha() {
+ return (fakeSha.incrementAndGet()+"");
+ }
+
+ public CommitStatus getCommitStatus(String sha) {
+ return commitStatus.get(sha);
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/1cb3c092/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockIssueService.java
----------------------------------------------------------------------
diff --git a/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockIssueService.java b/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockIssueService.java
new file mode 100644
index 0000000..dd7b376
--- /dev/null
+++ b/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockIssueService.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.github.services;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.egit.github.core.Comment;
+import org.eclipse.egit.github.core.IRepositoryIdProvider;
+import org.eclipse.egit.github.core.service.IssueService;
+
+public class MockIssueService extends IssueService {
+
+ private List<Comment> comments = new ArrayList<Comment>();
+ private MockPullRequestService mockPullRequestService;
+
+ public MockIssueService(MockPullRequestService mockPullRequestService) {
+ this.mockPullRequestService = mockPullRequestService;
+
+ }
+
+ @Override
+ public List<Comment> getComments(IRepositoryIdProvider repository, int issueNumber) {
+ return comments;
+ }
+
+ @Override
+ public Comment createComment(IRepositoryIdProvider repository, int issueNumber, String commentText) throws IOException {
+ Comment addedComment = mockPullRequestService.addComment((long) issueNumber, commentText);
+ return addedComment;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/1cb3c092/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockPullRequestService.java
----------------------------------------------------------------------
diff --git a/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockPullRequestService.java b/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockPullRequestService.java
new file mode 100755
index 0000000..2619c8b
--- /dev/null
+++ b/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockPullRequestService.java
@@ -0,0 +1,138 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.github.services;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.eclipse.egit.github.core.CommitComment;
+import org.eclipse.egit.github.core.CommitFile;
+import org.eclipse.egit.github.core.IRepositoryIdProvider;
+import org.eclipse.egit.github.core.PullRequest;
+import org.eclipse.egit.github.core.User;
+import org.eclipse.egit.github.core.service.PullRequestService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MockPullRequestService extends PullRequestService {
+ protected static final Logger LOG = LoggerFactory.getLogger(MockPullRequestService.class);
+
+ private Map<Long, PullRequest> pullRequests = new HashMap<Long, PullRequest>();
+ private List<CommitComment> emptyComments = new ArrayList<CommitComment>();
+ private AtomicInteger pullRequestNumber = new AtomicInteger(101);
+ private AtomicInteger commentId = new AtomicInteger(500);
+ private Map<Long, List<CommitComment>> allComments = new HashMap<Long, List<CommitComment>>();
+ private Map<Integer,List<CommitFile>> files = new HashMap<Integer,List<CommitFile>>();
+
+ public List<CommitComment> getComments(IRepositoryIdProvider repository, int pullRequestId) {
+ Long id = new Long(pullRequestId);
+ if (allComments.containsKey(id)) {
+ List<CommitComment> comments = allComments.get(id);
+ return comments;
+ } else {
+ return emptyComments;
+ }
+ }
+
+ private User createAuthor() {
+ User author = new User();
+ author.setEmail("someguy@gmail.com");
+ author.setHtmlUrl("http://github/someguy");
+ author.setLogin("someguy");
+
+ return author;
+ }
+
+ public CommitComment addComment(Long pullRequestId, String bodyText) {
+ CommitComment commitComment = new CommitComment();
+
+ User author = createAuthor();
+ commitComment.setUser(author);
+ commitComment.setCommitId("" + pullRequestId);
+ commitComment.setId(commentId.getAndIncrement());
+ commitComment.setBody(bodyText);
+ commitComment.setBodyText(bodyText);
+
+ List<CommitComment> comments;
+ if (allComments.containsKey(pullRequestId)) {
+ comments = allComments.get(pullRequestId);
+ } else {
+ comments = new ArrayList<CommitComment>();
+ }
+ comments.add(commitComment);
+ allComments.put(pullRequestId, comments);
+
+ return commitComment;
+ }
+
+ public PullRequest addPullRequest(String title) {
+ User author = createAuthor();
+
+ PullRequest pullRequest = new PullRequest();
+ pullRequest.setUser(author);
+ pullRequest.setHtmlUrl("https://github.com/someguy/somerepo/pull" + pullRequestNumber);
+ pullRequest.setTitle(title);
+ pullRequest.setNumber(pullRequestNumber.get());
+ pullRequest.setId(pullRequestNumber.get());
+ pullRequest.setState("open");
+ pullRequests.put(pullRequest.getId(), pullRequest);
+
+ pullRequestNumber.incrementAndGet();
+ return pullRequest;
+ }
+
+ @Override
+ public PullRequest getPullRequest(IRepositoryIdProvider repository, int id) throws IOException {
+ PullRequest pullRequest = pullRequests.get((long) id);
+ return pullRequest;
+ }
+
+ @Override
+ public PullRequest editPullRequest(IRepositoryIdProvider repository, PullRequest request) throws IOException {
+ pullRequests.put(request.getId(), request);
+ return request;
+ }
+
+ @Override
+ public synchronized List<PullRequest> getPullRequests(IRepositoryIdProvider repository, String state) {
+ List<PullRequest> result = new ArrayList<PullRequest>();
+
+ for (Long id : pullRequests.keySet()) {
+ PullRequest pr = pullRequests.get(id);
+ if (pr.getState().equals(state)) {
+ result.add(pr);
+ }
+ }
+
+ LOG.debug("Returning list of " + result.size() + " pull requests with state " + state);
+ return result;
+ }
+
+ public void setFiles(int id, List<CommitFile> commitFiles) {
+ files.put(id, commitFiles);
+ }
+
+ @Override
+ public List<CommitFile> getFiles(IRepositoryIdProvider repository, int id)
+ throws IOException {
+ return (files.get(id));
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/1cb3c092/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockRepositoryService.java
----------------------------------------------------------------------
diff --git a/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockRepositoryService.java b/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockRepositoryService.java
new file mode 100644
index 0000000..9c93273
--- /dev/null
+++ b/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockRepositoryService.java
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.github.services;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.egit.github.core.IRepositoryIdProvider;
+import org.eclipse.egit.github.core.Repository;
+import org.eclipse.egit.github.core.RepositoryTag;
+import org.eclipse.egit.github.core.service.RepositoryService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MockRepositoryService extends RepositoryService {
+ protected static final Logger LOG = LoggerFactory.getLogger(MockRepositoryService.class);
+
+ private List<RepositoryTag> tags = new ArrayList<RepositoryTag>();
+
+ public RepositoryTag addTag(String tagName) {
+ RepositoryTag tag = new RepositoryTag();
+ tag.setName(tagName);
+ tags.add(tag);
+
+ return tag;
+ }
+
+ @Override
+ public Repository getRepository(final String owner, final String name) throws IOException {
+ Repository repository = new Repository();
+ repository.setName(name);
+ return repository;
+ }
+
+ @Override
+ public List<RepositoryTag> getTags(IRepositoryIdProvider repository) throws IOException {
+ LOG.debug("in MockRepositoryService returning " + tags.size() + " tags");
+ return tags;
+ }
+}