Browse Source

Improve MetricDao code coverage

tags/5.2-RC1
Teryk Bellahsene 9 years ago
parent
commit
2659bc296b

+ 1
- 1
server/sonar-server/src/main/java/org/sonar/server/metric/ws/DeleteAction.java View File

DbSession dbSession = dbClient.openSession(false); DbSession dbSession = dbClient.openSession(false);
try { try {
List<Integer> ids = loadIds(dbSession, request); List<Integer> ids = loadIds(dbSession, request);
dbClient.metricDao().disableByIds(dbSession, ids);
dbClient.metricDao().disableCustomByIds(dbSession, ids);
dbClient.customMeasureDao().deleteByMetricIds(dbSession, ids); dbClient.customMeasureDao().deleteByMetricIds(dbSession, ids);
dbSession.commit(); dbSession.commit();
} finally { } finally {

+ 1
- 1
server/sonar-server/src/main/java/org/sonar/server/metric/ws/DomainsAction.java View File

public void handle(Request request, Response response) throws Exception { public void handle(Request request, Response response) throws Exception {
DbSession dbSession = dbClient.openSession(false); DbSession dbSession = dbClient.openSession(false);
try { try {
List<String> domains = dbClient.metricDao().selectDomains(dbSession);
List<String> domains = dbClient.metricDao().selectEnabledDomains(dbSession);
JsonWriter json = response.newJsonWriter(); JsonWriter json = response.newJsonWriter();
json.beginObject(); json.beginObject();
writeDomains(json, domains); writeDomains(json, domains);

+ 1
- 1
server/sonar-server/src/main/java/org/sonar/server/startup/RegisterMetrics.java View File

for (MetricDto nonUpdatedBase : basesByKey.values()) { for (MetricDto nonUpdatedBase : basesByKey.values()) {
if (!nonUpdatedBase.isUserManaged()) { if (!nonUpdatedBase.isUserManaged()) {
LOG.info("Disable metric {} [{}]", nonUpdatedBase.getShortName(), nonUpdatedBase.getKey()); LOG.info("Disable metric {} [{}]", nonUpdatedBase.getShortName(), nonUpdatedBase.getKey());
dbClient.metricDao().disableByKey(session, nonUpdatedBase.getKey());
dbClient.metricDao().disableCustomByKey(session, nonUpdatedBase.getKey());
} }
} }
} }

+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/CreateActionTest.java View File

import org.sonar.server.exceptions.ServerException; import org.sonar.server.exceptions.ServerException;
import org.sonar.db.measure.custom.CustomMeasureDao; import org.sonar.db.measure.custom.CustomMeasureDao;
import org.sonar.db.metric.MetricDao; 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.tester.UserSessionRule;
import org.sonar.server.user.index.UserDoc; import org.sonar.server.user.index.UserDoc;
import org.sonar.server.user.index.UserIndex; import org.sonar.server.user.index.UserIndex;

+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/CustomMeasureValidatorTest.java View File

import static org.sonar.api.measures.Metric.ValueType.LEVEL; 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.STRING;
import static org.sonar.api.measures.Metric.ValueType.WORK_DUR; 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; import static org.sonar.server.util.TypeValidationsTesting.newFullTypeValidations;


public class CustomMeasureValidatorTest { public class CustomMeasureValidatorTest {

+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/MetricsActionTest.java View File

import static org.sonar.db.measure.custom.CustomMeasureTesting.newCustomMeasureDto; 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.CustomMeasuresWs.ENDPOINT;
import static org.sonar.server.measure.custom.ws.MetricsAction.ACTION; 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) @Category(DbTests.class)
public class MetricsActionTest { public class MetricsActionTest {

+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/SearchActionTest.java View File



import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.sonar.db.measure.custom.CustomMeasureTesting.newCustomMeasureDto; 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 { public class SearchActionTest {



+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/UpdateActionTest.java View File

import org.sonar.server.exceptions.ServerException; import org.sonar.server.exceptions.ServerException;
import org.sonar.server.exceptions.UnauthorizedException; import org.sonar.server.exceptions.UnauthorizedException;
import org.sonar.db.metric.MetricDao; 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.tester.UserSessionRule;
import org.sonar.server.user.index.UserDoc; import org.sonar.server.user.index.UserDoc;
import org.sonar.server.user.index.UserIndex; import org.sonar.server.user.index.UserIndex;

+ 1
- 0
server/sonar-server/src/test/java/org/sonar/server/metric/ws/CreateActionTest.java View File

import org.sonar.db.DbSession; import org.sonar.db.DbSession;
import org.sonar.db.DbTester; import org.sonar.db.DbTester;
import org.sonar.db.metric.MetricDto; import org.sonar.db.metric.MetricDto;
import org.sonar.db.metric.MetricTesting;
import org.sonar.server.db.DbClient; import org.sonar.server.db.DbClient;
import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.exceptions.ServerException; import org.sonar.server.exceptions.ServerException;

+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/metric/ws/DeleteActionTest.java View File

import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock; 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) @Category(DbTests.class)
public class DeleteActionTest { public class DeleteActionTest {

+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/metric/ws/DomainsActionTest.java View File

import org.sonar.test.DbTests; import org.sonar.test.DbTests;
import org.sonar.test.JsonAssert; 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) @Category(DbTests.class)
public class DomainsActionTest { public class DomainsActionTest {

+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/metric/ws/SearchActionTest.java View File

import org.sonar.test.DbTests; import org.sonar.test.DbTests;


import static org.assertj.core.api.Assertions.assertThat; 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; import static org.sonar.server.metric.ws.SearchAction.PARAM_IS_CUSTOM;


@Category(DbTests.class) @Category(DbTests.class)

+ 7
- 5
sonar-db/src/main/java/org/sonar/db/metric/MetricDao.java View File

return mapper(session).countEnabled(isCustom); return mapper(session).countEnabled(isCustom);
} }


public void insert(DbSession session, MetricDto dto) {
public MetricDto insert(DbSession session, MetricDto dto) {
mapper(session).insert(dto); mapper(session).insert(dto);

return dto;
} }


public void insert(DbSession session, Collection<MetricDto> items) { public void insert(DbSession session, Collection<MetricDto> items) {
insert(session, Lists.asList(item, others)); 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())); return newArrayList(Collections2.filter(mapper(session).selectDomains(), new NotEmptyPredicate()));
} }


return session.getMapper(MetricMapper.class); 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>() { DatabaseUtils.executeLargeInputsWithoutOutput(ids, new Function<List<Integer>, Void>() {
@Override @Override
public Void apply(@Nonnull List<Integer> input) { public Void apply(@Nonnull List<Integer> input) {
}); });
} }


public void disableByKey(final DbSession session, String key) {
public void disableCustomByKey(final DbSession session, String key) {
mapper(session).disableByKey(key); mapper(session).disableByKey(key);
} }


return mapper(session).selectById(id); 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); MetricDto metric = mapper(session).selectById(id);
if (metric == null) { if (metric == null) {
throw new RowNotFoundException(String.format("Metric id '%d' not found", id)); throw new RowNotFoundException(String.format("Metric id '%d' not found", id));

+ 157
- 12
sonar-db/src/test/java/org/sonar/db/metric/MetricDaoTest.java View File



package org.sonar.db.metric; package org.sonar.db.metric;


import java.util.Arrays;
import java.util.List;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.experimental.categories.Category; import org.junit.experimental.categories.Category;
import org.junit.rules.ExpectedException;
import org.sonar.api.utils.System2; import org.sonar.api.utils.System2;
import org.sonar.db.DbSession; import org.sonar.db.DbSession;
import org.sonar.db.DbTester; import org.sonar.db.DbTester;
import org.sonar.db.RowNotFoundException; import org.sonar.db.RowNotFoundException;
import org.sonar.test.DbTests; import org.sonar.test.DbTests;


import static com.google.common.collect.Sets.newHashSet;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.sonar.db.metric.MetricTesting.newMetricDto;


@Category(DbTests.class) @Category(DbTests.class)
public class MetricDaoTest { public class MetricDaoTest {


@Rule @Rule
public DbTester dbTester = DbTester.create(System2.INSTANCE); public DbTester dbTester = DbTester.create(System2.INSTANCE);
@Rule
public ExpectedException thrown = ExpectedException.none();


DbSession session; DbSession session;


MetricDao dao;
MetricDao underTest;


@Before @Before
public void createDao() { public void createDao() {
dbTester.truncateTables(); dbTester.truncateTables();
session = dbTester.myBatis().openSession(false); session = dbTester.myBatis().openSession(false);
dao = new MetricDao();
underTest = new MetricDao();
} }


@After @After
} }


@Test @Test
public void get_by_key() {
public void select_by_key() {
dbTester.prepareDbUnit(getClass(), "shared.xml"); dbTester.prepareDbUnit(getClass(), "shared.xml");


MetricDto result = dao.selectByKey(session, "coverage");
MetricDto result = underTest.selectByKey(session, "coverage");
assertThat(result.getId()).isEqualTo(2); assertThat(result.getId()).isEqualTo(2);
assertThat(result.getKey()).isEqualTo("coverage"); assertThat(result.getKey()).isEqualTo("coverage");
assertThat(result.getShortName()).isEqualTo("Coverage"); assertThat(result.getShortName()).isEqualTo("Coverage");
assertThat(result.isEnabled()).isTrue(); assertThat(result.isEnabled()).isTrue();


// Disabled metrics are returned // Disabled metrics are returned
result = dao.selectByKey(session, "disabled");
result = underTest.selectByKey(session, "disabled");
assertThat(result.getId()).isEqualTo(3); assertThat(result.getId()).isEqualTo(3);
assertThat(result.isEnabled()).isFalse(); assertThat(result.isEnabled()).isFalse();
} }


@Test(expected = RowNotFoundException.class) @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 @Test
public void get_manual_metric() { public void get_manual_metric() {
dbTester.prepareDbUnit(getClass(), "manual_metric.xml"); 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.getId()).isEqualTo(1);
assertThat(result.getKey()).isEqualTo("manual"); assertThat(result.getKey()).isEqualTo("manual");
assertThat(result.getShortName()).isEqualTo("Manual metric"); assertThat(result.getShortName()).isEqualTo("Manual metric");
public void find_all_enabled() { public void find_all_enabled() {
dbTester.prepareDbUnit(getClass(), "shared.xml"); dbTester.prepareDbUnit(getClass(), "shared.xml");


assertThat(dao.selectEnabled(session)).hasSize(2);
assertThat(underTest.selectEnabled(session)).hasSize(2);
} }


@Test @Test
public void insert() { public void insert() {
dao.insert(session, new MetricDto()
underTest.insert(session, new MetricDto()
.setKey("coverage") .setKey("coverage")
.setShortName("Coverage") .setShortName("Coverage")
.setDescription("Coverage by unit tests") .setDescription("Coverage by unit tests")
.setDeleteHistoricalData(true) .setDeleteHistoricalData(true)
.setEnabled(true)); .setEnabled(true));


MetricDto result = dao.selectByKey(session, "coverage");
MetricDto result = underTest.selectByKey(session, "coverage");
assertThat(result.getId()).isNotNull(); assertThat(result.getId()).isNotNull();
assertThat(result.getKey()).isEqualTo("coverage"); assertThat(result.getKey()).isEqualTo("coverage");
assertThat(result.getShortName()).isEqualTo("Coverage"); assertThat(result.getShortName()).isEqualTo("Coverage");


@Test @Test
public void insert_metrics() { public void insert_metrics() {
dao.insert(session, new MetricDto()
underTest.insert(session, new MetricDto()
.setKey("coverage") .setKey("coverage")
.setShortName("Coverage") .setShortName("Coverage")
.setDescription("Coverage by unit tests") .setDescription("Coverage by unit tests")


assertThat(dbTester.countRowsOfTable("metrics")).isEqualTo(2); 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");

}
} }

server/sonar-server/src/test/java/org/sonar/server/metric/ws/MetricTesting.java → sonar-db/src/test/java/org/sonar/db/metric/MetricTesting.java View File

* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * 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.RandomStringUtils;
import org.apache.commons.lang.math.RandomUtils; import org.apache.commons.lang.math.RandomUtils;
import org.sonar.api.measures.Metric; import org.sonar.api.measures.Metric;
import org.sonar.db.metric.MetricDto;


public class MetricTesting { public class MetricTesting {
private MetricTesting() { private MetricTesting() {

Loading…
Cancel
Save