import org.sonar.server.plugins.ws.AvailablePluginsWsAction;
import org.sonar.server.plugins.ws.InstalledPluginsWsAction;
import org.sonar.server.plugins.ws.PendingPluginsWsAction;
+import org.sonar.server.plugins.ws.PluginWSCommons;
import org.sonar.server.plugins.ws.PluginsWs;
import org.sonar.server.properties.ProjectSettingsFactory;
import org.sonar.server.qualitygate.QgateProjectFinder;
// System
pico.addSingletons(Arrays.asList(
- SystemRestartWsAction.class,
- SystemInfoWsAction.class,
- SystemWs.class,
- SystemMonitor.class,
- SonarQubeMonitor.class,
- EsMonitor.class,
- PluginsMonitor.class,
- JvmPropertiesMonitor.class,
- DatabaseMonitor.class
- ));
+ SystemRestartWsAction.class,
+ SystemInfoWsAction.class,
+ SystemWs.class,
+ SystemMonitor.class,
+ SonarQubeMonitor.class,
+ EsMonitor.class,
+ PluginsMonitor.class,
+ JvmPropertiesMonitor.class,
+ DatabaseMonitor.class
+ ));
// Plugins WS
+ pico.addSingleton(PluginWSCommons.class);
pico.addSingleton(InstalledPluginsWsAction.class);
pico.addSingleton(AvailablePluginsWsAction.class);
pico.addSingleton(PendingPluginsWsAction.class);
import org.sonar.updatecenter.common.PluginUpdate;
import org.sonar.updatecenter.common.Release;
+import javax.annotation.Nullable;
import java.util.List;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.transform;
+import static org.sonar.server.plugins.ws.PluginWSCommons.OBJECT_ARTIFACT;
+import static org.sonar.server.plugins.ws.PluginWSCommons.PROPERTY_DATE;
+import static org.sonar.server.plugins.ws.PluginWSCommons.PROPERTY_DESCRIPTION;
+import static org.sonar.server.plugins.ws.PluginWSCommons.PROPERTY_KEY;
+import static org.sonar.server.plugins.ws.PluginWSCommons.PROPERTY_NAME;
+import static org.sonar.server.plugins.ws.PluginWSCommons.PROPERTY_ORGANIZATION_NAME;
+import static org.sonar.server.plugins.ws.PluginWSCommons.PROPERTY_ORGANIZATION_URL;
+import static org.sonar.server.plugins.ws.PluginWSCommons.PROPERTY_STATUS;
+import static org.sonar.server.plugins.ws.PluginWSCommons.PROPERTY_TERMS_AND_CONDITIONS_URL;
+import static org.sonar.server.plugins.ws.PluginWSCommons.PROPERTY_URL;
+import static org.sonar.server.plugins.ws.PluginWSCommons.PROPERTY_VERSION;
public class AvailablePluginsWsAction implements PluginsWsAction {
private static final boolean DO_NOT_FORCE_REFRESH = false;
- private static final String PROPERTY_KEY = "key";
- private static final String PROPERTY_NAME = "name";
- private static final String PROPERTY_DESCRIPTION = "description";
- private static final String PROPERTY_ORGANIZATION_NAME = "organizationName";
- private static final String PROPERTY_ORGANIZATION_URL = "organizationUrl";
- private static final String PROPERTY_URL = "url";
- private static final String PROPERTY_TERMS_AND_CONDITIONS_URL = "termsAndConditionsUrl";
private static final String OBJECT_UPDATE = "update";
- private static final String OBJECT_ARTIFACT = "artifact";
private static final String OBJECT_RELEASE = "release";
- private static final String PROPERTY_VERSION = "version";
- private static final String PROPERTY_DATE = "date";
- private static final String PROPERTY_STATUS = "status";
private static final String ARRAY_REQUIRES = "requires";
private static final String ARRAY_PLUGINS = "plugins";
private static final String PROPERTY_CATEGORY = "category";
@Override
public void define(WebService.NewController controller) {
controller.createAction("available")
- .setDescription("Get the list of all the plugins available for installation on the SonarQube instance, sorted by name." +
+ .setDescription("Get the list of all the plugins available for installation on the SonarQube instance, sorted by plugin name." +
"<br/>" +
"Update status values are: [COMPATIBLE, INCOMPATIBLE, REQUIRES_UPGRADE, DEPS_REQUIRE_UPGRADE]")
.setSince("5.2")
jsonWriter.endObject();
}
+ private List<PluginUpdate> retrieveAvailablePlugins() {
+ return updateCenterFactory.getUpdateCenter(DO_NOT_FORCE_REFRESH).findAvailablePlugins();
+ }
+
private void writePluginUpdate(JsonWriter jsonWriter, PluginUpdate pluginUpdate) {
jsonWriter.beginObject();
Plugin plugin = pluginUpdate.getPlugin();
- jsonWriter.prop(PROPERTY_KEY, plugin.getKey());
- jsonWriter.prop(PROPERTY_NAME, plugin.getName());
- jsonWriter.prop(PROPERTY_CATEGORY, plugin.getCategory());
- jsonWriter.prop(PROPERTY_DESCRIPTION, plugin.getDescription());
- jsonWriter.prop(PROPERTY_LICENSE, plugin.getLicense());
- jsonWriter.prop(PROPERTY_TERMS_AND_CONDITIONS_URL, plugin.getTermsConditionsUrl());
- jsonWriter.prop(PROPERTY_ORGANIZATION_NAME, plugin.getOrganization());
- jsonWriter.prop(PROPERTY_ORGANIZATION_URL, plugin.getOrganizationUrl());
+ writeMetadata(jsonWriter, plugin);
writeRelease(jsonWriter, pluginUpdate.getRelease());
jsonWriter.endObject();
}
- private List<PluginUpdate> retrieveAvailablePlugins() {
- return updateCenterFactory.getUpdateCenter(DO_NOT_FORCE_REFRESH).findAvailablePlugins();
+ private void writeMetadata(JsonWriter jsonWriter, Plugin plugin) {
+ jsonWriter.prop(PROPERTY_KEY, plugin.getKey());
+ jsonWriter.prop(PROPERTY_NAME, plugin.getName());
+ jsonWriter.prop(PROPERTY_CATEGORY, plugin.getCategory());
+ jsonWriter.prop(PROPERTY_DESCRIPTION, plugin.getDescription());
+ jsonWriter.prop(PROPERTY_LICENSE, plugin.getLicense());
+ jsonWriter.prop(PROPERTY_TERMS_AND_CONDITIONS_URL, plugin.getTermsConditionsUrl());
+ jsonWriter.prop(PROPERTY_ORGANIZATION_NAME, plugin.getOrganization());
+ jsonWriter.prop(PROPERTY_ORGANIZATION_URL, plugin.getOrganizationUrl());
}
private void writeRelease(JsonWriter jsonWriter, Release release) {
for (Plugin child : filter(transform(release.getOutgoingDependencies(), ReleaseToArtifact.INSTANCE), Plugin.class)) {
jsonWriter.beginObject();
jsonWriter.prop(PROPERTY_KEY, child.getKey());
- jsonWriter.prop(AvailablePluginsWsAction.PROPERTY_NAME, child.getName());
+ jsonWriter.prop(PROPERTY_NAME, child.getName());
jsonWriter.prop(PROPERTY_DESCRIPTION, child.getDescription());
jsonWriter.endObject();
}
INSTANCE;
@Override
- public Artifact apply(Release input) {
+ public Artifact apply(@Nullable Release input) {
+ if (input == null) {
+ return null;
+ }
return input.getArtifact();
}
}
*/
package org.sonar.server.plugins.ws;
-import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableSortedSet;
-import com.google.common.collect.Ordering;
import com.google.common.io.Resources;
import org.sonar.api.platform.PluginMetadata;
import org.sonar.api.platform.PluginRepository;
import java.util.SortedSet;
import static com.google.common.collect.Iterables.filter;
+import static org.sonar.server.plugins.ws.PluginWSCommons.NAME_KEY_PLUGIN_METADATA_COMPARATOR;
/**
* Implementation of the {@code installed} action for the Plugins WebService.
*/
public class InstalledPluginsWsAction implements PluginsWsAction {
- private static final String PROPERTY_KEY = "key";
- private static final String PROPERTY_NAME = "name";
- private static final String PROPERTY_DESCRIPTION = "description";
- private static final String PROPERTY_LICENSE = "license";
- private static final String PROPERTY_VERSION = "version";
private static final String ARRAY_PLUGINS = "plugins";
- private static final String PROPERTY_ORGANIZATION_NAME = "organizationName";
- private static final String PROPERTY_ORGANIZATION_URL = "organizationUrl";
- private static final String OBJECT_URLS = "urls";
- private static final String PROPERTY_HOMEPAGE = "homepage";
- private static final String PROPERTY_ISSUE_TRACKER = "issueTracker";
- private static final String OBJECT_ARTIFACT = "artifact";
private final PluginRepository pluginRepository;
+ private final PluginWSCommons pluginWSCommons;
- public static final Ordering<PluginMetadata> NAME_KEY_PLUGIN_METADATA_COMPARATOR = Ordering.natural()
- .onResultOf(PluginMetadataToName.INSTANCE)
- .compound(Ordering.natural().onResultOf(PluginMetadataToKey.INSTANCE));
-
- public InstalledPluginsWsAction(PluginRepository pluginRepository) {
+ public InstalledPluginsWsAction(PluginRepository pluginRepository,
+ PluginWSCommons pluginWSCommons) {
this.pluginRepository = pluginRepository;
+ this.pluginWSCommons = pluginWSCommons;
}
@Override
public void define(WebService.NewController controller) {
controller.createAction("installed")
- .setDescription("Get the list of all the plugins installed on the SonarQube instance, sorted by name")
+ .setDescription("Get the list of all the plugins installed on the SonarQube instance, sorted by plugin name")
.setSince("5.2")
.setHandler(this)
.setResponseExample(Resources.getResource(this.getClass(), "example-installed_plugins.json"));
}
private void writeMetadataList(JsonWriter jsonWriter, Collection<PluginMetadata> pluginMetadatas) {
- jsonWriter.name(ARRAY_PLUGINS);
- jsonWriter.beginArray();
- for (PluginMetadata pluginMetadata : pluginMetadatas) {
- writePluginMetadata(jsonWriter, pluginMetadata);
- }
- jsonWriter.endArray();
- }
-
- private void writePluginMetadata(JsonWriter jsonWriter, PluginMetadata pluginMetadata) {
- jsonWriter.beginObject();
-
- writeMetadata(jsonWriter, pluginMetadata);
-
- writeUrls(jsonWriter, pluginMetadata);
-
- writeArtifact(jsonWriter, pluginMetadata);
-
- jsonWriter.endObject();
- }
-
- private void writeMetadata(JsonWriter jsonWriter, PluginMetadata pluginMetadata) {
- jsonWriter.prop(PROPERTY_KEY, pluginMetadata.getKey());
- jsonWriter.prop(PROPERTY_NAME, pluginMetadata.getName());
- jsonWriter.prop(PROPERTY_DESCRIPTION, pluginMetadata.getDescription());
- jsonWriter.prop(PROPERTY_VERSION, pluginMetadata.getVersion());
- jsonWriter.prop(PROPERTY_LICENSE, pluginMetadata.getLicense());
- jsonWriter.prop(PROPERTY_ORGANIZATION_NAME, pluginMetadata.getOrganization());
- jsonWriter.prop(PROPERTY_ORGANIZATION_URL, pluginMetadata.getOrganizationUrl());
- }
-
- private void writeUrls(JsonWriter jsonWriter, PluginMetadata pluginMetadata) {
- jsonWriter.name(OBJECT_URLS);
- jsonWriter.beginObject();
- jsonWriter.prop(PROPERTY_HOMEPAGE, pluginMetadata.getHomepage());
- jsonWriter.prop(PROPERTY_ISSUE_TRACKER, pluginMetadata.getIssueTrackerUrl());
- jsonWriter.endObject();
- }
-
- private void writeArtifact(JsonWriter jsonWriter, PluginMetadata pluginMetadata) {
- if (pluginMetadata.getFile() == null) {
- return;
+ jsonWriter.name(ARRAY_PLUGINS);
+ jsonWriter.beginArray();
+ for (PluginMetadata pluginMetadata : pluginMetadatas) {
+ pluginWSCommons.writePluginMetadata(jsonWriter, pluginMetadata);
}
-
- jsonWriter.name(OBJECT_ARTIFACT);
- jsonWriter.beginObject();
- jsonWriter.prop(PROPERTY_NAME, pluginMetadata.getFile().getName());
- jsonWriter.endObject();
+ jsonWriter.endArray();
}
private enum NotCorePluginsPredicate implements Predicate<PluginMetadata> {
return input != null && !input.isCore();
}
}
-
- private enum PluginMetadataToName implements Function<PluginMetadata, String> {
- INSTANCE;
-
- @Override
- public String apply(@Nullable PluginMetadata input) {
- if (input == null) {
- return null;
- }
- return input.getName();
- }
- }
-
- private enum PluginMetadataToKey implements Function<PluginMetadata, String> {
- INSTANCE;
-
- @Override
- public String apply(@Nullable PluginMetadata input) {
- if (input == null) {
- return null;
- }
- return input.getKey();
- }
- }
}
import org.sonar.server.plugins.ServerPluginJarsInstaller;
import java.util.Collection;
-import java.util.List;
import static com.google.common.collect.ImmutableSortedSet.copyOf;
import static com.google.common.io.Resources.getResource;
-import static org.sonar.server.plugins.ws.InstalledPluginsWsAction.NAME_KEY_PLUGIN_METADATA_COMPARATOR;
+import static org.sonar.server.plugins.ws.PluginWSCommons.NAME_KEY_PLUGIN_METADATA_COMPARATOR;
/**
* Implementation of the {@code pending} action for the Plugins WebService.
private static final String ARRAY_INSTALLING = "installing";
private static final String ARRAY_REMOVING = "removing";
- private static final String OBJECT_ARTIFACT = "artifact";
- private static final String PROPERTY_NAME = "name";
private final PluginDownloader pluginDownloader;
private final ServerPluginJarsInstaller serverPluginJarsInstaller;
+ private final PluginWSCommons pluginWSCommons;
- public PendingPluginsWsAction(PluginDownloader pluginDownloader, ServerPluginJarsInstaller serverPluginJarsInstaller) {
+ public PendingPluginsWsAction(PluginDownloader pluginDownloader,
+ ServerPluginJarsInstaller serverPluginJarsInstaller,
+ PluginWSCommons pluginWSCommons) {
this.pluginDownloader = pluginDownloader;
this.serverPluginJarsInstaller = serverPluginJarsInstaller;
+ this.pluginWSCommons = pluginWSCommons;
}
@Override
public void define(WebService.NewController controller) {
controller.createAction("pending")
- .setDescription("Get the list of plugins which will either be installed or removed at the next startup of the SonarQube instance, sorted by archive name")
+ .setDescription("Get the list of plugins which will either be installed or removed at the next startup of the SonarQube instance, sorted by plugin name")
.setSince("5.2")
.setHandler(this)
.setResponseExample(getResource(this.getClass(), "example-pending_plugins.json"));
private void writeInstalling(JsonWriter jsonWriter) {
jsonWriter.name(ARRAY_INSTALLING);
jsonWriter.beginArray();
- List<DefaultPluginMetadata> plugins = pluginDownloader.getDownloadedPlugins();
+ Collection<DefaultPluginMetadata> plugins = pluginDownloader.getDownloadedPlugins();
for (PluginMetadata pluginMetadata : copyOf(NAME_KEY_PLUGIN_METADATA_COMPARATOR, plugins)) {
- writePlugin(jsonWriter, pluginMetadata);
+ pluginWSCommons.writePluginMetadata(jsonWriter, pluginMetadata);
}
jsonWriter.endArray();
}
jsonWriter.beginArray();
Collection<DefaultPluginMetadata> plugins = serverPluginJarsInstaller.getUninstalledPlugins();
for (PluginMetadata pluginMetadata : copyOf(NAME_KEY_PLUGIN_METADATA_COMPARATOR, plugins)) {
- writePlugin(jsonWriter, pluginMetadata);
+ pluginWSCommons.writePluginMetadata(jsonWriter, pluginMetadata);
}
jsonWriter.endArray();
}
- private void writePlugin(JsonWriter jsonWriter, PluginMetadata pluginMetadata) {
- jsonWriter.beginObject();
-
- writeMetadata(jsonWriter, pluginMetadata);
-
- jsonWriter.prop("homepageUrl", pluginMetadata.getHomepage());
- jsonWriter.prop("issueTrackerUrl", pluginMetadata.getIssueTrackerUrl());
-
- writeArchive(jsonWriter, pluginMetadata);
-
- jsonWriter.endObject();
- }
-
- private void writeMetadata(JsonWriter jsonWriter, PluginMetadata pluginMetadata) {
- jsonWriter.prop("key", pluginMetadata.getKey());
- jsonWriter.prop("name", pluginMetadata.getName());
- jsonWriter.prop("description", pluginMetadata.getDescription());
- jsonWriter.prop("version", pluginMetadata.getVersion());
- jsonWriter.prop("license", pluginMetadata.getLicense());
- jsonWriter.prop("organizationName", pluginMetadata.getOrganization());
- jsonWriter.prop("organizationUrl", pluginMetadata.getOrganizationUrl());
- }
-
- private void writeArchive(JsonWriter jsonWriter, PluginMetadata pluginMetadata) {
- if (pluginMetadata.getFile() == null) {
- return;
- }
-
- jsonWriter.name(OBJECT_ARTIFACT);
- jsonWriter.beginObject();
- jsonWriter.prop(PROPERTY_NAME, pluginMetadata.getFile().getName());
- jsonWriter.endObject();
- }
}
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.server.plugins.ws;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Ordering;
+import org.sonar.api.platform.PluginMetadata;
+import org.sonar.api.utils.text.JsonWriter;
+
+import javax.annotation.Nullable;
+
+public class PluginWSCommons {
+ static final String PROPERTY_KEY = "key";
+ static final String PROPERTY_NAME = "name";
+ static final String PROPERTY_DESCRIPTION = "description";
+ static final String PROPERTY_LICENSE = "license";
+ static final String PROPERTY_VERSION = "version";
+ static final String PROPERTY_ORGANIZATION_NAME = "organizationName";
+ static final String PROPERTY_ORGANIZATION_URL = "organizationUrl";
+ static final String PROPERTY_DATE = "date";
+ static final String PROPERTY_STATUS = "status";
+ static final String OBJECT_URLS = "urls";
+ static final String PROPERTY_HOMEPAGE = "homepage";
+ static final String PROPERTY_ISSUE_TRACKER = "issueTracker";
+ static final String OBJECT_ARTIFACT = "artifact";
+ static final String PROPERTY_URL = "url";
+ static final String PROPERTY_TERMS_AND_CONDITIONS_URL = "termsAndConditionsUrl";
+
+ public static final Ordering<PluginMetadata> NAME_KEY_PLUGIN_METADATA_COMPARATOR = Ordering.natural()
+ .onResultOf(PluginMetadataToName.INSTANCE)
+ .compound(Ordering.natural().onResultOf(PluginMetadataToKey.INSTANCE));
+
+ public void writePluginMetadata(JsonWriter jsonWriter, PluginMetadata pluginMetadata) {
+ jsonWriter.beginObject();
+
+ writeMetadata(jsonWriter, pluginMetadata);
+
+ writeUrls(jsonWriter, pluginMetadata);
+
+ writeArtifact(jsonWriter, pluginMetadata);
+
+ jsonWriter.endObject();
+ }
+
+ public void writeMetadata(JsonWriter jsonWriter, PluginMetadata pluginMetadata) {
+ jsonWriter.prop(PROPERTY_KEY, pluginMetadata.getKey());
+ jsonWriter.prop(PROPERTY_NAME, pluginMetadata.getName());
+ jsonWriter.prop(PROPERTY_DESCRIPTION, pluginMetadata.getDescription());
+ jsonWriter.prop(PROPERTY_VERSION, pluginMetadata.getVersion());
+ jsonWriter.prop(PROPERTY_LICENSE, pluginMetadata.getLicense());
+ jsonWriter.prop(PROPERTY_ORGANIZATION_NAME, pluginMetadata.getOrganization());
+ jsonWriter.prop(PROPERTY_ORGANIZATION_URL, pluginMetadata.getOrganizationUrl());
+ }
+
+ public void writeUrls(JsonWriter jsonWriter, PluginMetadata pluginMetadata) {
+ jsonWriter.name(OBJECT_URLS);
+ jsonWriter.beginObject();
+ jsonWriter.prop(PROPERTY_HOMEPAGE, pluginMetadata.getHomepage());
+ jsonWriter.prop(PROPERTY_ISSUE_TRACKER, pluginMetadata.getIssueTrackerUrl());
+ jsonWriter.endObject();
+ }
+
+ public void writeArtifact(JsonWriter jsonWriter, PluginMetadata pluginMetadata) {
+ if (pluginMetadata.getFile() == null) {
+ return;
+ }
+
+ jsonWriter.name(OBJECT_ARTIFACT);
+ jsonWriter.beginObject();
+ jsonWriter.prop(PROPERTY_NAME, pluginMetadata.getFile().getName());
+ jsonWriter.endObject();
+ }
+
+ private enum PluginMetadataToName implements Function<PluginMetadata, String> {
+ INSTANCE;
+
+ @Override
+ public String apply(@Nullable PluginMetadata input) {
+ if (input == null) {
+ return null;
+ }
+ return input.getName();
+ }
+ }
+
+ private enum PluginMetadataToKey implements Function<PluginMetadata, String> {
+ INSTANCE;
+
+ @Override
+ public String apply(@Nullable PluginMetadata input) {
+ if (input == null) {
+ return null;
+ }
+ return input.getKey();
+ }
+ }
+}
"license": "GNU LGPL 3",
"organizationName": "SonarSource",
"organizationUrl": "http://www.sonarsource.com",
- "homepageUrl": "http://redirect.sonarsource.com/plugins/scmgit.html",
- "issueTrackerUrl": "http://jira.codehaus.org/browse/SONARSCGIT",
+ "urls": {
+ "homepage": "http://redirect.sonarsource.com/plugins/scmgit.html",
+ "issueTracker": "http://jira.codehaus.org/browse/SONARSCGIT"
+ },
"artifact": {
"name": "sonar-scm-git-plugin-1.0.jar"
}
"license": "GNU LGPL 3",
"organizationName": "SonarSource",
"organizationUrl": "http://www.sonarsource.com",
- "homepageUrl": "http://redirect.sonarsource.com/plugins/java.html",
- "issueTrackerUrl": "http://jira.codehaus.org/browse/SONARJAVA",
+ "urls": {
+ "homepage": "http://redirect.sonarsource.com/plugins/java.html",
+ "issueTracker": "http://jira.codehaus.org/browse/SONARJAVA"
+ },
"artifact": {
"name": "sonar-java-plugin-3.0.jar"
}
"license": "GNU LGPL 3",
"organizationName": "SonarSource",
"organizationUrl": "http://www.sonarsource.com",
- "homepageUrl": "http://redirect.sonarsource.com/plugins/scmsvn.html",
- "issueTrackerUrl": "http://jira.codehaus.org/browse/SONARSCSVN",
+ "urls": {
+ "homepage": "http://redirect.sonarsource.com/plugins/scmsvn.html",
+ "issueTracker": "http://jira.codehaus.org/browse/SONARSCSVN"
+ },
"artifact": {
"name": "sonar-scm-svn-plugin-1.0.jar"
}
*/
package org.sonar.server.plugins.ws;
-import org.junit.Before;
import org.junit.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
import org.sonar.api.platform.PluginMetadata;
import org.sonar.api.platform.PluginRepository;
import org.sonar.api.server.ws.Request;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-import static org.mockito.MockitoAnnotations.initMocks;
import static org.sonar.test.JsonAssert.assertJson;
public class InstalledPluginsWsActionTest {
" \"plugins\":" + "[]" +
"}";
- @Mock
- private PluginRepository pluginRepository;
- @InjectMocks
- private InstalledPluginsWsAction underTest;
+ private PluginRepository pluginRepository = mock(PluginRepository.class);
+ private InstalledPluginsWsAction underTest = new InstalledPluginsWsAction(pluginRepository, new PluginWSCommons());
- @Mock
private Request request = mock(Request.class);
private WsTester.TestResponse response = new WsTester.TestResponse();
private PluginMetadata corePlugin = corePlugin("core1", 10);
- @Before
- public void createMocks() throws Exception {
- initMocks(this);
- }
-
@Test
public void action_installed_is_defined() throws Exception {
WsTester wsTester = new WsTester();
@Test
public void empty_fields_are_not_serialized_to_json() throws Exception {
when(pluginRepository.getMetadata()).thenReturn(
- of(
- (PluginMetadata) DefaultPluginMetadata.create("").setName("").setCore(false)
- )
- );
+ of(
+ (PluginMetadata) DefaultPluginMetadata.create("").setName("").setCore(false)
+ )
+ );
underTest.handle(request, response);
underTest.handle(request, response);
assertJson(response.outputAsString()).isSimilarTo(
- "{" +
- " \"plugins\":" +
- " [" +
- " {" +
- " \"key\": \"plugKey\"," +
- " \"name\": \"plugName\"," +
- " \"description\": \"desc_it\"," +
- " \"version\": \"10\"," +
- " \"license\": \"license_hey\"," +
- " \"organizationName\": \"org_name\"," +
- " \"organizationUrl\": \"org_url\"," +
- " \"urls\":" +
- " {" +
- " \"homepage\": \"homepage_url\"," +
- " \"issueTracker\": \"issueTracker_url\"" +
- " }," +
- " \"artifact\":" +
- " {" +
- " \"name\": \"some.jar\"" +
- " }" +
- " }" +
- " ]" +
- "}"
- );
+ "{" +
+ " \"plugins\":" +
+ " [" +
+ " {" +
+ " \"key\": \"plugKey\"," +
+ " \"name\": \"plugName\"," +
+ " \"description\": \"desc_it\"," +
+ " \"version\": \"10\"," +
+ " \"license\": \"license_hey\"," +
+ " \"organizationName\": \"org_name\"," +
+ " \"organizationUrl\": \"org_url\"," +
+ " \"urls\":" +
+ " {" +
+ " \"homepage\": \"homepage_url\"," +
+ " \"issueTracker\": \"issueTracker_url\"" +
+ " }," +
+ " \"artifact\":" +
+ " {" +
+ " \"name\": \"some.jar\"" +
+ " }" +
+ " }" +
+ " ]" +
+ "}"
+ );
}
@Test
underTest.handle(request, response);
assertJson(response.outputAsString()).setStrictArrayOrder(true).isSimilarTo(
- "{" +
- " \"plugins\":" +
- " [" +
- " {\"key\": \"C\"}" + "," +
- " {\"key\": \"D\"}" + "," +
- " {\"key\": \"B\"}" + "," +
- " {\"key\": \"A\"}" +
- " ]" +
- "}"
- );
+ "{" +
+ " \"plugins\":" +
+ " [" +
+ " {\"key\": \"C\"}" + "," +
+ " {\"key\": \"D\"}" + "," +
+ " {\"key\": \"B\"}" + "," +
+ " {\"key\": \"A\"}" +
+ " ]" +
+ "}"
+ );
}
@Test
underTest.handle(request, response);
assertJson(response.outputAsString()).setStrictArrayOrder(true).isSimilarTo(
- "{" +
- " \"plugins\":" +
- " [" +
- " {\"key\": \"A\"}" +
- " ]" +
- "}"
- );
+ "{" +
+ " \"plugins\":" +
+ " [" +
+ " {\"key\": \"A\"}" +
+ " ]" +
+ "}"
+ );
assertThat(response.outputAsString()).containsOnlyOnce("name2");
}
private PluginDownloader pluginDownloader = mock(PluginDownloader.class);
private ServerPluginJarsInstaller serverPluginJarsInstaller = mock(ServerPluginJarsInstaller.class);
- private PendingPluginsWsAction underTest = new PendingPluginsWsAction(pluginDownloader, serverPluginJarsInstaller);
+ private PendingPluginsWsAction underTest = new PendingPluginsWsAction(pluginDownloader, serverPluginJarsInstaller, new PluginWSCommons());
private Request request = mock(Request.class);
private WsTester.TestResponse response = new WsTester.TestResponse();
" \"license\": \"GNU LGPL 3\"," +
" \"organizationName\": \"SonarSource\"," +
" \"organizationUrl\": \"http://www.sonarsource.com\"," +
- " \"homepageUrl\": \"http://redirect.sonarsource.com/plugins/scmgit.html\"," +
- " \"issueTrackerUrl\": \"http://jira.codehaus.org/browse/SONARSCGIT\"," +
+ " \"urls\": {" +
+ " \"homepage\": \"http://redirect.sonarsource.com/plugins/scmgit.html\"," +
+ " \"issueTracker\": \"http://jira.codehaus.org/browse/SONARSCGIT\"" +
+ " }," +
" \"artifact\": {" +
" \"name\": \"sonar-scm-git-plugin-1.0.jar\"" +
" }" +
" \"license\": \"GNU LGPL 3\"," +
" \"organizationName\": \"SonarSource\"," +
" \"organizationUrl\": \"http://www.sonarsource.com\"," +
- " \"homepageUrl\": \"http://redirect.sonarsource.com/plugins/scmgit.html\"," +
- " \"issueTrackerUrl\": \"http://jira.codehaus.org/browse/SONARSCGIT\"," +
+ " \"urls\": {" +
+ " \"homepage\": \"http://redirect.sonarsource.com/plugins/scmgit.html\"," +
+ " \"issueTracker\": \"http://jira.codehaus.org/browse/SONARSCGIT\"" +
+ " }," +
" \"artifact\": {" +
" \"name\": \"sonar-scm-git-plugin-1.0.jar\"" +
" }" +
@Test
public void removing_plugin_are_sorted_and_unique() throws Exception {
when(serverPluginJarsInstaller.getUninstalledPlugins()).thenReturn(of(
- PLUGIN_2_2,
- PLUGIN_2_1,
- PLUGIN_2_2,
- PLUGIN_0_0
- ));
+ PLUGIN_2_2,
+ PLUGIN_2_1,
+ PLUGIN_2_2,
+ PLUGIN_0_0
+ ));
underTest.handle(request, response);
" \"installing\": []," +
" \"removing\": " +
" [" +
- " {" +
- " \"key\": \"key0\"," +
- " \"name\": \"name0\"," +
- " }," +
- " {" +
- " \"key\": \"key1\"," +
- " \"name\": \"name2\"," +
- " }," +
- " {" +
- " \"key\": \"key2\"," +
- " \"name\": \"name2\"," +
- " }" +
+ " {" +
+ " \"key\": \"key0\"," +
+ " \"name\": \"name0\"," +
+ " }," +
+ " {" +
+ " \"key\": \"key1\"," +
+ " \"name\": \"name2\"," +
+ " }," +
+ " {" +
+ " \"key\": \"key2\"," +
+ " \"name\": \"name2\"," +
+ " }" +
" ]" +
"}"
);
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.server.plugins.ws;
+
+import org.junit.Test;
+import org.sonar.api.utils.text.JsonWriter;
+import org.sonar.core.plugins.DefaultPluginMetadata;
+import org.sonar.server.ws.WsTester;
+
+import java.io.File;
+
+import static org.sonar.core.plugins.DefaultPluginMetadata.create;
+import static org.sonar.test.JsonAssert.assertJson;
+
+public class PluginWSCommonsTest {
+ public static final DefaultPluginMetadata GIT_PLUGIN_METADATA = create("scmgit")
+ .setName("Git")
+ .setDescription("Git SCM Provider.")
+ .setVersion("1.0")
+ .setLicense("GNU LGPL 3")
+ .setOrganization("SonarSource")
+ .setOrganizationUrl("http://www.sonarsource.com")
+ .setHomepage("http://redirect.sonarsource.com/plugins/scmgit.html")
+ .setIssueTrackerUrl("http://jira.codehaus.org/browse/SONARSCGIT")
+ .setFile(new File("/home/user/sonar-scm-git-plugin-1.0.jar"));
+
+ private WsTester.TestResponse response = new WsTester.TestResponse();
+ private JsonWriter jsonWriter = response.newJsonWriter();
+ private PluginWSCommons underTest = new PluginWSCommons();
+
+ @Test
+ public void verify_properties_written_by_writePluginMetadata() throws Exception {
+ underTest.writePluginMetadata(jsonWriter, GIT_PLUGIN_METADATA);
+
+ jsonWriter.close();
+ assertJson(response.outputAsString()).setStrictArrayOrder(true).isSimilarTo("{" +
+ " \"key\": \"scmgit\"," +
+ " \"name\": \"Git\"," +
+ " \"description\": \"Git SCM Provider.\"," +
+ " \"version\": \"1.0\"," +
+ " \"license\": \"GNU LGPL 3\"," +
+ " \"organizationName\": \"SonarSource\"," +
+ " \"organizationUrl\": \"http://www.sonarsource.com\"," +
+ " \"urls\": {" +
+ " \"homepage\": \"http://redirect.sonarsource.com/plugins/scmgit.html\"," +
+ " \"issueTracker\": \"http://jira.codehaus.org/browse/SONARSCGIT\"" +
+ " }," +
+ " \"artifact\": {" +
+ " \"name\": \"sonar-scm-git-plugin-1.0.jar\"" +
+ " }" +
+ "}");
+ }
+
+ @Test
+ public void verify_properties_written_by_writeMetadata() throws Exception {
+ jsonWriter.beginObject();
+ underTest.writeMetadata(jsonWriter, GIT_PLUGIN_METADATA);
+ jsonWriter.endObject();
+
+ jsonWriter.close();
+ assertJson(response.outputAsString()).setStrictArrayOrder(true).isSimilarTo("{" +
+ " \"key\": \"scmgit\"," +
+ " \"name\": \"Git\"," +
+ " \"description\": \"Git SCM Provider.\"," +
+ " \"version\": \"1.0\"," +
+ " \"license\": \"GNU LGPL 3\"," +
+ " \"organizationName\": \"SonarSource\"," +
+ " \"organizationUrl\": \"http://www.sonarsource.com\"," +
+ "}");
+ }
+
+ @Test
+ public void verify_properties_written_by_writeUrls() throws Exception {
+ jsonWriter.beginObject();
+ underTest.writeUrls(jsonWriter, GIT_PLUGIN_METADATA);
+ jsonWriter.endObject();
+
+ jsonWriter.close();
+ assertJson(response.outputAsString()).setStrictArrayOrder(true).isSimilarTo("{" +
+ " \"urls\": {" +
+ " \"homepage\": \"http://redirect.sonarsource.com/plugins/scmgit.html\"," +
+ " \"issueTracker\": \"http://jira.codehaus.org/browse/SONARSCGIT\"" +
+ " }," +
+ "}");
+ }
+
+ @Test
+ public void writeArtifact_supports_null_file() throws Exception {
+ jsonWriter.beginObject();
+ underTest.writeArtifact(jsonWriter, DefaultPluginMetadata.create("key"));
+ jsonWriter.endObject();
+
+ jsonWriter.close();
+ assertJson(response.outputAsString()).setStrictArrayOrder(true).isSimilarTo("{}");
+ }
+
+ @Test
+ public void writeArtifact_writes_artifact_object_and_file_name() throws Exception {
+ jsonWriter.beginObject();
+ underTest.writeArtifact(jsonWriter, GIT_PLUGIN_METADATA);
+ jsonWriter.endObject();
+
+ jsonWriter.close();
+ assertJson(response.outputAsString()).setStrictArrayOrder(true).isSimilarTo("{" +
+ " \"artifact\": {" +
+ " \"name\": \"sonar-scm-git-plugin-1.0.jar\"" +
+ " }" +
+ "}");
+ }
+}
\ No newline at end of file