diff options
author | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2015-07-23 17:58:02 +0200 |
---|---|---|
committer | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2015-07-24 09:22:47 +0200 |
commit | 2659bc296bc643229ff65163aba71a4642362194 (patch) | |
tree | d1b24a64eae8b5b17849ad76c4c00daab60e3260 | |
parent | 5792a69db7fa49a2f865a6018e25555254a20674 (diff) | |
download | sonarqube-2659bc296bc643229ff65163aba71a4642362194.tar.gz sonarqube-2659bc296bc643229ff65163aba71a4642362194.zip |
Improve MetricDao code coverage
15 files changed, 177 insertions, 30 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/metric/ws/DeleteAction.java b/server/sonar-server/src/main/java/org/sonar/server/metric/ws/DeleteAction.java index f46b50bb8fb..016f5d6ce8e 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/metric/ws/DeleteAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/metric/ws/DeleteAction.java @@ -74,7 +74,7 @@ public class DeleteAction implements MetricsWsAction { DbSession dbSession = dbClient.openSession(false); try { List<Integer> ids = loadIds(dbSession, request); - dbClient.metricDao().disableByIds(dbSession, ids); + dbClient.metricDao().disableCustomByIds(dbSession, ids); dbClient.customMeasureDao().deleteByMetricIds(dbSession, ids); dbSession.commit(); } finally { diff --git a/server/sonar-server/src/main/java/org/sonar/server/metric/ws/DomainsAction.java b/server/sonar-server/src/main/java/org/sonar/server/metric/ws/DomainsAction.java index f2867541b15..726575d2c05 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/metric/ws/DomainsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/metric/ws/DomainsAction.java @@ -51,7 +51,7 @@ public class DomainsAction implements MetricsWsAction { public void handle(Request request, Response response) throws Exception { DbSession dbSession = dbClient.openSession(false); try { - List<String> domains = dbClient.metricDao().selectDomains(dbSession); + List<String> domains = dbClient.metricDao().selectEnabledDomains(dbSession); JsonWriter json = response.newJsonWriter(); json.beginObject(); writeDomains(json, domains); diff --git a/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterMetrics.java b/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterMetrics.java index 383d349e624..faa8b3c84b4 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterMetrics.java +++ b/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterMetrics.java @@ -104,7 +104,7 @@ public class RegisterMetrics { for (MetricDto nonUpdatedBase : basesByKey.values()) { if (!nonUpdatedBase.isUserManaged()) { LOG.info("Disable metric {} [{}]", nonUpdatedBase.getShortName(), nonUpdatedBase.getKey()); - dbClient.metricDao().disableByKey(session, nonUpdatedBase.getKey()); + dbClient.metricDao().disableCustomByKey(session, nonUpdatedBase.getKey()); } } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/CreateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/CreateActionTest.java index d6652bd2c32..ef1bc03b96d 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/CreateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/CreateActionTest.java @@ -52,7 +52,7 @@ import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.exceptions.ServerException; import org.sonar.db.measure.custom.CustomMeasureDao; import org.sonar.db.metric.MetricDao; -import org.sonar.server.metric.ws.MetricTesting; +import org.sonar.db.metric.MetricTesting; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.user.index.UserDoc; import org.sonar.server.user.index.UserIndex; diff --git a/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/CustomMeasureValidatorTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/CustomMeasureValidatorTest.java index 5fd4834e24d..93e284c9932 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/CustomMeasureValidatorTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/CustomMeasureValidatorTest.java @@ -36,7 +36,7 @@ import static org.sonar.api.measures.Metric.ValueType.INT; import static org.sonar.api.measures.Metric.ValueType.LEVEL; import static org.sonar.api.measures.Metric.ValueType.STRING; import static org.sonar.api.measures.Metric.ValueType.WORK_DUR; -import static org.sonar.server.metric.ws.MetricTesting.newMetricDto; +import static org.sonar.db.metric.MetricTesting.newMetricDto; import static org.sonar.server.util.TypeValidationsTesting.newFullTypeValidations; public class CustomMeasureValidatorTest { diff --git a/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/MetricsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/MetricsActionTest.java index 474e30302b3..5bf699e9cf4 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/MetricsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/MetricsActionTest.java @@ -56,7 +56,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.sonar.db.measure.custom.CustomMeasureTesting.newCustomMeasureDto; import static org.sonar.server.measure.custom.ws.CustomMeasuresWs.ENDPOINT; import static org.sonar.server.measure.custom.ws.MetricsAction.ACTION; -import static org.sonar.server.metric.ws.MetricTesting.newMetricDto; +import static org.sonar.db.metric.MetricTesting.newMetricDto; @Category(DbTests.class) public class MetricsActionTest { diff --git a/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/SearchActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/SearchActionTest.java index 000738435e9..1355da06866 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/SearchActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/SearchActionTest.java @@ -61,7 +61,7 @@ import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; import static org.sonar.db.measure.custom.CustomMeasureTesting.newCustomMeasureDto; -import static org.sonar.server.metric.ws.MetricTesting.newMetricDto; +import static org.sonar.db.metric.MetricTesting.newMetricDto; public class SearchActionTest { diff --git a/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/UpdateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/UpdateActionTest.java index a086593bcc8..420bafe9d8d 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/UpdateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/UpdateActionTest.java @@ -46,7 +46,7 @@ import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.ServerException; import org.sonar.server.exceptions.UnauthorizedException; import org.sonar.db.metric.MetricDao; -import org.sonar.server.metric.ws.MetricTesting; +import org.sonar.db.metric.MetricTesting; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.user.index.UserDoc; import org.sonar.server.user.index.UserIndex; diff --git a/server/sonar-server/src/test/java/org/sonar/server/metric/ws/CreateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/metric/ws/CreateActionTest.java index d844cdd171a..c57f6658689 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/metric/ws/CreateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/metric/ws/CreateActionTest.java @@ -32,6 +32,7 @@ import org.sonar.core.permission.GlobalPermissions; import org.sonar.db.DbSession; import org.sonar.db.DbTester; import org.sonar.db.metric.MetricDto; +import org.sonar.db.metric.MetricTesting; import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.ServerException; diff --git a/server/sonar-server/src/test/java/org/sonar/server/metric/ws/DeleteActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/metric/ws/DeleteActionTest.java index 38079656bf5..1eb8133a449 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/metric/ws/DeleteActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/metric/ws/DeleteActionTest.java @@ -47,7 +47,7 @@ import org.sonar.test.DbTests; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; -import static org.sonar.server.metric.ws.MetricTesting.newMetricDto; +import static org.sonar.db.metric.MetricTesting.newMetricDto; @Category(DbTests.class) public class DeleteActionTest { diff --git a/server/sonar-server/src/test/java/org/sonar/server/metric/ws/DomainsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/metric/ws/DomainsActionTest.java index 6281ef4e273..60d45f5dd64 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/metric/ws/DomainsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/metric/ws/DomainsActionTest.java @@ -35,7 +35,7 @@ import org.sonar.server.ws.WsTester; import org.sonar.test.DbTests; import org.sonar.test.JsonAssert; -import static org.sonar.server.metric.ws.MetricTesting.newMetricDto; +import static org.sonar.db.metric.MetricTesting.newMetricDto; @Category(DbTests.class) public class DomainsActionTest { diff --git a/server/sonar-server/src/test/java/org/sonar/server/metric/ws/SearchActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/metric/ws/SearchActionTest.java index c2add0c926e..86295881a30 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/metric/ws/SearchActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/metric/ws/SearchActionTest.java @@ -37,7 +37,7 @@ import org.sonar.server.ws.WsTester; import org.sonar.test.DbTests; import static org.assertj.core.api.Assertions.assertThat; -import static org.sonar.server.metric.ws.MetricTesting.newMetricDto; +import static org.sonar.db.metric.MetricTesting.newMetricDto; import static org.sonar.server.metric.ws.SearchAction.PARAM_IS_CUSTOM; @Category(DbTests.class) diff --git a/sonar-db/src/main/java/org/sonar/db/metric/MetricDao.java b/sonar-db/src/main/java/org/sonar/db/metric/MetricDao.java index 9780c00d382..1037ae9d331 100644 --- a/sonar-db/src/main/java/org/sonar/db/metric/MetricDao.java +++ b/sonar-db/src/main/java/org/sonar/db/metric/MetricDao.java @@ -82,8 +82,10 @@ public class MetricDao implements Dao { return mapper(session).countEnabled(isCustom); } - public void insert(DbSession session, MetricDto dto) { + public MetricDto insert(DbSession session, MetricDto dto) { mapper(session).insert(dto); + + return dto; } public void insert(DbSession session, Collection<MetricDto> items) { @@ -96,7 +98,7 @@ public class MetricDao implements Dao { insert(session, Lists.asList(item, others)); } - public List<String> selectDomains(DbSession session) { + public List<String> selectEnabledDomains(DbSession session) { return newArrayList(Collections2.filter(mapper(session).selectDomains(), new NotEmptyPredicate())); } @@ -126,7 +128,7 @@ public class MetricDao implements Dao { return session.getMapper(MetricMapper.class); } - public void disableByIds(final DbSession session, List<Integer> ids) { + public void disableCustomByIds(final DbSession session, List<Integer> ids) { DatabaseUtils.executeLargeInputsWithoutOutput(ids, new Function<List<Integer>, Void>() { @Override public Void apply(@Nonnull List<Integer> input) { @@ -136,7 +138,7 @@ public class MetricDao implements Dao { }); } - public void disableByKey(final DbSession session, String key) { + public void disableCustomByKey(final DbSession session, String key) { mapper(session).disableByKey(key); } @@ -149,7 +151,7 @@ public class MetricDao implements Dao { return mapper(session).selectById(id); } - public MetricDto selectOrFailById(DbSession session, int id) { + public MetricDto selectOrFailById(DbSession session, long id) { MetricDto metric = mapper(session).selectById(id); if (metric == null) { throw new RowNotFoundException(String.format("Metric id '%d' not found", id)); diff --git a/sonar-db/src/test/java/org/sonar/db/metric/MetricDaoTest.java b/sonar-db/src/test/java/org/sonar/db/metric/MetricDaoTest.java index 0917d79d021..ca6767e6702 100644 --- a/sonar-db/src/test/java/org/sonar/db/metric/MetricDaoTest.java +++ b/sonar-db/src/test/java/org/sonar/db/metric/MetricDaoTest.java @@ -20,34 +20,41 @@ package org.sonar.db.metric; +import java.util.Arrays; +import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; +import org.junit.rules.ExpectedException; import org.sonar.api.utils.System2; import org.sonar.db.DbSession; import org.sonar.db.DbTester; import org.sonar.db.RowNotFoundException; import org.sonar.test.DbTests; +import static com.google.common.collect.Sets.newHashSet; import static org.assertj.core.api.Assertions.assertThat; +import static org.sonar.db.metric.MetricTesting.newMetricDto; @Category(DbTests.class) public class MetricDaoTest { @Rule public DbTester dbTester = DbTester.create(System2.INSTANCE); + @Rule + public ExpectedException thrown = ExpectedException.none(); DbSession session; - MetricDao dao; + MetricDao underTest; @Before public void createDao() { dbTester.truncateTables(); session = dbTester.myBatis().openSession(false); - dao = new MetricDao(); + underTest = new MetricDao(); } @After @@ -56,10 +63,10 @@ public class MetricDaoTest { } @Test - public void get_by_key() { + public void select_by_key() { dbTester.prepareDbUnit(getClass(), "shared.xml"); - MetricDto result = dao.selectByKey(session, "coverage"); + MetricDto result = underTest.selectByKey(session, "coverage"); assertThat(result.getId()).isEqualTo(2); assertThat(result.getKey()).isEqualTo("coverage"); assertThat(result.getShortName()).isEqualTo("Coverage"); @@ -77,21 +84,21 @@ public class MetricDaoTest { assertThat(result.isEnabled()).isTrue(); // Disabled metrics are returned - result = dao.selectByKey(session, "disabled"); + result = underTest.selectByKey(session, "disabled"); assertThat(result.getId()).isEqualTo(3); assertThat(result.isEnabled()).isFalse(); } @Test(expected = RowNotFoundException.class) - public void get_nullable_by_key() { - dao.selectOrFailByKey(session, "unknown"); + public void select_or_fail_by_key() { + underTest.selectOrFailByKey(session, "unknown"); } @Test public void get_manual_metric() { dbTester.prepareDbUnit(getClass(), "manual_metric.xml"); - MetricDto result = dao.selectByKey(session, "manual"); + MetricDto result = underTest.selectByKey(session, "manual"); assertThat(result.getId()).isEqualTo(1); assertThat(result.getKey()).isEqualTo("manual"); assertThat(result.getShortName()).isEqualTo("Manual metric"); @@ -113,12 +120,12 @@ public class MetricDaoTest { public void find_all_enabled() { dbTester.prepareDbUnit(getClass(), "shared.xml"); - assertThat(dao.selectEnabled(session)).hasSize(2); + assertThat(underTest.selectEnabled(session)).hasSize(2); } @Test public void insert() { - dao.insert(session, new MetricDto() + underTest.insert(session, new MetricDto() .setKey("coverage") .setShortName("Coverage") .setDescription("Coverage by unit tests") @@ -134,7 +141,7 @@ public class MetricDaoTest { .setDeleteHistoricalData(true) .setEnabled(true)); - MetricDto result = dao.selectByKey(session, "coverage"); + MetricDto result = underTest.selectByKey(session, "coverage"); assertThat(result.getId()).isNotNull(); assertThat(result.getKey()).isEqualTo("coverage"); assertThat(result.getShortName()).isEqualTo("Coverage"); @@ -154,7 +161,7 @@ public class MetricDaoTest { @Test public void insert_metrics() { - dao.insert(session, new MetricDto() + underTest.insert(session, new MetricDto() .setKey("coverage") .setShortName("Coverage") .setDescription("Coverage by unit tests") @@ -188,4 +195,142 @@ public class MetricDaoTest { assertThat(dbTester.countRowsOfTable("metrics")).isEqualTo(2); } + + @Test + public void selectById() { + MetricDto metric = underTest.insert(session, newMetricDto()); + + MetricDto result = underTest.selectById(session, metric.getId()); + + assertThat(result).isNotNull(); + } + + @Test + public void selectOrFailById() { + MetricDto metric = underTest.insert(session, newMetricDto()); + + MetricDto result = underTest.selectOrFailById(session, metric.getId()); + + assertThat(result).isNotNull(); + } + + @Test + public void fail_when_no_id_selectOrFailById() { + thrown.expect(RowNotFoundException.class); + + underTest.selectOrFailById(session, 42L); + } + + @Test + public void selectByIds() { + MetricDto metric1 = underTest.insert(session, newMetricDto()); + MetricDto metric2 = underTest.insert(session, newMetricDto()); + + List<MetricDto> result = underTest.selectByIds(session, newHashSet(metric1.getId(), metric2.getId())); + + assertThat(result).hasSize(2); + } + + @Test + public void update() { + MetricDto metric = underTest.insert(session, newMetricDto().setKey("first-key")); + + underTest.update(session, metric.setKey("second-key")); + + MetricDto result = underTest.selectByKey(session, "second-key"); + assertThat(result).isNotNull(); + } + + @Test + public void countEnabled() { + underTest.insert(session, newMetricDto().setEnabled(true).setUserManaged(true)); + underTest.insert(session, newMetricDto().setEnabled(true).setUserManaged(true)); + underTest.insert(session, newMetricDto().setEnabled(false)); + + int result = underTest.countEnabled(session, true); + + assertThat(result).isEqualTo(2); + } + + @Test + public void selectDomains() { + underTest.insert(session, newMetricDto().setDomain("first-domain").setEnabled(true)); + underTest.insert(session, newMetricDto().setDomain("second-domain").setEnabled(true)); + underTest.insert(session, newMetricDto().setDomain("second-domain").setEnabled(true)); + underTest.insert(session, newMetricDto().setDomain("third-domain").setEnabled(true)); + + List<String> domains = underTest.selectEnabledDomains(session); + + assertThat(domains).hasSize(3).containsOnly("first-domain", "second-domain", "third-domain"); + } + + @Test + public void selectByKeys() { + underTest.insert(session, newMetricDto().setKey("first-key")); + underTest.insert(session, newMetricDto().setKey("second-key")); + underTest.insert(session, newMetricDto().setKey("third-key")); + + List<MetricDto> result = underTest.selectByKeys(session, Arrays.asList("first-key", "second-key", "third-key")); + + assertThat(result).hasSize(3) + .extracting("key").containsOnly("first-key", "second-key", "third-key"); + } + + @Test + public void disableByIds() { + MetricDto metric1 = underTest.insert(session, newMetricDto().setEnabled(true).setUserManaged(true)); + MetricDto metric2 = underTest.insert(session, newMetricDto().setEnabled(true).setUserManaged(true)); + + underTest.disableCustomByIds(session, Arrays.asList(metric1.getId(), metric2.getId())); + + List<MetricDto> result = underTest.selectByIds(session, newHashSet(metric1.getId(), metric2.getId())); + assertThat(result).hasSize(2); + assertThat(result).extracting("enabled").containsOnly(false); + } + + @Test + public void disableByKey() { + underTest.insert(session, newMetricDto().setKey("metric-key").setEnabled(true).setUserManaged(true)); + + underTest.disableCustomByKey(session, "metric-key"); + + MetricDto result = underTest.selectByKey(session, "metric-key"); + assertThat(result.isEnabled()).isFalse(); + } + + @Test + public void selectOrFailByKey() { + underTest.insert(session, newMetricDto().setKey("metric-key")); + + MetricDto result = underTest.selectOrFailByKey(session, "metric-key"); + + assertThat(result).isNotNull(); + assertThat(result.getKey()).isEqualTo("metric-key"); + } + + @Test + public void selectEnabled_with_paging_and_custom() { + underTest.insert(session, newMetricDto().setUserManaged(true).setEnabled(true)); + underTest.insert(session, newMetricDto().setUserManaged(true).setEnabled(true)); + underTest.insert(session, newMetricDto().setUserManaged(true).setEnabled(true)); + underTest.insert(session, newMetricDto().setUserManaged(false).setEnabled(true)); + underTest.insert(session, newMetricDto().setUserManaged(true).setEnabled(false)); + + List<MetricDto> result = underTest.selectEnabled(session, true, 0, 100); + + assertThat(result).hasSize(3); + } + + @Test + public void selectAvailableByComponentUuid() { + underTest.insert(session, newMetricDto().setUserManaged(true).setEnabled(true).setKey("metric-key")); + underTest.insert(session, newMetricDto().setUserManaged(false).setEnabled(true).setKey("another-metric-key")); + underTest.insert(session, newMetricDto().setUserManaged(true).setEnabled(false).setKey("third-metric-key")); + + List<MetricDto> result = underTest.selectAvailableCustomMetricsByComponentUuid(session, "project-uuid"); + + assertThat(result).hasSize(1) + .extracting("key").containsOnly("metric-key"); + + } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/metric/ws/MetricTesting.java b/sonar-db/src/test/java/org/sonar/db/metric/MetricTesting.java index f04d3f1152b..502f23ea5b7 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/metric/ws/MetricTesting.java +++ b/sonar-db/src/test/java/org/sonar/db/metric/MetricTesting.java @@ -18,12 +18,11 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.metric.ws; +package org.sonar.db.metric; import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.math.RandomUtils; import org.sonar.api.measures.Metric; -import org.sonar.db.metric.MetricDto; public class MetricTesting { private MetricTesting() { |