@Test public void select_by_metric_key_and_text_value() { UserDto user = db.users().insertUser(); ComponentDto project = db.components().insertPrivateProject(); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true)); CustomMeasureDto customMeasure1 = db.measures().insertCustomMeasure(user, project, metric, m -> m.setTextValue("value")); CustomMeasureDto customMeasure2 = db.measures().insertCustomMeasure(user, project, metric, m -> m.setTextValue("value")); CustomMeasureDto customMeasure3 = db.measures().insertCustomMeasure(user, project, metric, m -> m.setTextValue("other value")); assertThat(underTest.selectByMetricKeyAndTextValue(session, metric.getKey(), "value")) .extracting(CustomMeasureDto::getId) .containsExactlyInAnyOrder(customMeasure1.getId(), customMeasure2.getId()) .doesNotContain(customMeasure3.getId()); assertThat(underTest.selectByMetricKeyAndTextValue(session, metric.getKey(), "unknown")).isEmpty(); assertThat(underTest.selectByMetricKeyAndTextValue(session, "unknown", "value")).isEmpty(); } }
@Test public void delete_by_metric_id() { UserDto user = db.users().insertUser(); ComponentDto project = db.components().insertPrivateProject(); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true)); CustomMeasureDto measure = db.measures().insertCustomMeasure(user, project, metric); underTest.deleteByMetricIds(session, singletonList(measure.getMetricId())); assertThat(underTest.selectById(session, measure.getId())).isNull(); }
@Test public void update() { UserDto user = db.users().insertUser(); ComponentDto project = db.components().insertPrivateProject(); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true)); CustomMeasureDto measure = db.measures().insertCustomMeasure(user, project, metric, m -> m.setDescription("old-description")); underTest.update(session, measure.setDescription("new-description")); assertThat(underTest.selectById(session, measure.getId()).getDescription()).isEqualTo("new-description"); }
@Test public void select_by_component_uuid() { UserDto user = db.users().insertUser(); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true)); ComponentDto project1 = db.components().insertPrivateProject(); CustomMeasureDto measure1 = db.measures().insertCustomMeasure(user, project1, metric); CustomMeasureDto measure2 = db.measures().insertCustomMeasure(user, project1, metric); ComponentDto project2 = db.components().insertPrivateProject(); CustomMeasureDto measure3 = db.measures().insertCustomMeasure(user, project2, metric); assertThat(underTest.selectByComponentUuid(session, project1.uuid())) .extracting(CustomMeasureDto::getId, CustomMeasureDto::getComponentUuid) .containsOnly( tuple(measure1.getId(), project1.uuid()), tuple(measure2.getId(), project1.uuid())) .doesNotContain(tuple(measure3.getId(), project2.uuid())); assertThat(underTest.countByComponentUuid(session, project1.uuid())).isEqualTo(2); }
@Test public void select_by_component_uuid_with_options() { UserDto user = db.users().insertUser(); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true)); ComponentDto project1 = db.components().insertPrivateProject(); CustomMeasureDto measure1 = db.measures().insertCustomMeasure(user, project1, metric); CustomMeasureDto measure2 = db.measures().insertCustomMeasure(user, project1, metric); ComponentDto project2 = db.components().insertPrivateProject(); CustomMeasureDto measure3 = db.measures().insertCustomMeasure(user, project2, metric); assertThat(underTest.selectByComponentUuid(session, project1.uuid(), 0, 100)) .extracting(CustomMeasureDto::getId, CustomMeasureDto::getComponentUuid) .containsOnly( tuple(measure1.getId(), project1.uuid()), tuple(measure2.getId(), project1.uuid())) .doesNotContain(tuple(measure3.getId(), project2.uuid())); }
IntStream.range(0, 10).forEach(i -> { MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true)); CustomMeasureDto customMeasure = db.measures().insertCustomMeasure(userMeasureCreator, project, metric); measureById.add(customMeasure); });
@Test public void delete() { UserDto user = db.users().insertUser(); ComponentDto project = db.components().insertPrivateProject(); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true)); CustomMeasureDto measure = db.measures().insertCustomMeasure(user, project, metric); underTest.delete(session, measure.getId()); assertThat(underTest.selectById(session, measure.getId())).isNull(); }
@Test public void fail_if_not_logged_in() { ComponentDto project = db.components().insertPrivateProject(); UserDto user = db.users().insertUser(); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true).setValueType(STRING.name())); CustomMeasureDto customMeasure = db.measures().insertCustomMeasure(user, project, metric); userSession.anonymous(); expectedException.expect(UnauthorizedException.class); ws.newRequest() .setParam(PARAM_ID, String.valueOf(customMeasure.getId())) .setParam(PARAM_DESCRIPTION, "new-custom-measure-description") .setParam(PARAM_VALUE, "1984") .execute(); }
@Test public void fail_if_insufficient_privileges() { ComponentDto project = db.components().insertPrivateProject(); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true).setValueType(STRING.name())); UserDto user = db.users().insertUser(); CustomMeasureDto customMeasure = db.measures().insertCustomMeasure(user, project, metric); userSession.logIn(user).addProjectPermission(USER, project); expectedException.expect(ForbiddenException.class); ws.newRequest() .setParam(PARAM_ID, String.valueOf(customMeasure.getId())) .setParam(PARAM_DESCRIPTION, "new-custom-measure-description") .setParam(PARAM_VALUE, "1984") .execute(); }
@Test public void fail_when_measure_already_exists_on_same_project_and_same_metric() { MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true).setValueType(STRING.name())); ComponentDto project = db.components().insertPrivateProject(); UserDto userMeasureCreator = db.users().insertUser(); db.measures().insertCustomMeasure(userMeasureCreator, project, metric); UserDto userAuthenticated = db.users().insertUser(); userSession.logIn(userAuthenticated).addProjectPermission(ADMIN, project); expectedException.expect(BadRequestException.class); expectedException.expectMessage(format("A measure already exists for project '%s' and metric '%s'", project.getKey(), metric.getKey())); ws.newRequest() .setParam(CreateAction.PARAM_PROJECT_ID, project.uuid()) .setParam(CreateAction.PARAM_METRIC_ID, metric.getId().toString()) .setParam(CreateAction.PARAM_VALUE, "whatever-value") .execute(); }
@Test public void update_description_only() { ComponentDto project = db.components().insertPrivateProject(); UserDto user = db.users().insertUser(); userSession.logIn(user).addProjectPermission(ADMIN, project); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true).setValueType(STRING.name())); CustomMeasureDto customMeasure = db.measures().insertCustomMeasure(user, project, metric); ws.newRequest() .setParam(PARAM_ID, String.valueOf(customMeasure.getId())) .setParam(PARAM_DESCRIPTION, "new-custom-measure-description") .execute(); assertThat(db.getDbClient().customMeasureDao().selectByMetricId(db.getSession(), metric.getId())) .extracting(CustomMeasureDto::getDescription, CustomMeasureDto::getTextValue, CustomMeasureDto::getValue) .containsExactlyInAnyOrder( tuple("new-custom-measure-description", customMeasure.getTextValue(), customMeasure.getValue())); }
@Test public void update_value_only() { ComponentDto project = db.components().insertPrivateProject(); UserDto user = db.users().insertUser(); userSession.logIn(user).addProjectPermission(ADMIN, project); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true).setValueType(STRING.name())); CustomMeasureDto customMeasure = db.measures().insertCustomMeasure(user, project, metric); ws.newRequest() .setParam(PARAM_ID, String.valueOf(customMeasure.getId())) .setParam(PARAM_VALUE, "new-text-measure-value") .execute(); assertThat(db.getDbClient().customMeasureDao().selectByMetricId(db.getSession(), metric.getId())) .extracting(CustomMeasureDto::getDescription, CustomMeasureDto::getTextValue, CustomMeasureDto::getValue) .containsExactlyInAnyOrder( tuple(customMeasure.getDescription(), "new-text-measure-value", customMeasure.getValue())); }
@Test public void search_with_selectable_fields() { ComponentDto project = db.components().insertPrivateProject(); UserDto userAuthenticated = db.users().insertUser(); userSession.logIn(userAuthenticated).addProjectPermission(ADMIN, project); UserDto userMeasureCreator = db.users().insertUser(); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true).setValueType(STRING.name())); db.measures().insertCustomMeasure(userMeasureCreator, project, metric, m -> m.setValue(0d)); String response = ws.newRequest() .setParam(SearchAction.PARAM_PROJECT_KEY, project.getKey()) .setParam(WebService.Param.FIELDS, "value, description") .execute() .getInput(); assertThat(response).contains("id", "value", "description") .doesNotContain("createdAt") .doesNotContain("updatedAt") .doesNotContain("user") .doesNotContain("metric"); }
@Test public void fail_if_custom_measure_value_and_description_are_missing_in_request() { ComponentDto project = db.components().insertPrivateProject(); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true).setValueType(STRING.name())); UserDto user = db.users().insertUser(); db.measures().insertCustomMeasure(user, project, metric); userSession.logIn(user).addProjectPermission(ADMIN, project); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Value or description must be provided."); ws.newRequest() .setParam(PARAM_ID, "42") .execute(); }
@Test public void fail_if_custom_measure_id_is_missing_in_request() { ComponentDto project = db.components().insertPrivateProject(); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true).setValueType(STRING.name())); UserDto user = db.users().insertUser(); db.measures().insertCustomMeasure(user, project, metric); userSession.logIn(user).addProjectPermission(ADMIN, project); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("The 'id' parameter is missing"); ws.newRequest() .setParam(PARAM_DESCRIPTION, "new-custom-measure-description") .setParam(PARAM_VALUE, "1984") .execute(); }
@Test public void update_int_value_and_description_in_db() { ComponentDto project = db.components().insertPrivateProject(); UserDto userAuthenticated = db.users().insertUser(); userSession.logIn(userAuthenticated).addProjectPermission(ADMIN, project); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true).setValueType(INT.name())); UserDto userMeasureCreator = db.users().insertUser(); CustomMeasureDto customMeasure = db.measures().insertCustomMeasure(userMeasureCreator, project, metric, m -> m.setValue(42d).setTextValue(null)); ws.newRequest() .setParam(PARAM_ID, String.valueOf(customMeasure.getId())) .setParam(PARAM_DESCRIPTION, "new-custom-measure-description") .setParam(PARAM_VALUE, "1984") .execute(); assertThat(db.getDbClient().customMeasureDao().selectByMetricId(db.getSession(), metric.getId())) .extracting(CustomMeasureDto::getDescription, CustomMeasureDto::getTextValue, CustomMeasureDto::getValue, CustomMeasureDto::getUserUuid, CustomMeasureDto::getComponentUuid, CustomMeasureDto::getCreatedAt, CustomMeasureDto::getUpdatedAt) .containsExactlyInAnyOrder( tuple("new-custom-measure-description", null, 1984d, userAuthenticated.getUuid(), project.uuid(), customMeasure.getCreatedAt(), NOW)); }
@Test public void search_with_more_recent_analysis() { long yesterday = DateUtils.addDays(new Date(), -1).getTime(); ComponentDto project = db.components().insertPrivateProject(); UserDto userAuthenticated = db.users().insertUser(); userSession.logIn(userAuthenticated).addProjectPermission(ADMIN, project); UserDto userMeasureCreator = db.users().insertUser(); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true).setValueType(STRING.name())); CustomMeasureDto customMeasure = db.measures().insertCustomMeasure(userMeasureCreator, project, metric, m -> m.setCreatedAt(yesterday).setUpdatedAt(yesterday)); db.components().insertSnapshot(project); String response = ws.newRequest() .setParam(SearchAction.PARAM_PROJECT_ID, project.uuid()) .execute() .getInput(); assertJson(response).isSimilarTo("{\n" + " \"customMeasures\": [\n" + " {\n" + " \"id\": \"" + customMeasure.getId() + "\",\n" + " \"value\": \"" + customMeasure.getTextValue() + "\",\n" + " \"pending\": false\n" + " },\n" + " ]\n" + "}"); }
@Test public void update_text_value_and_description_in_db() { ComponentDto project = db.components().insertPrivateProject(); UserDto userAuthenticated = db.users().insertUser(); userSession.logIn(userAuthenticated).addProjectPermission(ADMIN, project); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true).setValueType(STRING.name())); UserDto userMeasureCreator = db.users().insertUser(); CustomMeasureDto customMeasure = db.measures().insertCustomMeasure(userMeasureCreator, project, metric, m -> m.setValue(0d)); ws.newRequest() .setParam(PARAM_ID, String.valueOf(customMeasure.getId())) .setParam(PARAM_DESCRIPTION, "new-custom-measure-description") .setParam(PARAM_VALUE, "new-text-measure-value") .execute(); assertThat(db.getDbClient().customMeasureDao().selectByMetricId(db.getSession(), metric.getId())) .extracting(CustomMeasureDto::getDescription, CustomMeasureDto::getTextValue, CustomMeasureDto::getValue, CustomMeasureDto::getUserUuid, CustomMeasureDto::getComponentUuid, CustomMeasureDto::getCreatedAt, CustomMeasureDto::getUpdatedAt) .containsExactlyInAnyOrder( tuple("new-custom-measure-description", "new-text-measure-value", 0d, userAuthenticated.getUuid(), project.uuid(), customMeasure.getCreatedAt(), NOW)); }
MetricDto metric2 = db.measures().insertMetric(m -> m.setUserManaged(true).setValueType(STRING.name())); MetricDto metric3 = db.measures().insertMetric(m -> m.setUserManaged(true).setValueType(STRING.name())); CustomMeasureDto customMeasure1 = db.measures().insertCustomMeasure(userMeasureCreator, project, metric1, m -> m.setValue(0d)); CustomMeasureDto customMeasure2 = db.measures().insertCustomMeasure(userMeasureCreator, project, metric2, m -> m.setValue(0d)); CustomMeasureDto customMeasure3 = db.measures().insertCustomMeasure(userMeasureCreator, project, metric3, m -> m.setValue(0d));
@Test public void fail_if_measure_is_not_in_db() { ComponentDto project = db.components().insertPrivateProject(); MetricDto metric = db.measures().insertMetric(m -> m.setUserManaged(true).setValueType(STRING.name())); UserDto user = db.users().insertUser(); db.measures().insertCustomMeasure(user, project, metric); userSession.logIn(user).addProjectPermission(ADMIN, project); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Custom measure with id '0' does not exist"); ws.newRequest() .setParam(PARAM_ID, "0") .setParam(PARAM_DESCRIPTION, "new-custom-measure-description") .setParam(PARAM_VALUE, "1984") .execute(); }