aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server/src
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2014-03-18 09:34:41 +0100
committerJulien Lancelot <julien.lancelot@sonarsource.com>2014-03-18 10:29:58 +0100
commit8c7b10b6bf2712e1d7201ebd025aed36fad7ead6 (patch)
tree9f6d5337082c13e7e3e7484cd36fd45ab7ef1d9b /sonar-server/src
parent496178d4de56ac80035f8ddf580405f4bb3dd8ec (diff)
downloadsonarqube-8c7b10b6bf2712e1d7201ebd025aed36fad7ead6.tar.gz
sonarqube-8c7b10b6bf2712e1d7201ebd025aed36fad7ead6.zip
SONAR-5056 Refactoring of DebtModelService to have a clean dedicated server side API of debt
Diffstat (limited to 'sonar-server/src')
-rw-r--r--sonar-server/src/main/java/org/sonar/server/debt/DebtModelService.java81
-rw-r--r--sonar-server/src/main/java/org/sonar/server/debt/DebtService.java56
-rw-r--r--sonar-server/src/main/java/org/sonar/server/issue/ws/IssueShowWsHandler.java18
-rw-r--r--sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java104
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/controllers/issue_controller.rb4
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/models/internal.rb2
-rw-r--r--sonar-server/src/test/java/org/sonar/server/debt/DebtModelServiceTest.java88
-rw-r--r--sonar-server/src/test/java/org/sonar/server/debt/DebtServiceTest.java65
-rw-r--r--sonar-server/src/test/java/org/sonar/server/issue/ws/IssueShowWsHandlerTest.java24
9 files changed, 204 insertions, 238 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/debt/DebtModelService.java b/sonar-server/src/main/java/org/sonar/server/debt/DebtModelService.java
new file mode 100644
index 00000000000..a5a32807add
--- /dev/null
+++ b/sonar-server/src/main/java/org/sonar/server/debt/DebtModelService.java
@@ -0,0 +1,81 @@
+/*
+ * 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.debt;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
+import org.sonar.api.server.debt.DebtCharacteristic;
+import org.sonar.api.server.debt.DebtModel;
+import org.sonar.api.server.debt.internal.DefaultDebtCharacteristic;
+import org.sonar.core.technicaldebt.db.CharacteristicDao;
+import org.sonar.core.technicaldebt.db.CharacteristicDto;
+
+import javax.annotation.CheckForNull;
+
+import java.util.Collection;
+import java.util.List;
+
+import static com.google.common.collect.Lists.newArrayList;
+
+/**
+ * Used through ruby code <pre>Internal.debt</pre>
+ */
+public class DebtModelService implements DebtModel {
+
+ private final CharacteristicDao dao;
+
+ public DebtModelService(CharacteristicDao dao) {
+ this.dao = dao;
+ }
+
+ public List<DebtCharacteristic> rootCharacteristics() {
+ return toCharacteristics(dao.selectEnabledRootCharacteristics());
+ }
+
+ public List<DebtCharacteristic> characteristics() {
+ return toCharacteristics(dao.selectEnabledCharacteristics());
+ }
+
+ @CheckForNull
+ public DebtCharacteristic characteristicById(int id) {
+ CharacteristicDto dto = dao.selectById(id);
+ return dto != null ? toCharacteristic(dto) : null;
+ }
+
+ private static List<DebtCharacteristic> toCharacteristics(Collection<CharacteristicDto> dtos) {
+ return newArrayList(Iterables.transform(dtos, new Function<CharacteristicDto, DebtCharacteristic>() {
+ @Override
+ public DebtCharacteristic apply(CharacteristicDto input) {
+ return toCharacteristic(input);
+ }
+ }));
+ }
+
+ private static DebtCharacteristic toCharacteristic(CharacteristicDto dto) {
+ return new DefaultDebtCharacteristic()
+ .setId(dto.getId())
+ .setKey(dto.getKey())
+ .setName(dto.getName())
+ .setOrder(dto.getOrder())
+ .setParentId(dto.getParentId());
+ }
+
+}
diff --git a/sonar-server/src/main/java/org/sonar/server/debt/DebtService.java b/sonar-server/src/main/java/org/sonar/server/debt/DebtService.java
deleted file mode 100644
index 4e5a84ce7d6..00000000000
--- a/sonar-server/src/main/java/org/sonar/server/debt/DebtService.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.debt;
-
-import org.sonar.api.ServerComponent;
-import org.sonar.api.technicaldebt.server.Characteristic;
-import org.sonar.core.technicaldebt.DefaultTechnicalDebtManager;
-
-import javax.annotation.CheckForNull;
-
-import java.util.List;
-
-/**
- * Used through ruby code <pre>Internal.debt</pre>
- */
-public class DebtService implements ServerComponent {
-
- private final DefaultTechnicalDebtManager finder;
-
- public DebtService(DefaultTechnicalDebtManager finder) {
- this.finder = finder;
- }
-
- public List<Characteristic> findRootCharacteristics() {
- return finder.findRootCharacteristics();
- }
-
- @CheckForNull
- public Characteristic findRequirementByRuleId(int ruleId) {
- return finder.findRequirementByRuleId(ruleId);
- }
-
- @CheckForNull
- public Characteristic findCharacteristic(int id) {
- return finder.findCharacteristicById(id);
- }
-
-}
diff --git a/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueShowWsHandler.java b/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueShowWsHandler.java
index b3a1316ae42..e41a035ea08 100644
--- a/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueShowWsHandler.java
+++ b/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueShowWsHandler.java
@@ -27,10 +27,11 @@ import org.sonar.api.issue.*;
import org.sonar.api.issue.action.Action;
import org.sonar.api.issue.internal.DefaultIssue;
import org.sonar.api.issue.internal.FieldDiffs;
+import org.sonar.api.server.debt.DebtCharacteristic;
+import org.sonar.api.server.debt.DebtModel;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
-import org.sonar.api.technicaldebt.server.Characteristic;
import org.sonar.api.user.User;
import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.Duration;
@@ -39,7 +40,6 @@ import org.sonar.api.utils.text.JsonWriter;
import org.sonar.api.web.UserRole;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.issue.workflow.Transition;
-import org.sonar.core.technicaldebt.DefaultTechnicalDebtManager;
import org.sonar.markdown.Markdown;
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.issue.ActionService;
@@ -63,17 +63,17 @@ public class IssueShowWsHandler implements RequestHandler {
private final IssueService issueService;
private final IssueChangelogService issueChangelogService;
private final ActionService actionService;
- private final DefaultTechnicalDebtManager technicalDebtManager;
+ private final DebtModel debtModel;
private final I18n i18n;
private final Durations durations;
public IssueShowWsHandler(IssueFinder issueFinder, IssueService issueService, IssueChangelogService issueChangelogService, ActionService actionService,
- DefaultTechnicalDebtManager technicalDebtManager, I18n i18n, Durations durations) {
+ DebtModel debtModel, I18n i18n, Durations durations) {
this.issueFinder = issueFinder;
this.issueService = issueService;
this.issueChangelogService = issueChangelogService;
this.actionService = actionService;
- this.technicalDebtManager = technicalDebtManager;
+ this.debtModel = debtModel;
this.i18n = i18n;
this.durations = durations;
}
@@ -190,18 +190,18 @@ public class IssueShowWsHandler implements RequestHandler {
private void addCharacteristics(IssueQueryResult result, DefaultIssue issue, JsonWriter json) {
Integer subCharacteristicId = result.rule(issue).getCharacteristicId() != null ? result.rule(issue).getCharacteristicId() : result.rule(issue).getDefaultCharacteristicId();
- Characteristic subCharacteristic = findCharacteristicById(subCharacteristicId);
+ DebtCharacteristic subCharacteristic = characteristicById(subCharacteristicId);
if (subCharacteristic != null) {
json.prop("subCharacteristic", subCharacteristic.name());
- Characteristic characteristic = findCharacteristicById(subCharacteristic.parentId());
+ DebtCharacteristic characteristic = characteristicById(subCharacteristic.parentId());
json.prop("characteristic", characteristic != null ? characteristic.name() : null);
}
}
@CheckForNull
- private Characteristic findCharacteristicById(@Nullable Integer id) {
+ private DebtCharacteristic characteristicById(@Nullable Integer id) {
if (id != null) {
- return technicalDebtManager.findCharacteristicById(id);
+ return debtModel.characteristicById(id);
}
return null;
}
diff --git a/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java b/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java
index 4b208704a7e..87e242e4ae2 100644
--- a/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java
+++ b/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java
@@ -52,13 +52,7 @@ import org.sonar.core.measure.MeasureFilterFactory;
import org.sonar.core.metric.DefaultMetricFinder;
import org.sonar.core.notification.DefaultNotificationManager;
import org.sonar.core.permission.PermissionFacade;
-import org.sonar.core.persistence.DaoUtils;
-import org.sonar.core.persistence.DatabaseVersion;
-import org.sonar.core.persistence.DefaultDatabase;
-import org.sonar.core.persistence.MyBatis;
-import org.sonar.core.persistence.PreviewDatabaseFactory;
-import org.sonar.core.persistence.SemaphoreUpdater;
-import org.sonar.core.persistence.SemaphoresImpl;
+import org.sonar.core.persistence.*;
import org.sonar.core.preview.PreviewCache;
import org.sonar.core.profiling.Profiling;
import org.sonar.core.purge.PurgeProfiler;
@@ -67,7 +61,6 @@ import org.sonar.core.qualitygate.db.QualityGateConditionDao;
import org.sonar.core.qualitygate.db.QualityGateDao;
import org.sonar.core.resource.DefaultResourcePermissions;
import org.sonar.core.rule.DefaultRuleFinder;
-import org.sonar.core.technicaldebt.DefaultTechnicalDebtManager;
import org.sonar.core.technicaldebt.TechnicalDebtModelRepository;
import org.sonar.core.technicaldebt.TechnicalDebtModelSynchronizer;
import org.sonar.core.technicaldebt.TechnicalDebtXMLImporter;
@@ -90,28 +83,12 @@ import org.sonar.server.db.EmbeddedDatabaseFactory;
import org.sonar.server.db.migrations.DatabaseMigrations;
import org.sonar.server.db.migrations.DatabaseMigrator;
import org.sonar.server.debt.DebtCharacteristicsXMLImporter;
+import org.sonar.server.debt.DebtModelService;
import org.sonar.server.debt.DebtModelSynchronizer;
import org.sonar.server.debt.DebtRulesXMLImporter;
-import org.sonar.server.debt.DebtService;
import org.sonar.server.es.ESIndex;
import org.sonar.server.es.ESNode;
-import org.sonar.server.issue.ActionPlanService;
-import org.sonar.server.issue.ActionService;
-import org.sonar.server.issue.AssignAction;
-import org.sonar.server.issue.CommentAction;
-import org.sonar.server.issue.DefaultIssueFinder;
-import org.sonar.server.issue.InternalRubyIssueService;
-import org.sonar.server.issue.IssueBulkChangeService;
-import org.sonar.server.issue.IssueChangelogFormatter;
-import org.sonar.server.issue.IssueChangelogService;
-import org.sonar.server.issue.IssueCommentService;
-import org.sonar.server.issue.IssueService;
-import org.sonar.server.issue.IssueStatsFinder;
-import org.sonar.server.issue.PlanAction;
-import org.sonar.server.issue.PublicRubyIssueService;
-import org.sonar.server.issue.ServerIssueStorage;
-import org.sonar.server.issue.SetSeverityAction;
-import org.sonar.server.issue.TransitionAction;
+import org.sonar.server.issue.*;
import org.sonar.server.issue.filter.IssueFilterService;
import org.sonar.server.issue.filter.IssueFilterWs;
import org.sonar.server.issue.ws.IssueShowWsHandler;
@@ -123,87 +100,29 @@ import org.sonar.server.permission.InternalPermissionTemplateService;
import org.sonar.server.permission.PermissionFinder;
import org.sonar.server.platform.ws.PlatformWs;
import org.sonar.server.platform.ws.RestartHandler;
-import org.sonar.server.plugins.InstalledPluginReferentialFactory;
-import org.sonar.server.plugins.PluginDownloader;
-import org.sonar.server.plugins.ServerExtensionInstaller;
-import org.sonar.server.plugins.ServerPluginJarInstaller;
-import org.sonar.server.plugins.ServerPluginJarsInstaller;
-import org.sonar.server.plugins.ServerPluginRepository;
-import org.sonar.server.plugins.UpdateCenterClient;
-import org.sonar.server.plugins.UpdateCenterMatrixFactory;
+import org.sonar.server.plugins.*;
import org.sonar.server.qualitygate.QgateProjectFinder;
import org.sonar.server.qualitygate.QualityGates;
import org.sonar.server.qualitygate.ws.QgateAppHandler;
import org.sonar.server.qualitygate.ws.QualityGatesWs;
-import org.sonar.server.qualityprofile.ESActiveRule;
-import org.sonar.server.qualityprofile.ProfilesManager;
-import org.sonar.server.qualityprofile.QProfileActiveRuleOperations;
-import org.sonar.server.qualityprofile.QProfileBackup;
-import org.sonar.server.qualityprofile.QProfileLookup;
-import org.sonar.server.qualityprofile.QProfileOperations;
-import org.sonar.server.qualityprofile.QProfileProjectLookup;
-import org.sonar.server.qualityprofile.QProfileProjectOperations;
-import org.sonar.server.qualityprofile.QProfileRepositoryExporter;
-import org.sonar.server.qualityprofile.QProfileRuleLookup;
-import org.sonar.server.qualityprofile.QProfiles;
-import org.sonar.server.rule.DeprecatedRulesDefinition;
-import org.sonar.server.rule.ESRuleTags;
-import org.sonar.server.rule.RubyRuleService;
-import org.sonar.server.rule.RuleDefinitionsLoader;
-import org.sonar.server.rule.RuleOperations;
-import org.sonar.server.rule.RuleRegistration;
-import org.sonar.server.rule.RuleRegistry;
-import org.sonar.server.rule.RuleRepositories;
-import org.sonar.server.rule.RuleTagLookup;
-import org.sonar.server.rule.RuleTagOperations;
-import org.sonar.server.rule.RuleTags;
-import org.sonar.server.rule.Rules;
-import org.sonar.server.rule.ws.AddTagsWsHandler;
-import org.sonar.server.rule.ws.RemoveTagsWsHandler;
-import org.sonar.server.rule.ws.RuleSearchWsHandler;
-import org.sonar.server.rule.ws.RuleShowWsHandler;
-import org.sonar.server.rule.ws.RuleTagsWs;
-import org.sonar.server.rule.ws.RulesWs;
+import org.sonar.server.qualityprofile.*;
+import org.sonar.server.rule.*;
+import org.sonar.server.rule.ws.*;
import org.sonar.server.source.CodeColorizers;
import org.sonar.server.source.DeprecatedSourceDecorator;
import org.sonar.server.source.HtmlSourceDecorator;
import org.sonar.server.source.SourceService;
import org.sonar.server.source.ws.SourcesShowWsHandler;
import org.sonar.server.source.ws.SourcesWs;
-import org.sonar.server.startup.CleanPreviewAnalysisCache;
-import org.sonar.server.startup.CopyRequirementsFromCharacteristicsToRules;
-import org.sonar.server.startup.GenerateBootstrapIndex;
-import org.sonar.server.startup.GeneratePluginIndex;
-import org.sonar.server.startup.GwtPublisher;
-import org.sonar.server.startup.JdbcDriverDeployer;
-import org.sonar.server.startup.LogServerId;
-import org.sonar.server.startup.RegisterDebtModel;
-import org.sonar.server.startup.RegisterMetrics;
-import org.sonar.server.startup.RegisterNewDashboards;
-import org.sonar.server.startup.RegisterNewMeasureFilters;
-import org.sonar.server.startup.RegisterNewProfiles;
-import org.sonar.server.startup.RegisterPermissionTemplates;
-import org.sonar.server.startup.RegisterServletFilters;
-import org.sonar.server.startup.RenameDeprecatedPropertyKeys;
-import org.sonar.server.startup.ServerMetadataPersister;
+import org.sonar.server.startup.*;
import org.sonar.server.text.MacroInterpreter;
import org.sonar.server.text.RubyTextService;
import org.sonar.server.ui.JRubyI18n;
import org.sonar.server.ui.JRubyProfiling;
import org.sonar.server.ui.PageDecorations;
import org.sonar.server.ui.Views;
-import org.sonar.server.user.DefaultUserService;
-import org.sonar.server.user.GroupMembershipFinder;
-import org.sonar.server.user.GroupMembershipService;
-import org.sonar.server.user.NewUserNotifier;
-import org.sonar.server.user.SecurityRealmFactory;
-import org.sonar.server.util.BooleanTypeValidation;
-import org.sonar.server.util.FloatTypeValidation;
-import org.sonar.server.util.IntegerTypeValidation;
-import org.sonar.server.util.StringListTypeValidation;
-import org.sonar.server.util.StringTypeValidation;
-import org.sonar.server.util.TextTypeValidation;
-import org.sonar.server.util.TypeValidations;
+import org.sonar.server.user.*;
+import org.sonar.server.util.*;
import org.sonar.server.ws.ListingWs;
import org.sonar.server.ws.WebServiceEngine;
@@ -428,14 +347,13 @@ class ServerComponents {
pico.addSingleton(TransitionAction.class);
// technical debt
- pico.addSingleton(DebtService.class);
+ pico.addSingleton(DebtModelService.class);
pico.addSingleton(TechnicalDebtModelSynchronizer.class);
pico.addSingleton(DebtModelSynchronizer.class);
pico.addSingleton(TechnicalDebtModelRepository.class);
pico.addSingleton(TechnicalDebtXMLImporter.class);
pico.addSingleton(DebtRulesXMLImporter.class);
pico.addSingleton(DebtCharacteristicsXMLImporter.class);
- pico.addSingleton(DefaultTechnicalDebtManager.class);
// source
pico.addSingleton(HtmlSourceDecorator.class);
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/issue_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/issue_controller.rb
index 2df6b11d23d..43542de7520 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/issue_controller.rb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/issue_controller.rb
@@ -189,8 +189,8 @@ class IssueController < ApplicationController
@rule = Rule.first(:conditions => ['plugin_name=? and plugin_rule_key=?', rule_key[0], rule_key[1]])
characteristic_id = @rule.characteristic_id || @rule.default_characteristic_id
if characteristic_id
- @characteristic = Internal.debt.findCharacteristic(characteristic_id)
- @root_characteristic = Internal.debt.findCharacteristic(@characteristic.parentId())
+ @characteristic = Internal.debt.characteristicById(characteristic_id)
+ @root_characteristic = Internal.debt.characteristicById(@characteristic.parentId())
end
render :partial => 'issue/rule'
end
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/models/internal.rb b/sonar-server/src/main/webapp/WEB-INF/app/models/internal.rb
index 15493435126..ae569edb0c1 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/models/internal.rb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/models/internal.rb
@@ -55,7 +55,7 @@ class Internal
end
def self.debt
- component(Java::OrgSonarServerDebt::DebtService.java_class)
+ component(Java::OrgSonarServerDebt::DebtModelService.java_class)
end
def self.profiling
diff --git a/sonar-server/src/test/java/org/sonar/server/debt/DebtModelServiceTest.java b/sonar-server/src/test/java/org/sonar/server/debt/DebtModelServiceTest.java
new file mode 100644
index 00000000000..8a59e05b387
--- /dev/null
+++ b/sonar-server/src/test/java/org/sonar/server/debt/DebtModelServiceTest.java
@@ -0,0 +1,88 @@
+/*
+ * 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.debt;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.sonar.api.server.debt.DebtCharacteristic;
+import org.sonar.core.technicaldebt.db.CharacteristicDao;
+import org.sonar.core.technicaldebt.db.CharacteristicDto;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static org.fest.assertions.Assertions.assertThat;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public class DebtModelServiceTest {
+
+ @Mock
+ CharacteristicDao dao;
+
+ DebtModelService service;
+
+ @Before
+ public void setUp() throws Exception {
+ service = new DebtModelService(dao);
+ }
+
+ @Test
+ public void find_root_characteristics() {
+ CharacteristicDto dto = new CharacteristicDto()
+ .setId(1)
+ .setKey("MEMORY_EFFICIENCY")
+ .setName("Memory use");
+ when(dao.selectEnabledRootCharacteristics()).thenReturn(newArrayList(dto));
+ assertThat(service.rootCharacteristics()).hasSize(1);
+ }
+
+ @Test
+ public void find_characteristics() {
+ CharacteristicDto dto = new CharacteristicDto()
+ .setId(1)
+ .setKey("MEMORY_EFFICIENCY")
+ .setName("Memory use");
+ when(dao.selectEnabledCharacteristics()).thenReturn(newArrayList(dto));
+ assertThat(service.characteristics()).hasSize(1);
+ }
+
+ @Test
+ public void find_characteristic_by_id() {
+ CharacteristicDto dto = new CharacteristicDto()
+ .setId(1)
+ .setKey("MEMORY_EFFICIENCY")
+ .setName("Memory use")
+ .setParentId(2)
+ .setOrder(1);
+ when(dao.selectById(1)).thenReturn(dto);
+
+ DebtCharacteristic characteristic = service.characteristicById(1);
+ assertThat(characteristic.id()).isEqualTo(1);
+ assertThat(characteristic.key()).isEqualTo("MEMORY_EFFICIENCY");
+ assertThat(characteristic.name()).isEqualTo("Memory use");
+ assertThat(characteristic.parentId()).isEqualTo(2);
+ assertThat(characteristic.order()).isEqualTo(1);
+
+ assertThat(service.characteristicById(10)).isNull();
+ }
+
+}
diff --git a/sonar-server/src/test/java/org/sonar/server/debt/DebtServiceTest.java b/sonar-server/src/test/java/org/sonar/server/debt/DebtServiceTest.java
deleted file mode 100644
index d9c3070b051..00000000000
--- a/sonar-server/src/test/java/org/sonar/server/debt/DebtServiceTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * 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.debt;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.sonar.api.technicaldebt.server.Characteristic;
-import org.sonar.api.technicaldebt.server.internal.DefaultCharacteristic;
-import org.sonar.core.technicaldebt.DefaultTechnicalDebtManager;
-
-import java.util.List;
-
-import static com.google.common.collect.Lists.newArrayList;
-import static org.fest.assertions.Assertions.assertThat;
-import static org.mockito.Mockito.*;
-
-public class DebtServiceTest {
-
- DefaultTechnicalDebtManager finder = mock(DefaultTechnicalDebtManager.class);
-
- DebtService service;
-
- @Before
- public void setUp() throws Exception {
- service = new DebtService(finder);
- }
-
- @Test
- public void find_root_characteristics() {
- List<Characteristic> rootCharacteristics = newArrayList();
- when(finder.findRootCharacteristics()).thenReturn(rootCharacteristics);
- assertThat(service.findRootCharacteristics()).isEqualTo(rootCharacteristics);
- }
-
- @Test
- public void find_requirement_by_rule_id() {
- service.findRequirementByRuleId(1);
- verify(finder).findRequirementByRuleId(1);
- }
-
- @Test
- public void find_characteristic() {
- Characteristic characteristic = new DefaultCharacteristic();
- when(finder.findCharacteristicById(1)).thenReturn(characteristic);
- assertThat(service.findCharacteristic(1)).isEqualTo(characteristic);
- }
-
-}
diff --git a/sonar-server/src/test/java/org/sonar/server/issue/ws/IssueShowWsHandlerTest.java b/sonar-server/src/test/java/org/sonar/server/issue/ws/IssueShowWsHandlerTest.java
index b27ded9403b..1624b8704f0 100644
--- a/sonar-server/src/test/java/org/sonar/server/issue/ws/IssueShowWsHandlerTest.java
+++ b/sonar-server/src/test/java/org/sonar/server/issue/ws/IssueShowWsHandlerTest.java
@@ -37,8 +37,9 @@ import org.sonar.api.issue.internal.DefaultIssueComment;
import org.sonar.api.issue.internal.FieldDiffs;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rules.Rule;
+import org.sonar.api.server.debt.DebtModel;
+import org.sonar.api.server.debt.internal.DefaultDebtCharacteristic;
import org.sonar.api.server.ws.WsTester;
-import org.sonar.api.technicaldebt.server.internal.DefaultCharacteristic;
import org.sonar.api.user.User;
import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.Duration;
@@ -48,7 +49,6 @@ import org.sonar.core.component.ComponentDto;
import org.sonar.core.issue.DefaultActionPlan;
import org.sonar.core.issue.DefaultIssueQueryResult;
import org.sonar.core.issue.workflow.Transition;
-import org.sonar.core.technicaldebt.DefaultTechnicalDebtManager;
import org.sonar.core.user.DefaultUser;
import org.sonar.server.issue.ActionService;
import org.sonar.server.issue.IssueChangelog;
@@ -84,7 +84,7 @@ public class IssueShowWsHandlerTest {
ActionService actionService;
@Mock
- DefaultTechnicalDebtManager technicalDebtManager;
+ DebtModel debtModel;
@Mock
I18n i18n;
@@ -113,7 +113,7 @@ public class IssueShowWsHandlerTest {
when(i18n.message(any(Locale.class), eq("created"), eq((String) null))).thenReturn("Created");
- tester = new WsTester(new IssuesWs(new IssueShowWsHandler(issueFinder, issueService, issueChangelogService, actionService, technicalDebtManager, i18n, durations)));
+ tester = new WsTester(new IssuesWs(new IssueShowWsHandler(issueFinder, issueService, issueChangelogService, actionService, debtModel, i18n, durations)));
}
@Test
@@ -323,8 +323,8 @@ public class IssueShowWsHandlerTest {
issues.add(issue);
result.rule(issue).setCharacteristicId(2);
- when(technicalDebtManager.findCharacteristicById(1)).thenReturn(new DefaultCharacteristic().setId(1).setName("Maintainability"));
- when(technicalDebtManager.findCharacteristicById(2)).thenReturn(new DefaultCharacteristic().setId(2).setName("Readability").setParentId(1));
+ when(debtModel.characteristicById(1)).thenReturn(new DefaultDebtCharacteristic().setId(1).setName("Maintainability"));
+ when(debtModel.characteristicById(2)).thenReturn(new DefaultDebtCharacteristic().setId(2).setName("Readability").setParentId(1));
MockUserSession.set();
WsTester.TestRequest request = tester.newRequest("show").setParam("key", issue.key());
@@ -337,8 +337,8 @@ public class IssueShowWsHandlerTest {
issues.add(issue);
result.rule(issue).setDefaultCharacteristicId(2);
- when(technicalDebtManager.findCharacteristicById(1)).thenReturn(new DefaultCharacteristic().setId(1).setName("Maintainability"));
- when(technicalDebtManager.findCharacteristicById(2)).thenReturn(new DefaultCharacteristic().setId(2).setName("Readability").setParentId(1));
+ when(debtModel.characteristicById(1)).thenReturn(new DefaultDebtCharacteristic().setId(1).setName("Maintainability"));
+ when(debtModel.characteristicById(2)).thenReturn(new DefaultDebtCharacteristic().setId(2).setName("Readability").setParentId(1));
MockUserSession.set();
WsTester.TestRequest request = tester.newRequest("show").setParam("key", issue.key());
@@ -351,12 +351,12 @@ public class IssueShowWsHandlerTest {
issues.add(issue);
result.rule(issue).setCharacteristicId(2);
- when(technicalDebtManager.findCharacteristicById(1)).thenReturn(new DefaultCharacteristic().setId(1).setName("Maintainability"));
- when(technicalDebtManager.findCharacteristicById(2)).thenReturn(new DefaultCharacteristic().setId(2).setName("Readability").setParentId(1));
+ when(debtModel.characteristicById(1)).thenReturn(new DefaultDebtCharacteristic().setId(1).setName("Maintainability"));
+ when(debtModel.characteristicById(2)).thenReturn(new DefaultDebtCharacteristic().setId(2).setName("Readability").setParentId(1));
result.rule(issue).setDefaultCharacteristicId(20);
- when(technicalDebtManager.findCharacteristicById(10)).thenReturn(new DefaultCharacteristic().setId(10).setName("Default Maintainability"));
- when(technicalDebtManager.findCharacteristicById(20)).thenReturn(new DefaultCharacteristic().setId(20).setName("Default Readability").setParentId(10));
+ when(debtModel.characteristicById(10)).thenReturn(new DefaultDebtCharacteristic().setId(10).setName("Default Maintainability"));
+ when(debtModel.characteristicById(20)).thenReturn(new DefaultDebtCharacteristic().setId(20).setName("Default Readability").setParentId(10));
MockUserSession.set();
WsTester.TestRequest request = tester.newRequest("show").setParam("key", issue.key());