From 9acc523a0a7207566e3a151a959e9836b904f2a3 Mon Sep 17 00:00:00 2001 From: Piotr Jagielski Date: Tue, 22 Mar 2016 16:42:32 +0100 Subject: [PATCH] api key optional --- .../sputnik/connector/saas/SaasConnector.java | 17 +++++---- .../connector/saas/SaasFacadeBuilder.java | 18 +++++----- .../pl/touk/sputnik/HttpConnectorEnv.java | 11 ++++-- .../connector/saas/SaasFacadeTest.java | 36 ++++++++++++++++++- 4 files changed, 63 insertions(+), 19 deletions(-) diff --git a/src/main/java/pl/touk/sputnik/connector/saas/SaasConnector.java b/src/main/java/pl/touk/sputnik/connector/saas/SaasConnector.java index 79f82691..cb2584f5 100644 --- a/src/main/java/pl/touk/sputnik/connector/saas/SaasConnector.java +++ b/src/main/java/pl/touk/sputnik/connector/saas/SaasConnector.java @@ -17,7 +17,6 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; -import java.util.List; @AllArgsConstructor @Slf4j @@ -27,14 +26,14 @@ public class SaasConnector implements Connector { private GithubPatchset githubPatchset; private String apiKey; + public SaasConnector(HttpConnector httpConnector, GithubPatchset githubPatchset) { + this(httpConnector, githubPatchset, null); + } + private static final String API_KEY_PARAM = "key"; private static final String FILES_URL_FORMAT = "/api/github/%s/pulls/%d/files"; private static final String VIOLATIONS_URL_FORMAT = "/api/github/%s/pulls/%d/violations"; - public List getReviewFiles() { - return null; - } - @NotNull @Override public String listFiles() throws URISyntaxException, IOException { @@ -60,7 +59,11 @@ private String createUrl(GithubPatchset patchset, String formatUrl) { } @NotNull - private NameValuePair apiKeyParam() { - return new BasicNameValuePair(API_KEY_PARAM, apiKey); + private NameValuePair[] apiKeyParam() { + if (apiKey != null) { + return new BasicNameValuePair[]{new BasicNameValuePair(API_KEY_PARAM, apiKey)}; + } else { + return new BasicNameValuePair[]{}; + } } } diff --git a/src/main/java/pl/touk/sputnik/connector/saas/SaasFacadeBuilder.java b/src/main/java/pl/touk/sputnik/connector/saas/SaasFacadeBuilder.java index 4a06bbf1..03169cb6 100644 --- a/src/main/java/pl/touk/sputnik/connector/saas/SaasFacadeBuilder.java +++ b/src/main/java/pl/touk/sputnik/connector/saas/SaasFacadeBuilder.java @@ -1,6 +1,7 @@ package pl.touk.sputnik.connector.saas; import com.google.gson.Gson; +import org.apache.commons.lang.StringUtils; import org.apache.http.HttpHost; import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.impl.auth.BasicScheme; @@ -9,12 +10,11 @@ import pl.touk.sputnik.configuration.CliOption; import pl.touk.sputnik.configuration.Configuration; import pl.touk.sputnik.connector.ConnectorDetails; +import pl.touk.sputnik.connector.github.GithubPatchset; import pl.touk.sputnik.connector.github.GithubPatchsetBuilder; import pl.touk.sputnik.connector.http.HttpConnector; import pl.touk.sputnik.connector.http.HttpHelper; -import static org.apache.commons.lang3.Validate.notBlank; - public class SaasFacadeBuilder { private HttpHelper httpHelper = new HttpHelper(); @@ -22,17 +22,19 @@ public class SaasFacadeBuilder { @NotNull public SaasFacade build(Configuration configuration) { ConnectorDetails connectorDetails = new ConnectorDetails(configuration); - String apiKey = configuration.getProperty(CliOption.API_KEY); - notBlank(apiKey, "You must provide non blank Sputnik API key"); - HttpHost httpHost = httpHelper.buildHttpHost(connectorDetails); HttpClientContext httpClientContext = httpHelper.buildClientContext(httpHost, new BasicScheme()); CloseableHttpClient closeableHttpClient = httpHelper.buildClient(httpHost, connectorDetails); - return new SaasFacade(new SaasConnector( - new HttpConnector(closeableHttpClient, httpClientContext, connectorDetails.getPath()), - GithubPatchsetBuilder.build(configuration), apiKey), new Gson()); + HttpConnector httpConnector = new HttpConnector(closeableHttpClient, httpClientContext, connectorDetails.getPath()); + GithubPatchset patchset = GithubPatchsetBuilder.build(configuration); + + SaasConnector saasConnector = StringUtils.isNotBlank(apiKey) ? + new SaasConnector(httpConnector, patchset, apiKey) : + new SaasConnector(httpConnector, patchset); + + return new SaasFacade(saasConnector, new Gson()); } } diff --git a/src/test/java/pl/touk/sputnik/HttpConnectorEnv.java b/src/test/java/pl/touk/sputnik/HttpConnectorEnv.java index 72b67dd5..b1286e72 100644 --- a/src/test/java/pl/touk/sputnik/HttpConnectorEnv.java +++ b/src/test/java/pl/touk/sputnik/HttpConnectorEnv.java @@ -1,5 +1,6 @@ package pl.touk.sputnik; +import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder; import com.github.tomakehurst.wiremock.client.UrlMatchingStrategy; import org.apache.commons.io.IOUtils; import org.apache.http.HttpStatus; @@ -9,13 +10,17 @@ public class HttpConnectorEnv { - protected void stubGet(UrlMatchingStrategy url, String responseFile) throws Exception { + protected void stubGet(UrlMatchingStrategy url, ResponseDefinitionBuilder responseDefinitionBuilder) { stubFor(get(url) .withHeader("Authorization", equalTo("Basic dXNlcjpwYXNz")) - .willReturn(aResponse() + .willReturn(responseDefinitionBuilder)); + } + + protected void stubGet(UrlMatchingStrategy url, String responseFile) throws Exception { + stubGet(url, aResponse() .withStatus(HttpStatus.SC_OK) .withHeader("Content-Type", "application/json") - .withBody(IOUtils.toString(getClass().getResourceAsStream(responseFile))))); + .withBody(IOUtils.toString(getClass().getResourceAsStream(responseFile)))); } protected void stubPost(UrlMatchingStrategy url, String responseFile) throws Exception { diff --git a/src/test/java/pl/touk/sputnik/connector/saas/SaasFacadeTest.java b/src/test/java/pl/touk/sputnik/connector/saas/SaasFacadeTest.java index 79131563..c8a5b8f5 100644 --- a/src/test/java/pl/touk/sputnik/connector/saas/SaasFacadeTest.java +++ b/src/test/java/pl/touk/sputnik/connector/saas/SaasFacadeTest.java @@ -73,7 +73,41 @@ public void shouldPublishReview() throws Exception { } @Test(expected = SaasException.class) - public void shouldHandleWrongApiKey() throws Exception { + public void shouldThrowOnWrongApiKey() throws Exception { + SaasFacade saasFacade = buildFacade(ImmutableMap.of( + "cli.pullRequestId", SOME_PULL_REQUEST_ID.toString(), + "cli.apiKey", "WRONG_API_KEY", + "connector.repository", SOME_REPOSITORY, + "connector.project", SOME_PROJECT + )); + stubGet(urlEqualTo(String.format( + "%s/api/github/%s/%s/pulls/%s/files?key=%s", + FacadeConfigUtil.PATH, SOME_PROJECT, SOME_REPOSITORY, SOME_PULL_REQUEST_ID, "WRONG_API_KEY")), + aResponse().withStatus(403)); + saasFacade.listFiles(); } + + @Test + public void shouldHandleEmptyApiKey() throws Exception { + SaasFacade saasFacade = buildFacade(ImmutableMap.of( + "cli.pullRequestId", SOME_PULL_REQUEST_ID.toString(), + "connector.repository", SOME_REPOSITORY, + "connector.project", SOME_PROJECT + )); + + stubGet(urlEqualTo(String.format( + "%s/api/github/%s/%s/pulls/%s/files", + FacadeConfigUtil.PATH, SOME_PROJECT, SOME_REPOSITORY, SOME_PULL_REQUEST_ID)), "/json/saas-files.json"); + + List files = saasFacade.listFiles(); + + assertThat(files).extracting("reviewFilename").containsOnly("src/main/java/TestFile.java", "src/main/java/TestFile2.java"); + } + + protected SaasFacade buildFacade(Map configMap) { + Configuration config = new ConfigurationSetup().setUp(FacadeConfigUtil.getHttpConfig("saas"), configMap); + return new SaasFacadeBuilder().build(config); + } + }