also now use a Component as argument of the repository method getSettings instead of a String
in addition, new SettingsRepositoryImpl implementation can holds the properties of any component, not just the one of the root project
+++ /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.computation.component;
-
-import org.sonar.api.config.Settings;
-import org.sonar.server.properties.ProjectSettingsFactory;
-
-/**
- * Lazy loading of project settings.
- *
- * TODO Should be refactored to be able to load settings from any components.
- */
-public class ProjectSettingsRepository {
-
- private final ProjectSettingsFactory projectSettingsFactory;
-
- private Settings projectSettings;
-
- public ProjectSettingsRepository(ProjectSettingsFactory projectSettingsFactory) {
- this.projectSettingsFactory = projectSettingsFactory;
- }
-
- public Settings getProjectSettings(String projectKey){
- if (projectSettings == null) {
- projectSettings = projectSettingsFactory.newProjectSettings(projectKey);
- }
- return projectSettings;
- }
-
-}
--- /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.computation.component;
+
+import org.sonar.api.config.Settings;
+
+/**
+ * Repository of component settings.
+ */
+public interface SettingsRepository {
+ /**
+ * Returns the settings for the specified Component.
+ */
+ Settings getSettings(Component component);
+}
--- /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.computation.component;
+
+import java.util.Collection;
+import java.util.Map;
+import org.sonar.api.config.Settings;
+import org.sonar.server.properties.ProjectSettingsFactory;
+import org.sonar.server.util.cache.CacheLoader;
+import org.sonar.server.util.cache.MemoryCache;
+
+/**
+ * Repository of component settings implementation based on a memory cache.
+ */
+public class SettingsRepositoryImpl implements SettingsRepository {
+
+ private final ProjectSettingsFactory projectSettingsFactory;
+ private final MemoryCache<String, Settings> cache = new MemoryCache<>(new CacheLoader<String, Settings>() {
+ @Override
+ public Settings load(String key) {
+ return projectSettingsFactory.newProjectSettings(key);
+ }
+
+ @Override
+ public Map<String, Settings> loadAll(Collection<? extends String> keys) {
+ throw new UnsupportedOperationException("loadAll is not supported");
+ }
+ });
+
+ public SettingsRepositoryImpl(ProjectSettingsFactory projectSettingsFactory) {
+ this.projectSettingsFactory = projectSettingsFactory;
+ }
+
+ @Override
+ public Settings getSettings(Component component){
+ return cache.get(component.getKey());
+ }
+
+}
import org.sonar.server.computation.batch.BatchReportDirectoryHolderImpl;
import org.sonar.server.computation.batch.BatchReportReaderImpl;
import org.sonar.server.computation.component.DbIdsRepositoryImpl;
-import org.sonar.server.computation.component.ProjectSettingsRepository;
import org.sonar.server.computation.component.ReportTreeRootHolderImpl;
+import org.sonar.server.computation.component.SettingsRepositoryImpl;
import org.sonar.server.computation.debt.DebtModelHolderImpl;
import org.sonar.server.computation.event.EventRepositoryImpl;
import org.sonar.server.computation.issue.BaseIssuesLoader;
LanguageRepositoryImpl.class,
MeasureRepositoryImpl.class,
EventRepositoryImpl.class,
- ProjectSettingsRepository.class,
+ SettingsRepositoryImpl.class,
DbIdsRepositoryImpl.class,
QualityGateServiceImpl.class,
EvaluationResultTextConverterImpl.class,
import org.sonar.api.CoreProperties;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
-import org.sonar.server.computation.component.ProjectSettingsRepository;
+import org.sonar.server.computation.component.SettingsRepository;
import org.sonar.server.computation.component.TreeRootHolder;
import org.sonar.server.user.index.UserDoc;
import org.sonar.server.user.index.UserIndex;
private final TreeRootHolder treeRootHolder;
private final UserIndex userIndex;
- private final ProjectSettingsRepository settings;
+ private final SettingsRepository settingsRepository;
private boolean loaded = false;
private String login = null;
- public DefaultAssignee(TreeRootHolder treeRootHolder, UserIndex userIndex, ProjectSettingsRepository settings) {
+ public DefaultAssignee(TreeRootHolder treeRootHolder, UserIndex userIndex, SettingsRepository settingsRepository) {
this.treeRootHolder = treeRootHolder;
this.userIndex = userIndex;
- this.settings = settings;
+ this.settingsRepository = settingsRepository;
}
@CheckForNull
public String getLogin() {
if (!loaded) {
- String configuredLogin = settings.getProjectSettings(treeRootHolder.getRoot().getKey()).getString(CoreProperties.DEFAULT_ISSUE_ASSIGNEE);
+ String configuredLogin = settingsRepository.getSettings(treeRootHolder.getRoot()).getString(CoreProperties.DEFAULT_ISSUE_ASSIGNEE);
if (!Strings.isNullOrEmpty(configuredLogin) && isValidLogin(configuredLogin)) {
this.login = configuredLogin;
}
package org.sonar.server.computation.measure;
import org.sonar.api.ce.measure.MeasureComputer;
-import org.sonar.server.computation.component.ProjectSettingsRepository;
+import org.sonar.server.computation.component.SettingsRepository;
import org.sonar.server.computation.component.TypeAwareVisitorAdapter;
import org.sonar.server.computation.measure.api.MeasureComputerImplementationContext;
import org.sonar.server.computation.metric.MetricRepository;
private final MetricRepository metricRepository;
private final MeasureRepository measureRepository;
- private final ProjectSettingsRepository settings;
+ private final SettingsRepository settings;
private final MeasureComputersHolder measureComputersHolder;
- public MeasureComputersVisitor(MetricRepository metricRepository, MeasureRepository measureRepository, ProjectSettingsRepository settings,
+ public MeasureComputersVisitor(MetricRepository metricRepository, MeasureRepository measureRepository, SettingsRepository settings,
MeasureComputersHolder measureComputersHolder) {
super(FILE, PRE_ORDER);
this.metricRepository = metricRepository;
import org.sonar.api.ce.measure.Measure;
import org.sonar.api.ce.measure.MeasureComputer;
import org.sonar.api.ce.measure.Settings;
-import org.sonar.server.computation.component.ProjectSettingsRepository;
+import org.sonar.server.computation.component.SettingsRepository;
import org.sonar.server.computation.measure.MeasureRepository;
import org.sonar.server.computation.metric.Metric;
import org.sonar.server.computation.metric.MetricRepository;
public class MeasureComputerImplementationContext implements MeasureComputer.Implementation.Context {
private final MeasureComputer measureComputer;
- private final ProjectSettingsRepository settings;
+ private final SettingsRepository settings;
private final MeasureRepository measureRepository;
private final MetricRepository metricRepository;
private final Set<String> allowedMetrics;
public MeasureComputerImplementationContext(org.sonar.server.computation.component.Component component, MeasureComputer measureComputer,
- ProjectSettingsRepository settings, MeasureRepository measureRepository, MetricRepository metricRepository) {
+ SettingsRepository settings, MeasureRepository measureRepository, MetricRepository metricRepository) {
this.measureComputer = measureComputer;
this.settings = settings;
this.internalComponent = component;
}
private org.sonar.api.config.Settings getComponentSettings(){
- return settings.getProjectSettings(internalComponent.getKey());
+ return settings.getSettings(internalComponent);
}
@Override
import org.sonar.db.purge.IdUuidPair;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.DbIdsRepository;
-import org.sonar.server.computation.component.ProjectSettingsRepository;
+import org.sonar.server.computation.component.SettingsRepository;
import org.sonar.server.computation.component.TreeRootHolder;
import org.sonar.db.DbClient;
private final DbClient dbClient;
private final DbIdsRepository dbIdsRepository;
private final TreeRootHolder treeRootHolder;
- private final ProjectSettingsRepository projectSettingsRepository;
+ private final SettingsRepository settingsRepository;
public PurgeDatastoresStep(DbClient dbClient, ProjectCleaner projectCleaner, DbIdsRepository dbIdsRepository, TreeRootHolder treeRootHolder,
- ProjectSettingsRepository projectSettingsRepository) {
+ SettingsRepository settingsRepository) {
this.projectCleaner = projectCleaner;
this.dbClient = dbClient;
this.dbIdsRepository = dbIdsRepository;
this.treeRootHolder = treeRootHolder;
- this.projectSettingsRepository = projectSettingsRepository;
+ this.settingsRepository = settingsRepository;
}
@Override
DbSession session = dbClient.openSession(true);
try {
Component project = treeRootHolder.getRoot();
- projectCleaner.purge(session, new IdUuidPair(dbIdsRepository.getComponentId(project), project.getUuid()), projectSettingsRepository.getProjectSettings(project.getKey()));
+ projectCleaner.purge(session, new IdUuidPair(dbIdsRepository.getComponentId(project), project.getUuid()), settingsRepository.getSettings(project));
session.commit();
} finally {
MyBatis.closeQuietly(session);
import org.sonar.server.computation.ReportQueue;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler;
-import org.sonar.server.computation.component.ProjectSettingsRepository;
+import org.sonar.server.computation.component.SettingsRepository;
import org.sonar.server.computation.component.TreeRootHolder;
import org.sonar.server.computation.qualitygate.MutableQualityGateHolder;
import org.sonar.server.computation.qualitygate.QualityGate;
private static final String PROPERTY_QUALITY_GATE = "sonar.qualitygate";
private final TreeRootHolder treeRootHolder;
- private final ProjectSettingsRepository projectSettingsRepository;
+ private final SettingsRepository settingsRepository;
private final QualityGateService qualityGateService;
private final MutableQualityGateHolder qualityGateHolder;
- public QualityGateLoadingStep(TreeRootHolder treeRootHolder, ProjectSettingsRepository projectSettingsRepository,
+ public QualityGateLoadingStep(TreeRootHolder treeRootHolder, SettingsRepository settingsRepository,
QualityGateService qualityGateService, MutableQualityGateHolder qualityGateHolder) {
this.treeRootHolder = treeRootHolder;
- this.projectSettingsRepository = projectSettingsRepository;
+ this.settingsRepository = settingsRepository;
this.qualityGateService = qualityGateService;
this.qualityGateHolder = qualityGateHolder;
}
private void executeForProject(Component project) {
String projectKey = project.getKey();
- Settings settings = projectSettingsRepository.getProjectSettings(projectKey);
+ Settings settings = settingsRepository.getSettings(project);
String qualityGateSetting = settings.getString(PROPERTY_QUALITY_GATE);
if (qualityGateSetting == null || StringUtils.isBlank(qualityGateSetting)) {
+++ /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.computation.component;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.sonar.api.config.Settings;
-import org.sonar.api.utils.System2;
-import org.sonar.db.DbClient;
-import org.sonar.db.DbSession;
-import org.sonar.db.DbTester;
-import org.sonar.db.component.ComponentDto;
-import org.sonar.db.property.PropertiesDao;
-import org.sonar.db.property.PropertyDto;
-import org.sonar.db.component.ComponentTesting;
-import org.sonar.server.properties.ProjectSettingsFactory;
-import org.sonar.test.DbTests;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-@Category(DbTests.class)
-public class ProjectSettingsRepositoryTest {
-
- private static final String PROJECT_KEY = "PROJECT_KEY";
-
- @Rule
- public final DbTester dbTester = DbTester.create(System2.INSTANCE);
-
- DbClient dbClient = dbTester.getDbClient();
-
- DbSession session;
-
- Settings globalSettings;
-
- ProjectSettingsRepository underTest;
-
- @Before
- public void createDao() {
- dbTester.truncateTables();
- globalSettings = new Settings();
- PropertiesDao propertiesDao = new PropertiesDao(dbTester.myBatis());
- session = dbClient.openSession(false);
- underTest = new ProjectSettingsRepository(new ProjectSettingsFactory(globalSettings, propertiesDao));
- }
-
- @After
- public void tearDown() {
- session.close();
- }
-
- @Test
- public void get_project_settings_from_global_settings() {
- globalSettings.setProperty("key", "value");
-
- Settings settings = underTest.getProjectSettings(PROJECT_KEY);
-
- assertThat(settings.getString("key")).isEqualTo("value");
- }
-
- @Test
- public void get_project_settings_from_db() {
- ComponentDto project = ComponentTesting.newProjectDto().setKey(PROJECT_KEY);
- dbClient.componentDao().insert(session, project);
- dbClient.propertiesDao().insertProperty(session, new PropertyDto().setResourceId(project.getId()).setKey("key").setValue("value"));
- session.commit();
-
- Settings settings = underTest.getProjectSettings(PROJECT_KEY);
-
- assertThat(settings.getString("key")).isEqualTo("value");
- }
-
- @Test
- public void call_twice_get_project_settings() {
- globalSettings.setProperty("key", "value");
-
- Settings settings = underTest.getProjectSettings(PROJECT_KEY);
- assertThat(settings.getString("key")).isEqualTo("value");
-
- settings = underTest.getProjectSettings(PROJECT_KEY);
- assertThat(settings.getString("key")).isEqualTo("value");
- }
-}
--- /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.computation.component;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.sonar.api.config.Settings;
+import org.sonar.api.utils.System2;
+import org.sonar.db.DbClient;
+import org.sonar.db.DbSession;
+import org.sonar.db.DbTester;
+import org.sonar.db.component.ComponentDto;
+import org.sonar.db.property.PropertiesDao;
+import org.sonar.db.property.PropertyDto;
+import org.sonar.db.component.ComponentTesting;
+import org.sonar.server.properties.ProjectSettingsFactory;
+import org.sonar.test.DbTests;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.sonar.server.computation.component.Component.Type.PROJECT;
+
+@Category(DbTests.class)
+public class SettingsRepositoryTest {
+
+ private static final Component ROOT = ReportComponent.builder(PROJECT, 1).setKey("ROOT").build();
+
+ @Rule
+ public final DbTester dbTester = DbTester.create(System2.INSTANCE);
+
+ DbClient dbClient = dbTester.getDbClient();
+
+ DbSession session;
+
+ Settings globalSettings;
+
+ SettingsRepository underTest;
+
+ @Before
+ public void createDao() {
+ dbTester.truncateTables();
+ globalSettings = new Settings();
+ PropertiesDao propertiesDao = new PropertiesDao(dbTester.myBatis());
+ session = dbClient.openSession(false);
+ underTest = new SettingsRepositoryImpl(new ProjectSettingsFactory(globalSettings, propertiesDao));
+ }
+
+ @After
+ public void tearDown() {
+ session.close();
+ }
+
+ @Test
+ public void get_project_settings_from_global_settings() {
+ globalSettings.setProperty("key", "value");
+
+ Settings settings = underTest.getSettings(ROOT);
+
+ assertThat(settings.getString("key")).isEqualTo("value");
+ }
+
+ @Test
+ public void get_project_settings_from_db() {
+ ComponentDto project = ComponentTesting.newProjectDto().setKey(ROOT.getKey());
+ dbClient.componentDao().insert(session, project);
+ dbClient.propertiesDao().insertProperty(session, new PropertyDto().setResourceId(project.getId()).setKey("key").setValue("value"));
+ session.commit();
+
+ Settings settings = underTest.getSettings(ROOT);
+
+ assertThat(settings.getString("key")).isEqualTo("value");
+ }
+
+ @Test
+ public void call_twice_get_project_settings() {
+ globalSettings.setProperty("key", "value");
+
+ Settings settings = underTest.getSettings(ROOT);
+ assertThat(settings.getString("key")).isEqualTo("value");
+
+ settings = underTest.getSettings(ROOT);
+ assertThat(settings.getString("key")).isEqualTo("value");
+ }
+}
import org.sonar.api.CoreProperties;
import org.sonar.api.config.Settings;
import org.sonar.server.computation.batch.TreeRootHolderRule;
-import org.sonar.server.computation.component.ProjectSettingsRepository;
+import org.sonar.server.computation.component.Component;
+import org.sonar.server.computation.component.SettingsRepository;
import org.sonar.server.user.index.UserDoc;
import org.sonar.server.user.index.UserIndex;
TreeRootHolderRule rootHolder = mock(TreeRootHolderRule.class, Mockito.RETURNS_DEEP_STUBS);
UserIndex userIndex = mock(UserIndex.class);
Settings settings = new Settings();
- ProjectSettingsRepository settingsRepository = mock(ProjectSettingsRepository.class);
+ SettingsRepository settingsRepository = mock(SettingsRepository.class);
DefaultAssignee underTest = new DefaultAssignee(rootHolder, userIndex, settingsRepository);
@Before
public void before() {
- when(rootHolder.getRoot().getKey()).thenReturn(PROJECT_KEY);
- when(settingsRepository.getProjectSettings(PROJECT_KEY)).thenReturn(settings);
+ when(rootHolder.getRoot()).thenReturn(mock(Component.class));
+ when(settingsRepository.getSettings(rootHolder.getRoot())).thenReturn(settings);
}
@Test
import org.sonar.api.ce.measure.MeasureComputer;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.server.computation.batch.TreeRootHolderRule;
-import org.sonar.server.computation.component.ProjectSettingsRepository;
+import org.sonar.server.computation.component.SettingsRepository;
import org.sonar.server.computation.measure.Measure;
import org.sonar.server.computation.measure.MeasureRepositoryRule;
import org.sonar.server.computation.metric.Metric;
private static final String FILE_1_KEY = "fileKey";
private static final int FILE_2_REF = 12342;
+ private static final org.sonar.server.computation.component.Component FILE_1 = builder(org.sonar.server.computation.component.Component.Type.FILE, FILE_1_REF).setKey(FILE_1_KEY).build();
+
@Rule
public TreeRootHolderRule treeRootHolder = new TreeRootHolderRule()
.setRoot(builder(org.sonar.server.computation.component.Component.Type.PROJECT, PROJECT_REF).setKey("project")
.addChildren(
- builder(org.sonar.server.computation.component.Component.Type.FILE, FILE_1_REF).setKey(FILE_1_KEY).build(),
+ FILE_1,
builder(org.sonar.server.computation.component.Component.Type.FILE, FILE_2_REF).setKey("fileKey2").build()
).build());
@Rule
public MeasureRepositoryRule measureRepository = MeasureRepositoryRule.create(treeRootHolder, metricRepository);
- ProjectSettingsRepository projectSettingsRepository = mock(ProjectSettingsRepository.class);
+ SettingsRepository settingsRepository = mock(SettingsRepository.class);
@Test
public void get_component() throws Exception {
public void get_string_settings() throws Exception {
org.sonar.api.config.Settings serverSettings = new org.sonar.api.config.Settings();
serverSettings.setProperty("prop", "value");
- when(projectSettingsRepository.getProjectSettings(FILE_1_KEY)).thenReturn(serverSettings);
+ when(settingsRepository.getSettings(FILE_1)).thenReturn(serverSettings);
MeasureComputer.Implementation.Context underTest = newContext(FILE_1_REF);
assertThat(underTest.getSettings().getString("prop")).isEqualTo("value");
public void get_string_array_settings() throws Exception {
org.sonar.api.config.Settings serverSettings = new org.sonar.api.config.Settings();
serverSettings.setProperty("prop", "1,3.4,8,50");
- when(projectSettingsRepository.getProjectSettings(FILE_1_KEY)).thenReturn(serverSettings);
+ when(settingsRepository.getSettings(FILE_1)).thenReturn(serverSettings);
MeasureComputer.Implementation.Context underTest = newContext(FILE_1_REF);
assertThat(underTest.getSettings().getStringArray("prop")).containsExactly("1", "3.4", "8", "50");
return null;
}
};
- return new MeasureComputerImplementationContext(treeRootHolder.getComponentByRef(componentRef), measureComputer, projectSettingsRepository, measureRepository, metricRepository);
+ return new MeasureComputerImplementationContext(treeRootHolder.getComponentByRef(componentRef), measureComputer, settingsRepository, measureRepository, metricRepository);
}
}
package org.sonar.server.computation.step;
-import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.DbIdsRepositoryImpl;
import org.sonar.server.computation.component.ReportComponent;
-import org.sonar.server.computation.component.ProjectSettingsRepository;
+import org.sonar.server.computation.component.SettingsRepository;
import org.sonar.server.db.DbClient;
import static org.assertj.core.api.Assertions.assertThat;
DbIdsRepositoryImpl dbIdsRepository = new DbIdsRepositoryImpl();
ProjectCleaner projectCleaner = mock(ProjectCleaner.class);
- ProjectSettingsRepository projectSettingsRepository = mock(ProjectSettingsRepository.class);
+ SettingsRepository settingsRepository = mock(SettingsRepository.class);
- PurgeDatastoresStep underTest = new PurgeDatastoresStep(mock(DbClient.class, Mockito.RETURNS_DEEP_STUBS), projectCleaner, dbIdsRepository, treeRootHolder, projectSettingsRepository);
-
- @Before
- public void setUp() {
- when(projectSettingsRepository.getProjectSettings(PROJECT_KEY)).thenReturn(new Settings());
- }
+ PurgeDatastoresStep underTest = new PurgeDatastoresStep(mock(DbClient.class, Mockito.RETURNS_DEEP_STUBS), projectCleaner, dbIdsRepository, treeRootHolder, settingsRepository);
@Test
public void call_purge_method_of_the_purge_task() {
Component project = ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("UUID-1234").setKey(PROJECT_KEY).build();
treeRootHolder.setRoot(project);
+ when(settingsRepository.getSettings(project)).thenReturn(new Settings());
dbIdsRepository.setComponentId(project, 123L);
reportReader.setMetadata(BatchReport.Metadata.newBuilder()
import org.sonar.server.computation.batch.TreeRootHolderRule;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.ReportComponent;
-import org.sonar.server.computation.component.ProjectSettingsRepository;
+import org.sonar.server.computation.component.SettingsRepository;
import org.sonar.server.computation.qualitygate.Condition;
import org.sonar.server.computation.qualitygate.MutableQualityGateHolderRule;
import org.sonar.server.computation.qualitygate.QualityGate;
@Rule
public MutableQualityGateHolderRule mutableQualityGateHolder = new MutableQualityGateHolderRule();
- private ProjectSettingsRepository projectSettingsRepository = mock(ProjectSettingsRepository.class);
+ private SettingsRepository settingsRepository = mock(SettingsRepository.class);
private QualityGateService qualityGateService = mock(QualityGateService.class);
- private QualityGateLoadingStep underTest = new QualityGateLoadingStep(treeRootHolder, projectSettingsRepository, qualityGateService, mutableQualityGateHolder);
+ private QualityGateLoadingStep underTest = new QualityGateLoadingStep(treeRootHolder, settingsRepository, qualityGateService, mutableQualityGateHolder);
@Test
public void execute_sets_default_QualityGate_when_project_has_no_settings() {
- treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setKey(PROJECT_KEY).addChildren(ReportComponent.builder(Component.Type.FILE, 2).build()).build());
- when(projectSettingsRepository.getProjectSettings(PROJECT_KEY)).thenReturn(new Settings());
+ ReportComponent root = ReportComponent.builder(Component.Type.PROJECT, 1).setKey(PROJECT_KEY).addChildren(ReportComponent.builder(Component.Type.FILE, 2).build()).build();
+ treeRootHolder.setRoot(root);
+ when(settingsRepository.getSettings(root)).thenReturn(new Settings());
underTest.execute();
verifyNoQualityGate();
// verify only project is processed
- verify(projectSettingsRepository).getProjectSettings(PROJECT_KEY);
- verifyNoMoreInteractions(projectSettingsRepository);
+ verify(settingsRepository).getSettings(root);
+ verifyNoMoreInteractions(settingsRepository);
}
@Test
expectedException.expectMessage(String.format("Unsupported value (%s) in property sonar.qualitygate", "10 sds"));
treeRootHolder.setRoot(PROJECT_ALONE);
- when(projectSettingsRepository.getProjectSettings(PROJECT_KEY)).thenReturn(new Settings().setProperty("sonar.qualitygate", "10 sds"));
+ when(settingsRepository.getSettings(PROJECT_ALONE)).thenReturn(new Settings().setProperty("sonar.qualitygate", "10 sds"));
underTest.execute();
}
@Test
public void execute_sets_default_QualityGate_if_it_can_not_be_found_by_service() {
treeRootHolder.setRoot(PROJECT_ALONE);
- when(projectSettingsRepository.getProjectSettings(PROJECT_KEY)).thenReturn(new Settings().setProperty("sonar.qualitygate", 10));
+ when(settingsRepository.getSettings(PROJECT_ALONE)).thenReturn(new Settings().setProperty("sonar.qualitygate", 10));
when(qualityGateService.findById(10)).thenReturn(Optional.<QualityGate>absent());
underTest.execute();
QualityGate qualityGate = new QualityGate("name", Collections.<Condition>emptyList());
treeRootHolder.setRoot(PROJECT_ALONE);
- when(projectSettingsRepository.getProjectSettings(PROJECT_KEY)).thenReturn(new Settings().setProperty("sonar.qualitygate", 10));
+ when(settingsRepository.getSettings(PROJECT_ALONE)).thenReturn(new Settings().setProperty("sonar.qualitygate", 10));
when(qualityGateService.findById(10)).thenReturn(Optional.of(qualityGate));
underTest.execute();