8000 Merge pull request #131 from Vlatombe/manually_entered_repository_source · github-cloud/github-plugin@6b10f5a · GitHub
[go: up one dir, main page]

Skip to content

Commit 6b10f5a

Browse files
authored
Merge pull request jenkinsci#131 from Vlatombe/manually_entered_repository_source
Manually entered repository source
2 parents 1adbffc + 330cdbe commit 6b10f5a

File tree

5 files changed

+120
-0
lines changed

5 files changed

+120
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package org.jenkinsci.plugins.github.status.sources;
2+
3+
import com.cloudbees.jenkins.GitHubRepositoryName;
4+
import com.google.common.annotations.VisibleForTesting;
5+
import hudson.Extension;
6+
import hudson.model.Descriptor;
7+
import hudson.model.Run;
8+
import hudson.model.TaskListener;
9+
import org.jenkinsci.plugins.github.extension.status.GitHubReposSource;
10+
import org.jenkinsci.plugins.github.util.misc.NullSafeFunction;
11+
import org.kohsuke.github.GHRepository;
12+
import org.kohsuke.stapler.DataBoundConstructor;
13+
14+
import javax.annotation.Nonnull;
15+
import java.util.Collections;
16+
import java.util.List;
17+
18+
import static org.jenkinsci.plugins.github.util.FluentIterableWrapper.from;
19+
20+
public class ManuallyEnteredRepositorySource extends GitHubReposSource {
21+
private String url;
22+
23+
@DataBoundConstructor
24+
public ManuallyEnteredRepositorySource(String url) {
25+
this.url = url;
26+
}
27+
28+
public String getUrl() {
29+
return url;
30+
}
31+
32+
@VisibleForTesting
33+
GitHubRepositoryName createName(String url) {
34+
return GitHubRepositoryName.create(url);
35+
}
36+
37+
@Override
38+
public List<GHRepository> repos(@Nonnull Run<?, ?> run, @Nonnull final TaskListener listener) {
39+
List<String> urls = Collections.singletonList(url);
40+
return from(urls).transformAndConcat(new NullSafeFunction<String, Iterable<GHRepository>>() {
41+
@Override
42+
protected Iterable<GHRepository> applyNullSafe(@Nonnull String url) {
43+
GitHubRepositoryName name = createName(url);
44+
if (name != null) {
45+
return name.resolve();
46+
} else {
47+
listener.getLogger().printf("Unable to match %s with a GitHub repository.%n", url);
48+
return Collections.emptyList();
49+
}
50+
}
51+
}).toList();
52+
}
53+
54+
@Extension
55+
public static class ManuallyEnteredRepositorySourceDescriptor extends Descriptor<GitHubReposSource> {
56+
@Override
57+
public String getDisplayName() {
58+
return "Manually entered repository";
59+
}
60+
}
61+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.jenkinsci.plugins.github.status.sources.AnyDefinedRepositorySource
2+
3+
4+
def f = namespace(lib.FormTagLib);
5+
6+
f.entry(title: _('Repository URL'), field: 'url') {
7+
f.textbox()
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<div>
2+
A GitHub repository URL.
3+
</div>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<div>
2+
A manually entered repository URL.
3+
</div>
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.jenkinsci.plugins.github.status.sources;
2+
3+
import hudson.model.Run;
4+
import hudson.model.TaskListener;
5+
import org.junit.Test;
6+
import org.junit.runner.RunWith;
7+
import org.kohsuke.github.GHRepository;
8+
import org.mockito.Answers;
9+
import org.mockito.Matchers;
10+
import org.mockito.Mock;
11+
import org.mockito.Mockito;
12+
import org.mockito.runners.MockitoJUnitRunner;
13+
14+
import java.io.PrintStream;
15+
import java.util.List;
16+
17+
import static com.jayway.restassured.RestAssured.when;
18+
import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
19+
import static org.junit.Assert.assertThat;
20+
import static org.mockito.Matchers.eq;
21+
import static org.mockito.Mockito.doReturn;
22+
import static org.mockito.Mockito.verify;
23+
24+
@RunWith(MockitoJUnitRunner.class)
25+
public class ManuallyEnteredRepositorySourceTest {
26+
@Mock(answer = Answers.RETURNS_MOCKS)
27+
private Run run;
28+
29+
@Mock(answer = Answers.RETURNS_MOCKS)
30+
private TaskListener listener;
31+
32+
@Mock(answer = Answers.RETURNS_MOCKS)
33+
private PrintStream logger;
34+
35+
@Test
36+
public void nullName() {
37+
ManuallyEnteredRepositorySource instance = Mockito.spy(new ManuallyEnteredRepositorySource("https://github.com/jenkinsci/jenkins"));
38+
doReturn(null).when(instance).createName(Matchers.anyString());
39+
doReturn(logger).when(listener).getLogger();
40+
List<GHRepository> repos = instance.repos(run, listener);
41+
assertThat("size", repos, hasSize(0));
42+
verify(listener).getLogger();
43+
verify(logger).printf(eq("Unable to match %s with a GitHub repository.%n"), eq("https://github.com/jenkinsci/jenkins"));
44+
}
45+
}

0 commit comments

Comments
 (0)
0