return handleGetPluginSettingsConfiguration(); case REQ_PLUGIN_SETTINGS_GET_VIEW: try { return handleGetPluginSettingsView(); } catch (IOException e) { return error(gson.toJson(format("Failed to find template: %s", e.getMessage()))); return handleValidatePluginSettingsConfiguration(); case REQ_PARSE_CONTENT: return handleParseContentRequest(request); case REQ_PARSE_DIRECTORY: ensureConfigured(); return handleParseDirectoryRequest(request); case REQ_PIPELINE_EXPORT: return handlePipelineExportRequest(request); case REQ_GET_CAPABILITIES: return success(gson.toJson(new Capabilities())); case REQ_PLUGIN_SETTINGS_CHANGED: configurePlugin(PluginSettings.fromJson(request.requestBody())); return new DefaultGoPluginApiResponse(SUCCESS_RESPONSE_CODE, ""); case REQ_GET_ICON: return handleGetIconRequest(); default: throw new UnhandledRequestTypeException(requestName);
private GoPluginApiResponse handleGetPluginSettingsConfiguration() { Map<String, Object> response = new HashMap<>(); response.put(PLUGIN_SETTINGS_FILE_PATTERN, createField(DISPLAY_NAME_FILE_PATTERN, DEFAULT_FILE_PATTERN, false, false, "0")); return success(gson.toJson(response)); }
private PluginSettings fetchPluginSettings() { Map<String, Object> requestMap = new HashMap<String, Object>(); requestMap.put("plugin-id", PLUGIN_ID); GoApiResponse response = goApplicationAccessor.submit(createGoApiRequest(REQ_GET_PLUGIN_SETTINGS, JSONUtils.toJSON(requestMap))); if (response.responseBody() == null || response.responseBody().trim().isEmpty()) { return new PluginSettings(); } return PluginSettings.fromJson(response.responseBody()); }
private GoPluginApiResponse handleParseDirectoryRequest(GoPluginApiRequest request) { return handlingErrors(() -> { ParsedRequest parsed = ParsedRequest.parse(request); File baseDir = new File(parsed.getStringParam("directory")); String pattern = parsed.getConfigurationKey(PLUGIN_SETTINGS_FILE_PATTERN); if (isBlank(pattern)) { pattern = getFilePattern(); } YamlConfigParser parser = new YamlConfigParser(); String[] files = new AntDirectoryScanner().getFilesMatchingPattern(baseDir, pattern); JsonConfigCollection config = parser.parseFiles(baseDir, files); config.updateTargetVersionFromFiles(); return success(gson.toJson(config.getJsonObject())); }); }
private GoPluginApiResponse parseAndGetResponseForDir(File directory) throws UnhandledRequestTypeException { DefaultGoPluginApiRequest parseDirectoryRequest = new DefaultGoPluginApiRequest("configrepo", "1.0", "parse-directory"); String requestBody = "{\n" + " \"directory\":\"" + directory + "\",\n" + " \"configurations\":[]\n" + "}"; parseDirectoryRequest.setRequestBody(requestBody); return plugin.handle(parseDirectoryRequest); }
@Test public void shouldConsumePluginSettingsOnConfigChangeRequest() throws UnhandledRequestTypeException { DefaultGoPluginApiRequest request = new DefaultGoPluginApiRequest("configrepo", "2.0", REQ_PLUGIN_SETTINGS_CHANGED); request.setRequestBody("{\"file_pattern\": \"*.foo.gocd.yaml\"}"); assertEquals(DEFAULT_FILE_PATTERN, plugin.getFilePattern()); GoPluginApiResponse response = plugin.handle(request); assertEquals("*.foo.gocd.yaml", plugin.getFilePattern()); assertThat(response.responseCode(), is(SUCCESS_RESPONSE_CODE)); }
@Before public void setUp() { plugin = new YamlConfigPlugin(); goAccessor = mock(GoApplicationAccessor.class); plugin.initializeGoApplicationAccessor(goAccessor); GoApiResponse settingsResponse = DefaultGoApiResponse.success("{}"); when(goAccessor.submit(any(GoApiRequest.class))).thenReturn(settingsResponse); parser = new JsonParser(); }
/** * fetches plugin settings if we haven't yet */ private void ensureConfigured() { if (null == settings) { settings = fetchPluginSettings(); } }
@Override public GoPluginIdentifier pluginIdentifier() { return getGoPluginIdentifier(); }
@Test public void shouldRespondWithGetIcon() throws UnhandledRequestTypeException, IOException { DefaultGoPluginApiRequest request = new DefaultGoPluginApiRequest("configrepo", "2.0", "get-icon"); GoPluginApiResponse response = plugin.handle(request); assertThat(response.responseCode(), is(SUCCESS_RESPONSE_CODE)); JsonObject jsonObject = getJsonObjectFromResponse(response); assertEquals(jsonObject.entrySet().size(), 2); assertEquals(jsonObject.get("content_type").getAsString(), "image/svg+xml"); byte[] actualData = Base64.getDecoder().decode(jsonObject.get("data").getAsString()); byte[] expectedData = IOUtils.toByteArray(getClass().getResourceAsStream("/yaml.svg")); assertArrayEquals(expectedData, actualData); }
@Test public void shouldContainFilePatternInResponseToGetConfigurationRequest() throws UnhandledRequestTypeException { DefaultGoPluginApiRequest getConfigRequest = new DefaultGoPluginApiRequest("configrepo", "1.0", "go.plugin-settings.get-configuration"); GoPluginApiResponse response = plugin.handle(getConfigRequest); assertThat(response.responseCode(), is(SUCCESS_RESPONSE_CODE)); JsonObject responseJsonObject = getJsonObjectFromResponse(response); JsonElement pattern = responseJsonObject.get("file_pattern"); assertNotNull(pattern); JsonObject patternAsJsonObject = pattern.getAsJsonObject(); assertThat(patternAsJsonObject.get("display-name").getAsString(), is("Go YAML files pattern")); assertThat(patternAsJsonObject.get("default-value").getAsString(), is("**/*.gocd.yaml,**/*.gocd.yml")); assertThat(patternAsJsonObject.get("required").getAsBoolean(), is(false)); assertThat(patternAsJsonObject.get("secure").getAsBoolean(), is(false)); assertThat(patternAsJsonObject.get("display-order").getAsInt(), is(0)); }
@Test public void shouldRespondSuccessToGetViewRequest() throws UnhandledRequestTypeException { DefaultGoPluginApiRequest getConfigRequest = new DefaultGoPluginApiRequest("configrepo", "1.0", "go.plugin-settings.get-view"); GoPluginApiResponse response = plugin.handle(getConfigRequest); assertThat(response.responseCode(), is(SUCCESS_RESPONSE_CODE)); }
@Test public void shouldRespondSuccessToGetConfigurationRequest() throws UnhandledRequestTypeException { DefaultGoPluginApiRequest getConfigRequest = new DefaultGoPluginApiRequest("configrepo", "1.0", "go.plugin-settings.get-configuration"); GoPluginApiResponse response = plugin.handle(getConfigRequest); assertThat(response.responseCode(), is(SUCCESS_RESPONSE_CODE)); }
@Test public void shouldRespondSuccessToValidateConfigRequest() throws UnhandledRequestTypeException { DefaultGoPluginApiRequest validateRequest = new DefaultGoPluginApiRequest("configrepo", "1.0", "go.plugin-settings.validate-configuration"); GoPluginApiResponse response = plugin.handle(validateRequest); assertThat(response.responseCode(), is(SUCCESS_RESPONSE_CODE)); }
@Test public void shouldRespondWithCapabilities() throws UnhandledRequestTypeException { String expected = new Gson().toJson(new Capabilities()); DefaultGoPluginApiRequest request = new DefaultGoPluginApiRequest("configrepo", "2.0", "get-capabilities"); GoPluginApiResponse response = plugin.handle(request); assertThat(response.responseCode(), is(SUCCESS_RESPONSE_CODE)); assertThat(response.responseBody(), is(expected)); }
@Test public void respondsToParseContentRequest() throws Exception { final Gson gson = new Gson(); DefaultGoPluginApiRequest request = new DefaultGoPluginApiRequest("configrepo", "2.0", ConfigRepoMessages.REQ_PARSE_CONTENT); StringWriter w = new StringWriter(); IOUtils.copy(getResourceAsStream("examples/simple.gocd.yaml"), w); request.setRequestBody(gson.toJson( Collections.singletonMap("contents", Collections.singletonMap("simple.gocd.yaml", w.toString()) ) )); GoPluginApiResponse response = plugin.handle(request); assertEquals(SUCCESS_RESPONSE_CODE, response.responseCode()); JsonObject responseJsonObject = getJsonObjectFromResponse(response); assertNoError(responseJsonObject); JsonArray pipelines = responseJsonObject.get("pipelines").getAsJsonArray(); assertThat(pipelines.size(), is(1)); JsonObject expected = (JsonObject) readJsonObject("examples.out/simple.gocd.json"); assertThat(responseJsonObject, is(new JsonObjectMatcher(expected))); }
@Test public void shouldRespondBadRequestToParseDirectoryRequestWhenRequestBodyIsNotJson() throws UnhandledRequestTypeException { DefaultGoPluginApiRequest parseDirectoryRequest = new DefaultGoPluginApiRequest("configrepo", "1.0", "parse-directory"); parseDirectoryRequest.setRequestBody("{bla"); GoPluginApiResponse response = plugin.handle(parseDirectoryRequest); assertThat(response.responseCode(), is(DefaultGoPluginApiResponse.BAD_REQUEST)); }
@Test public void shouldRespondBadRequestToParseDirectoryRequestWhenRequestBodyIsEmpty() throws UnhandledRequestTypeException { DefaultGoPluginApiRequest parseDirectoryRequest = new DefaultGoPluginApiRequest("configrepo", "1.0", "parse-directory"); parseDirectoryRequest.setRequestBody("{}"); GoPluginApiResponse response = plugin.handle(parseDirectoryRequest); assertThat(response.responseCode(), is(DefaultGoPluginApiResponse.BAD_REQUEST)); }
@Test public void shouldRespondBadRequestToParseDirectoryRequestWhenDirectoryIsNotSpecified() throws UnhandledRequestTypeException { DefaultGoPluginApiRequest parseDirectoryRequest = new DefaultGoPluginApiRequest("configrepo", "1.0", "parse-directory"); String requestBody = "{\n" + " \"configurations\":[]\n" + "}"; parseDirectoryRequest.setRequestBody(requestBody); GoPluginApiResponse response = plugin.handle(parseDirectoryRequest); assertThat(response.responseCode(), is(DefaultGoPluginApiResponse.BAD_REQUEST)); }
@Test public void shouldRespondBadRequestToParseDirectoryRequestWhenRequestBodyIsNull() throws UnhandledRequestTypeException { DefaultGoPluginApiRequest parseDirectoryRequest = new DefaultGoPluginApiRequest("configrepo", "1.0", "parse-directory"); String requestBody = null; parseDirectoryRequest.setRequestBody(requestBody); GoPluginApiResponse response = plugin.handle(parseDirectoryRequest); assertThat(response.responseCode(), is(DefaultGoPluginApiResponse.BAD_REQUEST)); }