Browse Source

SONAR-6620 Measure can actually be immutable

this will in turn make adding a update method on MeasureRepository more meaningful
tags/5.2-RC1
Sébastien Lesaint 9 years ago
parent
commit
8a60f3fd67

+ 33
- 31
server/sonar-server/src/main/java/org/sonar/server/computation/measure/BatchMeasureToMeasure.java View File

import org.sonar.server.computation.issue.RuleCache; import org.sonar.server.computation.issue.RuleCache;
import org.sonar.server.computation.metric.Metric; import org.sonar.server.computation.metric.Metric;


import static com.google.common.base.Optional.of;

public class BatchMeasureToMeasure { public class BatchMeasureToMeasure {
private final RuleCache ruleCache; private final RuleCache ruleCache;


return Optional.absent(); return Optional.absent();
} }


Measure.Builder builder = createBuilder(batchMeasure);
Measure.NewMeasureBuilder builder = createBuilder(batchMeasure);
String data = batchMeasure.hasStringValue() ? batchMeasure.getStringValue() : null; String data = batchMeasure.hasStringValue() ? batchMeasure.getStringValue() : null;
switch (metric.getType().getValueType()) { switch (metric.getType().getValueType()) {
case INT: case INT:
} }
} }


private Measure.Builder createBuilder(BatchReport.Measure batchMeasure) {
private Measure.NewMeasureBuilder createBuilder(BatchReport.Measure batchMeasure) {
if (batchMeasure.hasCharactericId() && batchMeasure.hasRuleKey()) { if (batchMeasure.hasCharactericId() && batchMeasure.hasRuleKey()) {
throw new IllegalArgumentException("Measure with both characteristicId and ruleKey are not supported"); throw new IllegalArgumentException("Measure with both characteristicId and ruleKey are not supported");
} }
if (batchMeasure.hasCharactericId()) { if (batchMeasure.hasCharactericId()) {
return Measure.builder().forCharacteristic(batchMeasure.getCharactericId());
return Measure.newMeasure().forCharacteristic(batchMeasure.getCharactericId());
} }
if (batchMeasure.hasRuleKey()) { if (batchMeasure.hasRuleKey()) {
RuleDto ruleDto = ruleCache.get(RuleKey.parse(batchMeasure.getRuleKey())); RuleDto ruleDto = ruleCache.get(RuleKey.parse(batchMeasure.getRuleKey()));
return Measure.builder().forRule(ruleDto.getId());
return Measure.newMeasure().forRule(ruleDto.getId());
} }
return Measure.builder();
return Measure.newMeasure();
} }


private static Optional<Measure> toIntegerMeasure(Measure.Builder builder, BatchReport.Measure batchMeasure, @Nullable String data) {
private static Optional<Measure> toIntegerMeasure(Measure.NewMeasureBuilder builder, BatchReport.Measure batchMeasure, @Nullable String data) {
if (!batchMeasure.hasIntValue()) { if (!batchMeasure.hasIntValue()) {
return toMeasure(builder.createNoValue(), batchMeasure);
return toNoValueMeasure(builder, batchMeasure);
} }
return toMeasure(builder.create(batchMeasure.getIntValue(), data), batchMeasure);
return of(setCommonProperties(builder, batchMeasure).create(batchMeasure.getIntValue(), data));
} }


private static Optional<Measure> toLongMeasure(Measure.Builder builder, BatchReport.Measure batchMeasure, @Nullable String data) {
private static Optional<Measure> toLongMeasure(Measure.NewMeasureBuilder builder, BatchReport.Measure batchMeasure, @Nullable String data) {
if (!batchMeasure.hasLongValue()) { if (!batchMeasure.hasLongValue()) {
return toMeasure(builder.createNoValue(), batchMeasure);
return toNoValueMeasure(builder, batchMeasure);
} }
return toMeasure(builder.create(batchMeasure.getLongValue(), data), batchMeasure);
return of(setCommonProperties(builder, batchMeasure).create(batchMeasure.getLongValue(), data));
} }


private static Optional<Measure> toDoubleMeasure(Measure.Builder builder, BatchReport.Measure batchMeasure, @Nullable String data) {
private static Optional<Measure> toDoubleMeasure(Measure.NewMeasureBuilder builder, BatchReport.Measure batchMeasure, @Nullable String data) {
if (!batchMeasure.hasDoubleValue()) { if (!batchMeasure.hasDoubleValue()) {
return toMeasure(builder.createNoValue(), batchMeasure);
return toNoValueMeasure(builder, batchMeasure);
} }
return toMeasure(builder.create(batchMeasure.getDoubleValue(), data), batchMeasure);
return of(setCommonProperties(builder, batchMeasure).create(batchMeasure.getDoubleValue(), data));
} }


private static Optional<Measure> toBooleanMeasure(Measure.Builder builder, BatchReport.Measure batchMeasure, @Nullable String data) {
private static Optional<Measure> toBooleanMeasure(Measure.NewMeasureBuilder builder, BatchReport.Measure batchMeasure, @Nullable String data) {
if (!batchMeasure.hasBooleanValue()) { if (!batchMeasure.hasBooleanValue()) {
return toMeasure(builder.createNoValue(), batchMeasure);
return toNoValueMeasure(builder, batchMeasure);
} }
return toMeasure(builder.create(batchMeasure.getBooleanValue(), data), batchMeasure);
return of(setCommonProperties(builder, batchMeasure).create(batchMeasure.getBooleanValue(), data));
} }


private static Optional<Measure> toStringMeasure(Measure.Builder builder, BatchReport.Measure batchMeasure) {
private static Optional<Measure> toStringMeasure(Measure.NewMeasureBuilder builder, BatchReport.Measure batchMeasure) {
if (!batchMeasure.hasStringValue()) { if (!batchMeasure.hasStringValue()) {
return toMeasure(builder.createNoValue(), batchMeasure);
return toNoValueMeasure(builder, batchMeasure);
} }
return toMeasure(builder.create(batchMeasure.getStringValue()), batchMeasure);
return of(setCommonProperties(builder, batchMeasure).create(batchMeasure.getStringValue()));
} }
private static Optional<Measure> toLevelMeasure(Measure.Builder builder, BatchReport.Measure batchMeasure) {
private static Optional<Measure> toLevelMeasure(Measure.NewMeasureBuilder builder, BatchReport.Measure batchMeasure) {
if (!batchMeasure.hasStringValue()) { if (!batchMeasure.hasStringValue()) {
return toMeasure(builder.createNoValue(), batchMeasure);
return toNoValueMeasure(builder, batchMeasure);
} }
Optional<Measure.Level> level = Measure.Level.toLevel(batchMeasure.getStringValue()); Optional<Measure.Level> level = Measure.Level.toLevel(batchMeasure.getStringValue());
if (!level.isPresent()) { if (!level.isPresent()) {
return toMeasure(builder.createNoValue(), batchMeasure);
return toNoValueMeasure(builder, batchMeasure);
} }
return toMeasure(builder.create(level.get()), batchMeasure);
return of(setCommonProperties(builder, batchMeasure).create(level.get()));
} }


private static Optional<Measure> toNoValueMeasure(Measure.Builder builder, BatchReport.Measure batchMeasure) {
return toMeasure(builder.createNoValue(), batchMeasure);
private static Optional<Measure> toNoValueMeasure(Measure.NewMeasureBuilder builder, BatchReport.Measure batchMeasure) {
return of(setCommonProperties(builder, batchMeasure).createNoValue());
} }


private static Optional<Measure> toMeasure(Measure measure, BatchReport.Measure batchMeasure) {
if (batchMeasure.hasAlertStatus() && !measure.hasQualityGateStatus()) {
private static Measure.NewMeasureBuilder setCommonProperties(Measure.NewMeasureBuilder builder, BatchReport.Measure batchMeasure) {
if (batchMeasure.hasAlertStatus()) {
Optional<Measure.Level> qualityGateStatus = Measure.Level.toLevel(batchMeasure.getAlertStatus()); Optional<Measure.Level> qualityGateStatus = Measure.Level.toLevel(batchMeasure.getAlertStatus());
if (qualityGateStatus.isPresent()) { if (qualityGateStatus.isPresent()) {
String text = batchMeasure.hasAlertText() ? batchMeasure.getAlertText() : null; String text = batchMeasure.hasAlertText() ? batchMeasure.getAlertText() : null;
measure.setQualityGateStatus(new QualityGateStatus(qualityGateStatus.get(), text));
builder.setQualityGateStatus(new QualityGateStatus(qualityGateStatus.get(), text));
} }
} }
if (hasAnyVariation(batchMeasure)) { if (hasAnyVariation(batchMeasure)) {
measure.setVariations(createVariations(batchMeasure));
builder.setVariations(createVariations(batchMeasure));
} }
return Optional.of((Measure) measure);
return builder;
} }


private static boolean hasAnyVariation(BatchReport.Measure batchMeasure) { private static boolean hasAnyVariation(BatchReport.Measure batchMeasure) {

+ 83
- 34
server/sonar-server/src/main/java/org/sonar/server/computation/measure/Measure.java View File

@CheckForNull @CheckForNull
private final String description; private final String description;
@CheckForNull @CheckForNull
private QualityGateStatus qualityGateStatus;
private final QualityGateStatus qualityGateStatus;
@CheckForNull @CheckForNull
private MeasureVariations variations;
private final MeasureVariations variations;


private Measure(ValueType valueType, @Nullable Integer ruleId, @Nullable Integer characteristicId, private Measure(ValueType valueType, @Nullable Integer ruleId, @Nullable Integer characteristicId,
@Nullable Double value, @Nullable String data, @Nullable Level dataLevel, @Nullable Double value, @Nullable String data, @Nullable Level dataLevel,
@Nullable String description) {
@Nullable String description, @Nullable QualityGateStatus qualityGateStatus, @Nullable MeasureVariations variations) {
this.valueType = valueType; this.valueType = valueType;
this.ruleId = ruleId; this.ruleId = ruleId;
this.characteristicId = characteristicId; this.characteristicId = characteristicId;
this.data = data; this.data = data;
this.dataLevel = dataLevel; this.dataLevel = dataLevel;
this.description = description; this.description = description;
this.qualityGateStatus = qualityGateStatus;
this.variations = variations;
} }


public static Builder builder() {
return new Builder();
public static NewMeasureBuilder newMeasure() {
return new NewMeasureBuilder();
} }


public static final class Builder {
public static final String RULE_AND_CHARACTERISTIC_ERROR_MSG = "A measure can not be associated to both a Characteristic and a Rule";
public static UpdateMeasureBuilder updateMeasure(Measure measure) {
return new UpdateMeasureBuilder(measure);
}

public static final class NewMeasureBuilder {
private static final String RULE_AND_CHARACTERISTIC_ERROR_MSG = "A measure can not be associated to both a Characteristic and a Rule";

private Integer ruleId; private Integer ruleId;
private Integer characteristicId; private Integer characteristicId;
private String description; private String description;
private QualityGateStatus qualityGateStatus;
private MeasureVariations variations;


/** /**
* Sets the rule this measure is associated to. * Sets the rule this measure is associated to.
* *
* @see #forCharacteristic(int) * @see #forCharacteristic(int)
*/ */
public Builder forRule(int ruleId) {
public NewMeasureBuilder forRule(int ruleId) {
if (characteristicId != null) { if (characteristicId != null) {
throw new UnsupportedOperationException(RULE_AND_CHARACTERISTIC_ERROR_MSG); throw new UnsupportedOperationException(RULE_AND_CHARACTERISTIC_ERROR_MSG);
} }
* *
* @see #forCharacteristic(int) * @see #forCharacteristic(int)
*/ */
public Builder forCharacteristic(int characteristicId) {
public NewMeasureBuilder forCharacteristic(int characteristicId) {
if (ruleId != null) { if (ruleId != null) {
throw new UnsupportedOperationException(RULE_AND_CHARACTERISTIC_ERROR_MSG); throw new UnsupportedOperationException(RULE_AND_CHARACTERISTIC_ERROR_MSG);
} }
* *
* @throws NullPointerException if the specified argument is {@code null} * @throws NullPointerException if the specified argument is {@code null}
*/ */
public Builder withDescription(String description) {
public NewMeasureBuilder setDescription(String description) {
this.description = requireNonNull(description, "description can not be set to null"); this.description = requireNonNull(description, "description can not be set to null");
return this; return this;
} }


public NewMeasureBuilder setQualityGateStatus(QualityGateStatus qualityGateStatus) {
this.qualityGateStatus = requireNonNull(qualityGateStatus, "QualityGateStatus can not be set to null");
return this;
}

public NewMeasureBuilder setVariations(MeasureVariations variations) {
this.variations = requireNonNull(variations, "Variations can not be set to null");
return this;
}

public Measure create(boolean value, @Nullable String data) { public Measure create(boolean value, @Nullable String data) {
return new Measure(ValueType.BOOLEAN, ruleId, characteristicId, value ? 1.0d : 0.0d, data, null, description);
return new Measure(ValueType.BOOLEAN, ruleId, characteristicId, value ? 1.0d : 0.0d, data, null, description, qualityGateStatus, variations);
} }


public Measure create(int value, @Nullable String data) { public Measure create(int value, @Nullable String data) {
return new Measure(ValueType.INT, ruleId, characteristicId, (double) value, data, null, description);
return new Measure(ValueType.INT, ruleId, characteristicId, (double) value, data, null, description, qualityGateStatus, variations);
} }


public Measure create(long value, @Nullable String data) { public Measure create(long value, @Nullable String data) {
return new Measure(ValueType.LONG, ruleId, characteristicId, (double) value, data, null, description);
return new Measure(ValueType.LONG, ruleId, characteristicId, (double) value, data, null, description, qualityGateStatus, variations);
} }


public Measure create(double value, @Nullable String data) { public Measure create(double value, @Nullable String data) {
return new Measure(ValueType.DOUBLE, ruleId, characteristicId, value, data, null, description);
return new Measure(ValueType.DOUBLE, ruleId, characteristicId, value, data, null, description, qualityGateStatus, variations);
} }


public Measure create(String value) { public Measure create(String value) {
return new Measure(ValueType.STRING, ruleId, characteristicId, null, requireNonNull(value), null, description);
return new Measure(ValueType.STRING, ruleId, characteristicId, null, requireNonNull(value), null, description, qualityGateStatus, variations);
} }


public Measure create(Level level) { public Measure create(Level level) {
return new Measure(ValueType.LEVEL, ruleId, characteristicId, null, null, requireNonNull(level), description);
return new Measure(ValueType.LEVEL, ruleId, characteristicId, null, null, requireNonNull(level), description, qualityGateStatus, variations);
} }


public Measure createNoValue() { public Measure createNoValue() {
return new Measure(ValueType.NO_VALUE, ruleId, characteristicId, null, null, null, description);
return new Measure(ValueType.NO_VALUE, ruleId, characteristicId, null, null, null, description, qualityGateStatus, variations);
}
}

public static final class UpdateMeasureBuilder {
private final Measure source;
private QualityGateStatus qualityGateStatus;
private MeasureVariations variations;

public UpdateMeasureBuilder(Measure source) {
this.source = requireNonNull(source, "Can not create a measure from null");
}

/**
* Sets the QualityGateStatus of the updated Measure to create.
*
* @throws NullPointerException if the specified {@link QualityGateStatus} is {@code null}
* @throws UnsupportedOperationException if the source measure already has a {@link QualityGateStatus}
*/
public UpdateMeasureBuilder setQualityGateStatus(QualityGateStatus qualityGateStatus) {
if (source.qualityGateStatus != null) {
throw new UnsupportedOperationException("QualityGate status can not be changed if already set on source Measure");
}
this.qualityGateStatus = requireNonNull(qualityGateStatus, "QualityGateStatus can not be set to null");
return this;
}

/**
* Sets the MeasureVariations of the updated Measure to create.
*
* @throws NullPointerException if the specified {@link MeasureVariations} is {@code null}
* @throws UnsupportedOperationException if the source measure already has a {@link MeasureVariations}
*/
public UpdateMeasureBuilder setVariations(MeasureVariations variations) {
if (source.variations != null) {
throw new UnsupportedOperationException("Variations can not be changed if already set on source Measure");
}
this.variations = requireNonNull(variations, "Variations can not be set to null");
return this;
}

public Measure create() {
return new Measure(source.valueType, source.ruleId, source.characteristicId,
source.value, source.data, source.dataLevel,
source.description,
source.qualityGateStatus == null ? qualityGateStatus : source.qualityGateStatus,
source.variations == null ? variations : source.variations);
} }
} }


} }
} }


public Measure setQualityGateStatus(QualityGateStatus qualityGateStatus) {
this.qualityGateStatus = requireNonNull(qualityGateStatus, "Can not set a null QualityGate status");
return this;
}

/** /**
* Any Measure, which ever is its value type, can have a QualityGate status. * Any Measure, which ever is its value type, can have a QualityGate status.
*/ */
return this.qualityGateStatus; return this.qualityGateStatus;
} }


/**
* Sets the variations of this Measure.
*
* @throws NullPointerException if the specified argument is {@code null}
* @throws IllegalStateException if the variations have already been set
*/
public Measure setVariations(MeasureVariations variations) {
this.variations = requireNonNull(variations, "Can not set null MeasureVariations");
return this;
}

/** /**
* Any Measure, which ever is its value type, can have a Variations. * Any Measure, which ever is its value type, can have a Variations.
*/ */


/** /**
* a Metric is equal to another Metric if it has the same ruleId/characteristicId paar (both being potentially * a Metric is equal to another Metric if it has the same ruleId/characteristicId paar (both being potentially
* {@code null} but only one of them can be non {@code null}.
* {@code null} but only one of them can be non {@code null}).
*/ */
@Override @Override
public boolean equals(@Nullable Object o) { public boolean equals(@Nullable Object o) {

+ 20
- 19
server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureDtoToMeasure.java View File

import org.sonar.core.measure.db.MeasureDto; import org.sonar.core.measure.db.MeasureDto;
import org.sonar.server.computation.metric.Metric; import org.sonar.server.computation.metric.Metric;


import static com.google.common.base.Optional.of;
import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
import static org.sonar.server.computation.measure.Measure.Level.toLevel; import static org.sonar.server.computation.measure.Measure.Level.toLevel;


private static Optional<Measure> toIntegerMeasure(MeasureDto measureDto, @Nullable Double value, String data) { private static Optional<Measure> toIntegerMeasure(MeasureDto measureDto, @Nullable Double value, String data) {
if (value == null) { if (value == null) {
return toMeasure(Measure.builder().createNoValue(), measureDto);
return toNoValueMeasure(measureDto);
} }
return toMeasure(Measure.builder().create(value.intValue(), data), measureDto);
return of(setCommonProperties(Measure.newMeasure(), measureDto).create(value.intValue(), data));
} }


private static Optional<Measure> toLongMeasure(MeasureDto measureDto, @Nullable Double value, String data) { private static Optional<Measure> toLongMeasure(MeasureDto measureDto, @Nullable Double value, String data) {
if (value == null) { if (value == null) {
return toMeasure(Measure.builder().createNoValue(), measureDto);
return toNoValueMeasure(measureDto);
} }
return toMeasure(Measure.builder().create(value.longValue(), data), measureDto);
return of(setCommonProperties(Measure.newMeasure(), measureDto).create(value.longValue(), data));
} }


private static Optional<Measure> toDoubleMeasure(MeasureDto measureDto, @Nullable Double value, String data) { private static Optional<Measure> toDoubleMeasure(MeasureDto measureDto, @Nullable Double value, String data) {
if (value == null) { if (value == null) {
return toMeasure(Measure.builder().createNoValue(), measureDto);
return toNoValueMeasure(measureDto);
} }
return toMeasure(Measure.builder().create(value.doubleValue(), data), measureDto);
return of(setCommonProperties(Measure.newMeasure(), measureDto).create(value.doubleValue(), data));
} }


private static Optional<Measure> toBooleanMeasure(MeasureDto measureDto, @Nullable Double value, String data) { private static Optional<Measure> toBooleanMeasure(MeasureDto measureDto, @Nullable Double value, String data) {
if (value == null) { if (value == null) {
return toMeasure(Measure.builder().createNoValue(), measureDto);
return toNoValueMeasure(measureDto);
} }
return toMeasure(Measure.builder().create(value == 1.0d, data), measureDto);
return of(setCommonProperties(Measure.newMeasure(), measureDto).create(value == 1.0d, data));
} }


private static Optional<Measure> toStringMeasure(MeasureDto measureDto, @Nullable String data) { private static Optional<Measure> toStringMeasure(MeasureDto measureDto, @Nullable String data) {
if (data == null) { if (data == null) {
return toMeasure(Measure.builder().createNoValue(), measureDto);
return toNoValueMeasure(measureDto);
} }
return toMeasure(Measure.builder().create(data), measureDto);
return of(setCommonProperties(Measure.newMeasure(), measureDto).create(data));
} }


private static Optional<Measure> toLevelMeasure(MeasureDto measureDto, @Nullable String data) { private static Optional<Measure> toLevelMeasure(MeasureDto measureDto, @Nullable String data) {
if (data == null) { if (data == null) {
return toMeasure(Measure.builder().createNoValue(), measureDto);
return toNoValueMeasure(measureDto);
} }
Optional<Measure.Level> level = toLevel(data); Optional<Measure.Level> level = toLevel(data);
if (!level.isPresent()) { if (!level.isPresent()) {
return toMeasure(Measure.builder().createNoValue(), measureDto);
return toNoValueMeasure(measureDto);
} }
return toMeasure(Measure.builder().create(level.get()), measureDto);
return of(setCommonProperties(Measure.newMeasure(), measureDto).create(level.get()));
} }


private static Optional<Measure> toNoValueMeasure(MeasureDto measureDto) { private static Optional<Measure> toNoValueMeasure(MeasureDto measureDto) {
return toMeasure(Measure.builder().createNoValue(), measureDto);
return of(setCommonProperties(Measure.newMeasure(), measureDto).createNoValue());
} }


private static Optional<Measure> toMeasure(Measure measure, MeasureDto measureDto) {
if (measureDto.getAlertStatus() != null && !measure.hasQualityGateStatus()) {
private static Measure.NewMeasureBuilder setCommonProperties(Measure.NewMeasureBuilder builder, MeasureDto measureDto) {
if (measureDto.getAlertStatus() != null) {
Optional<Measure.Level> qualityGateStatus = toLevel(measureDto.getAlertStatus()); Optional<Measure.Level> qualityGateStatus = toLevel(measureDto.getAlertStatus());
if (qualityGateStatus.isPresent()) { if (qualityGateStatus.isPresent()) {
measure.setQualityGateStatus(new QualityGateStatus(qualityGateStatus.get(), measureDto.getAlertText()));
builder.setQualityGateStatus(new QualityGateStatus(qualityGateStatus.get(), measureDto.getAlertText()));
} }
} }
if (hasAnyVariation(measureDto)) { if (hasAnyVariation(measureDto)) {
measure.setVariations(createVariations(measureDto));
builder.setVariations(createVariations(measureDto));
} }


return Optional.of((Measure) measure);
return builder;
} }


private static boolean hasAnyVariation(MeasureDto measureDto) { private static boolean hasAnyVariation(MeasureDto measureDto) {

+ 7
- 7
server/sonar-server/src/test/java/org/sonar/server/computation/measure/MeasureRepositoryImplTest.java View File

private static final long LAST_SNAPSHOT_ID = 123; private static final long LAST_SNAPSHOT_ID = 123;
private static final long OTHER_SNAPSHOT_ID = 369; private static final long OTHER_SNAPSHOT_ID = 369;
private static final long COMPONENT_ID = 567; private static final long COMPONENT_ID = 567;
private static final Measure SOME_MEASURE = Measure.builder().create(Measure.Level.OK);
private static final Measure SOME_MEASURE = Measure.newMeasure().create(Measure.Level.OK);
private static final String SOME_DATA = "some data"; private static final String SOME_DATA = "some data";
private static final RuleDto SOME_RULE = RuleDto.createFor(RuleKey.of("A", "1")).setId(963); private static final RuleDto SOME_RULE = RuleDto.createFor(RuleKey.of("A", "1")).setId(963);
private static final Characteristic SOME_CHARACTERISTIC = new Characteristic(741, "key"); private static final Characteristic SOME_CHARACTERISTIC = new Characteristic(741, "key");


@Test @Test
public void getRawMeasure_for_rule_returns_measure_for_specified_rule() { public void getRawMeasure_for_rule_returns_measure_for_specified_rule() {
Measure measure = Measure.builder().forRule(SOME_RULE.getId()).createNoValue();
Measure measure = Measure.newMeasure().forRule(SOME_RULE.getId()).createNoValue();


underTest.add(FILE_COMPONENT, metric1, measure); underTest.add(FILE_COMPONENT, metric1, measure);
underTest.add(FILE_COMPONENT, metric1, Measure.builder().forRule(222).createNoValue());
underTest.add(FILE_COMPONENT, metric1, Measure.newMeasure().forRule(222).createNoValue());


assertThat(underTest.getRawMeasure(FILE_COMPONENT, metric1, SOME_RULE).get()).isSameAs(measure); assertThat(underTest.getRawMeasure(FILE_COMPONENT, metric1, SOME_RULE).get()).isSameAs(measure);
} }


@Test @Test
public void getRawMeasure_for_characteristic_returns_measure_for_specified_rule() { public void getRawMeasure_for_characteristic_returns_measure_for_specified_rule() {
Measure measure = Measure.builder().forCharacteristic(SOME_CHARACTERISTIC.getId()).createNoValue();
Measure measure = Measure.newMeasure().forCharacteristic(SOME_CHARACTERISTIC.getId()).createNoValue();


underTest.add(FILE_COMPONENT, metric1, measure); underTest.add(FILE_COMPONENT, metric1, measure);
underTest.add(FILE_COMPONENT, metric1, Measure.builder().forCharacteristic(333).createNoValue());
underTest.add(FILE_COMPONENT, metric1, Measure.newMeasure().forCharacteristic(333).createNoValue());


assertThat(underTest.getRawMeasure(FILE_COMPONENT, metric1, SOME_CHARACTERISTIC).get()).isSameAs(measure); assertThat(underTest.getRawMeasure(FILE_COMPONENT, metric1, SOME_CHARACTERISTIC).get()).isSameAs(measure);
} }


Measure addedMeasure = SOME_MEASURE; Measure addedMeasure = SOME_MEASURE;
underTest.add(FILE_COMPONENT, metric1, addedMeasure); underTest.add(FILE_COMPONENT, metric1, addedMeasure);
Measure addedMeasure2 = Measure.builder().forCharacteristic(SOME_CHARACTERISTIC.getId()).createNoValue();
Measure addedMeasure2 = Measure.newMeasure().forCharacteristic(SOME_CHARACTERISTIC.getId()).createNoValue();
underTest.add(FILE_COMPONENT, metric1, addedMeasure2); underTest.add(FILE_COMPONENT, metric1, addedMeasure2);


SetMultimap<String, Measure> rawMeasures = underTest.getRawMeasures(FILE_COMPONENT); SetMultimap<String, Measure> rawMeasures = underTest.getRawMeasures(FILE_COMPONENT);


assertThat(rawMeasures.keySet()).hasSize(2); assertThat(rawMeasures.keySet()).hasSize(2);
assertThat(rawMeasures.get(METRIC_KEY_1)).containsOnly(addedMeasure, addedMeasure2); assertThat(rawMeasures.get(METRIC_KEY_1)).containsOnly(addedMeasure, addedMeasure2);
assertThat(rawMeasures.get(METRIC_KEY_2)).containsOnly(Measure.builder().create("some value"));
assertThat(rawMeasures.get(METRIC_KEY_2)).containsOnly(Measure.newMeasure().create("some value"));
} }


private static MeasureDto createMeasureDto(int metricId, long snapshotId) { private static MeasureDto createMeasureDto(int metricId, long snapshotId) {

+ 78
- 33
server/sonar-server/src/test/java/org/sonar/server/computation/measure/MeasureTest.java View File



import static com.google.common.collect.FluentIterable.from; import static com.google.common.collect.FluentIterable.from;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.sonar.server.computation.measure.Measure.builder;


@RunWith(DataProviderRunner.class) @RunWith(DataProviderRunner.class)
public class MeasureTest { public class MeasureTest {


private static final Measure INT_MEASURE = builder().create((int) 1, null);
private static final Measure LONG_MEASURE = builder().create(1l, null);
private static final Measure DOUBLE_MEASURE = builder().create(1d, null);
private static final Measure STRING_MEASURE = builder().create("some_sT ring");
private static final Measure TRUE_MEASURE = builder().create(true, null);
private static final Measure FALSE_MEASURE = builder().create(false, null);
private static final Measure LEVEL_MEASURE = builder().create(Measure.Level.OK);
private static final Measure NO_VALUE_MEASURE = builder().createNoValue();
private static final Measure INT_MEASURE = Measure.newMeasure().create((int) 1, null);
private static final Measure LONG_MEASURE = Measure.newMeasure().create(1l, null);
private static final Measure DOUBLE_MEASURE = Measure.newMeasure().create(1d, null);
private static final Measure STRING_MEASURE = Measure.newMeasure().create("some_sT ring");
private static final Measure TRUE_MEASURE = Measure.newMeasure().create(true, null);
private static final Measure FALSE_MEASURE = Measure.newMeasure().create(false, null);
private static final Measure LEVEL_MEASURE = Measure.newMeasure().create(Measure.Level.OK);
private static final Measure NO_VALUE_MEASURE = Measure.newMeasure().createNoValue();


private static final List<Measure> MEASURES = ImmutableList.of( private static final List<Measure> MEASURES = ImmutableList.of(
INT_MEASURE, LONG_MEASURE, DOUBLE_MEASURE, STRING_MEASURE, TRUE_MEASURE, FALSE_MEASURE, NO_VALUE_MEASURE, LEVEL_MEASURE INT_MEASURE, LONG_MEASURE, DOUBLE_MEASURE, STRING_MEASURE, TRUE_MEASURE, FALSE_MEASURE, NO_VALUE_MEASURE, LEVEL_MEASURE
executionException.expect(UnsupportedOperationException.class); executionException.expect(UnsupportedOperationException.class);
executionException.expectMessage("A measure can not be associated to both a Characteristic and a Rule"); executionException.expectMessage("A measure can not be associated to both a Characteristic and a Rule");


builder().forCharacteristic(SOME_CHARACTERISTIC_ID).forRule(SOME_RULE_ID);
Measure.newMeasure().forCharacteristic(SOME_CHARACTERISTIC_ID).forRule(SOME_RULE_ID);
} }


@Test @Test
executionException.expect(UnsupportedOperationException.class); executionException.expect(UnsupportedOperationException.class);
executionException.expectMessage("A measure can not be associated to both a Characteristic and a Rule"); executionException.expectMessage("A measure can not be associated to both a Characteristic and a Rule");


builder().forRule(SOME_RULE_ID).forCharacteristic(SOME_CHARACTERISTIC_ID);
Measure.newMeasure().forRule(SOME_RULE_ID).forCharacteristic(SOME_CHARACTERISTIC_ID);
} }


@Test @Test
public void getRuleId_returns_null_when_ruleKey_has_not_been_set() { public void getRuleId_returns_null_when_ruleKey_has_not_been_set() {
assertThat(builder().createNoValue().getRuleId()).isNull();
assertThat(builder().forCharacteristic(SOME_CHARACTERISTIC_ID).createNoValue().getRuleId()).isNull();
assertThat(Measure.newMeasure().createNoValue().getRuleId()).isNull();
assertThat(Measure.newMeasure().forCharacteristic(SOME_CHARACTERISTIC_ID).createNoValue().getRuleId()).isNull();
} }


@Test @Test
public void getRuleId_returns_key_set_in_builder() { public void getRuleId_returns_key_set_in_builder() {
assertThat(builder().forRule(SOME_RULE_ID).createNoValue().getRuleId()).isEqualTo(SOME_RULE_ID);
assertThat(Measure.newMeasure().forRule(SOME_RULE_ID).createNoValue().getRuleId()).isEqualTo(SOME_RULE_ID);
} }


@Test @Test
public void getCharacteristicId_returns_null_when_ruleKey_has_not_been_set() { public void getCharacteristicId_returns_null_when_ruleKey_has_not_been_set() {
assertThat(builder().createNoValue().getCharacteristicId()).isNull();
assertThat(builder().forRule(SOME_RULE_ID).createNoValue().getCharacteristicId()).isNull();
assertThat(Measure.newMeasure().createNoValue().getCharacteristicId()).isNull();
assertThat(Measure.newMeasure().forRule(SOME_RULE_ID).createNoValue().getCharacteristicId()).isNull();
} }


@Test @Test
public void getCharacteristicId_returns_id_set_in_builder() { public void getCharacteristicId_returns_id_set_in_builder() {
assertThat(builder().forCharacteristic(SOME_CHARACTERISTIC_ID).createNoValue().getCharacteristicId()).isEqualTo(SOME_CHARACTERISTIC_ID);
assertThat(Measure.newMeasure().forCharacteristic(SOME_CHARACTERISTIC_ID).createNoValue().getCharacteristicId()).isEqualTo(SOME_CHARACTERISTIC_ID);
} }


@Test(expected = NullPointerException.class) @Test(expected = NullPointerException.class)
public void create_from_String_throws_NPE_if_arg_is_null() { public void create_from_String_throws_NPE_if_arg_is_null() {
builder().create((String) null);
Measure.newMeasure().create((String) null);
} }


@Test @Test
} }


@Test @Test
public void getAlertStatus_returns_argument_from_setAlertStatus() {
public void getAlertStatus_returns_argument_from_setQualityGateStatus() {
QualityGateStatus someStatus = new QualityGateStatus(Measure.Level.OK); QualityGateStatus someStatus = new QualityGateStatus(Measure.Level.OK);


assertThat(builder().create(true, null).setQualityGateStatus(someStatus).getQualityGateStatus()).isEqualTo(someStatus);
assertThat(builder().create(false, null).setQualityGateStatus(someStatus).getQualityGateStatus()).isEqualTo(someStatus);
assertThat(builder().create((int) 1, null).setQualityGateStatus(someStatus).getQualityGateStatus()).isEqualTo(someStatus);
assertThat(builder().create((long) 1, null).setQualityGateStatus(someStatus).getQualityGateStatus()).isEqualTo(someStatus);
assertThat(builder().create((double) 1, null).setQualityGateStatus(someStatus).getQualityGateStatus()).isEqualTo(someStatus);
assertThat(builder().create("str").setQualityGateStatus(someStatus).getQualityGateStatus()).isEqualTo(someStatus);
assertThat(builder().create(Measure.Level.OK).setQualityGateStatus(someStatus).getQualityGateStatus()).isEqualTo(someStatus);
assertThat(Measure.newMeasure().setQualityGateStatus(someStatus).create(true, null).getQualityGateStatus()).isEqualTo(someStatus);
assertThat(Measure.newMeasure().setQualityGateStatus(someStatus).create(false, null).getQualityGateStatus()).isEqualTo(someStatus);
assertThat(Measure.newMeasure().setQualityGateStatus(someStatus).create((int) 1, null).getQualityGateStatus()).isEqualTo(someStatus);
assertThat(Measure.newMeasure().setQualityGateStatus(someStatus).create((long) 1, null).getQualityGateStatus()).isEqualTo(someStatus);
assertThat(Measure.newMeasure().setQualityGateStatus(someStatus).create((double) 1, null).getQualityGateStatus()).isEqualTo(someStatus);
assertThat(Measure.newMeasure().setQualityGateStatus(someStatus).create("str").getQualityGateStatus()).isEqualTo(someStatus);
assertThat(Measure.newMeasure().setQualityGateStatus(someStatus).create(Measure.Level.OK).getQualityGateStatus()).isEqualTo(someStatus);
} }


@Test(expected = NullPointerException.class) @Test(expected = NullPointerException.class)
public void newMeasureBuilder_setQualityGateStatus_throws_NPE_if_arg_is_null() {
Measure.newMeasure().setQualityGateStatus(null);
}

@Test(expected = NullPointerException.class)
public void newMeasureBuilder_setVariations_throws_NPE_if_arg_is_null() {
Measure.newMeasure().setVariations(null);
}

@Test(expected = NullPointerException.class)
public void newMeasureBuilder_setDescription_throws_NPE_if_arg_is_null() {
Measure.newMeasure().setDescription(null);
}

@Test(expected = NullPointerException.class)
public void updateMeasureBuilder_setQualityGateStatus_throws_NPE_if_arg_is_null() {
Measure.updateMeasure(Measure.newMeasure().createNoValue()).setQualityGateStatus(null);
}

@Test(expected = NullPointerException.class)
public void updateMeasureBuilder_setVariations_throws_NPE_if_arg_is_null() {
Measure.updateMeasure(Measure.newMeasure().createNoValue()).setVariations(null);
}

@Test(expected = UnsupportedOperationException.class)
public void updateMeasureBuilder_setQualityGateStatus_throws_USO_if_measure_already_has_a_QualityGateStatus() {
QualityGateStatus qualityGateStatus = new QualityGateStatus(Measure.Level.ERROR);

Measure.updateMeasure(Measure.newMeasure().setQualityGateStatus(qualityGateStatus).createNoValue()).setQualityGateStatus(qualityGateStatus);
}

@Test(expected = UnsupportedOperationException.class)
public void updateMeasureBuilder_setVariations_throws_USO_if_measure_already_has_Variations() {
MeasureVariations variations = new MeasureVariations(1d);

Measure.updateMeasure(Measure.newMeasure().setVariations(variations).createNoValue()).setVariations(variations);
}

@Test
@UseDataProvider("all") @UseDataProvider("all")
public void setAlertStatus_throws_NPE_if_arg_is_null(Measure measure) {
measure.setQualityGateStatus(null);
public void updateMeasureBuilder_creates_Measure_with_same_immutable_properties(Measure measure) {
Measure newMeasure = Measure.updateMeasure(measure).create();

assertThat(newMeasure.getValueType()).isEqualTo(measure.getValueType());
assertThat(newMeasure.getRuleId()).isEqualTo(measure.getRuleId());
assertThat(newMeasure.getCharacteristicId()).isEqualTo(measure.getCharacteristicId());
assertThat(newMeasure.getDescription()).isEqualTo(measure.getDescription());
assertThat(newMeasure.hasQualityGateStatus()).isEqualTo(measure.hasQualityGateStatus());
assertThat(newMeasure.hasVariations()).isEqualTo(measure.hasVariations());
} }


@Test @Test
public void getData_returns_argument_from_factory_method() { public void getData_returns_argument_from_factory_method() {
String someData = "lololool"; String someData = "lololool";


assertThat(builder().create(true, someData).getData()).isEqualTo(someData);
assertThat(builder().create(false, someData).getData()).isEqualTo(someData);
assertThat(builder().create((int) 1, someData).getData()).isEqualTo(someData);
assertThat(builder().create((long) 1, someData).getData()).isEqualTo(someData);
assertThat(builder().create((double) 1, someData).getData()).isEqualTo(someData);
assertThat(Measure.newMeasure().create(true, someData).getData()).isEqualTo(someData);
assertThat(Measure.newMeasure().create(false, someData).getData()).isEqualTo(someData);
assertThat(Measure.newMeasure().create((int) 1, someData).getData()).isEqualTo(someData);
assertThat(Measure.newMeasure().create((long) 1, someData).getData()).isEqualTo(someData);
assertThat(Measure.newMeasure().create((double) 1, someData).getData()).isEqualTo(someData);
} }


@Test @Test

+ 20
- 22
server/sonar-server/src/test/java/org/sonar/server/computation/measure/MeasureToMeasureDtoTest.java View File



@Test(expected = NullPointerException.class) @Test(expected = NullPointerException.class)
public void toMeasureDto_throws_NPE_if_Metric_arg_is_null() { public void toMeasureDto_throws_NPE_if_Metric_arg_is_null() {
underTest.toMeasureDto(Measure.builder().createNoValue(), null, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);
underTest.toMeasureDto(Measure.newMeasure().createNoValue(), null, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);
} }


@DataProvider @DataProvider
public static Object[][] all_types_Measures() { public static Object[][] all_types_Measures() {
return new Object[][] { return new Object[][] {
{ Measure.builder().create(true, SOME_DATA), SOME_BOOLEAN_METRIC},
{ Measure.builder().create(1, SOME_DATA), SOME_INT_METRIC},
{ Measure.builder().create((long) 1, SOME_DATA), SOME_LONG_METRIC},
{ Measure.builder().create((double) 2, SOME_DATA), SOME_DOUBLE_METRIC},
{ Measure.builder().create(SOME_STRING), SOME_STRING_METRIC},
{ Measure.builder().create(Measure.Level.OK), SOME_LEVEL_METRIC}
{ Measure.newMeasure().create(true, SOME_DATA), SOME_BOOLEAN_METRIC},
{ Measure.newMeasure().create(1, SOME_DATA), SOME_INT_METRIC},
{ Measure.newMeasure().create((long) 1, SOME_DATA), SOME_LONG_METRIC},
{ Measure.newMeasure().create((double) 2, SOME_DATA), SOME_DOUBLE_METRIC},
{ Measure.newMeasure().create(SOME_STRING), SOME_STRING_METRIC},
{ Measure.newMeasure().create(Measure.Level.OK), SOME_LEVEL_METRIC}
}; };
} }


} }


@Test @Test
@UseDataProvider("all_types_Measures")
public void toMeasureDto_returns_Dto_with_variation_if_Measure_has_MeasureVariations(Measure measure, Metric metric) {
MeasureDto measureDto = underTest.toMeasureDto(measure.setVariations(SOME_VARIATIONS), metric, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);
public void toMeasureDto_returns_Dto_with_variation_if_Measure_has_MeasureVariations() {
MeasureDto measureDto = underTest.toMeasureDto(Measure.newMeasure().setVariations(SOME_VARIATIONS).create(SOME_STRING), SOME_STRING_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);


assertThat(measureDto.getVariation(1)).isEqualTo(1d); assertThat(measureDto.getVariation(1)).isEqualTo(1d);
assertThat(measureDto.getVariation(2)).isEqualTo(2d); assertThat(measureDto.getVariation(2)).isEqualTo(2d);
} }


@Test @Test
@UseDataProvider("all_types_Measures")
public void toMeasureDto_returns_Dto_with_alertStatus_and_alertText_if_Measure_has_QualityGateStatus(Measure measure, Metric metric) {
public void toMeasureDto_returns_Dto_with_alertStatus_and_alertText_if_Measure_has_QualityGateStatus() {
String alertText = "some error"; String alertText = "some error";
MeasureDto measureDto = underTest.toMeasureDto(measure.setQualityGateStatus(new QualityGateStatus(Measure.Level.ERROR, alertText)), metric, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);
MeasureDto measureDto = underTest.toMeasureDto(Measure.newMeasure().setQualityGateStatus(new QualityGateStatus(Measure.Level.ERROR, alertText)).create(SOME_STRING), SOME_STRING_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);


assertThat(measureDto.getAlertStatus()).isEqualTo(Measure.Level.ERROR.name()); assertThat(measureDto.getAlertStatus()).isEqualTo(Measure.Level.ERROR.name());
assertThat(measureDto.getAlertText()).isEqualTo(alertText); assertThat(measureDto.getAlertText()).isEqualTo(alertText);


@Test @Test
public void toMeasureDto_sets_ruleId_if_set_in_Measure() { public void toMeasureDto_sets_ruleId_if_set_in_Measure() {
Measure measure = Measure.builder().forRule(42).createNoValue();
Measure measure = Measure.newMeasure().forRule(42).createNoValue();


assertThat(underTest.toMeasureDto(measure, SOME_BOOLEAN_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID).getRuleId()).isEqualTo(42); assertThat(underTest.toMeasureDto(measure, SOME_BOOLEAN_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID).getRuleId()).isEqualTo(42);
} }


@Test @Test
public void toMeasureDto_sets_characteristicId_if_set_in_Measure() { public void toMeasureDto_sets_characteristicId_if_set_in_Measure() {
Measure measure = Measure.builder().forCharacteristic(42).createNoValue();
Measure measure = Measure.newMeasure().forCharacteristic(42).createNoValue();


assertThat(underTest.toMeasureDto(measure, SOME_BOOLEAN_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID).getCharacteristicId()).isEqualTo(42); assertThat(underTest.toMeasureDto(measure, SOME_BOOLEAN_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID).getCharacteristicId()).isEqualTo(42);
} }


@Test @Test
public void toMeasureDto_maps_value_to_1_or_0_and_data_from_data_field_for_BOOLEAN_metric() { public void toMeasureDto_maps_value_to_1_or_0_and_data_from_data_field_for_BOOLEAN_metric() {
MeasureDto trueMeasureDto = underTest.toMeasureDto(Measure.builder().create(true, SOME_DATA), SOME_BOOLEAN_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);
MeasureDto trueMeasureDto = underTest.toMeasureDto(Measure.newMeasure().create(true, SOME_DATA), SOME_BOOLEAN_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);


assertThat(trueMeasureDto.getValue()).isEqualTo(1d); assertThat(trueMeasureDto.getValue()).isEqualTo(1d);
assertThat(trueMeasureDto.getData()).isEqualTo(SOME_DATA); assertThat(trueMeasureDto.getData()).isEqualTo(SOME_DATA);


MeasureDto falseMeasureDto = underTest.toMeasureDto(Measure.builder().create(false, SOME_DATA), SOME_BOOLEAN_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);
MeasureDto falseMeasureDto = underTest.toMeasureDto(Measure.newMeasure().create(false, SOME_DATA), SOME_BOOLEAN_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);


assertThat(falseMeasureDto.getValue()).isEqualTo(0d); assertThat(falseMeasureDto.getValue()).isEqualTo(0d);
assertThat(falseMeasureDto.getData()).isEqualTo(SOME_DATA); assertThat(falseMeasureDto.getData()).isEqualTo(SOME_DATA);


@Test @Test
public void toMeasureDto_maps_value_and_data_from_data_field_for_INT_metric() { public void toMeasureDto_maps_value_and_data_from_data_field_for_INT_metric() {
MeasureDto trueMeasureDto = underTest.toMeasureDto(Measure.builder().create(123, SOME_DATA), SOME_INT_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);
MeasureDto trueMeasureDto = underTest.toMeasureDto(Measure.newMeasure().create(123, SOME_DATA), SOME_INT_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);


assertThat(trueMeasureDto.getValue()).isEqualTo(123); assertThat(trueMeasureDto.getValue()).isEqualTo(123);
assertThat(trueMeasureDto.getData()).isEqualTo(SOME_DATA); assertThat(trueMeasureDto.getData()).isEqualTo(SOME_DATA);


@Test @Test
public void toMeasureDto_maps_value_and_data_from_data_field_for_LONG_metric() { public void toMeasureDto_maps_value_and_data_from_data_field_for_LONG_metric() {
MeasureDto trueMeasureDto = underTest.toMeasureDto(Measure.builder().create((long) 456, SOME_DATA), SOME_LONG_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);
MeasureDto trueMeasureDto = underTest.toMeasureDto(Measure.newMeasure().create((long) 456, SOME_DATA), SOME_LONG_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);


assertThat(trueMeasureDto.getValue()).isEqualTo(456); assertThat(trueMeasureDto.getValue()).isEqualTo(456);
assertThat(trueMeasureDto.getData()).isEqualTo(SOME_DATA); assertThat(trueMeasureDto.getData()).isEqualTo(SOME_DATA);


@Test @Test
public void toMeasureDto_maps_value_and_data_from_data_field_for_DOUBLE_metric() { public void toMeasureDto_maps_value_and_data_from_data_field_for_DOUBLE_metric() {
MeasureDto trueMeasureDto = underTest.toMeasureDto(Measure.builder().create((double) 789, SOME_DATA), SOME_DOUBLE_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);
MeasureDto trueMeasureDto = underTest.toMeasureDto(Measure.newMeasure().create((double) 789, SOME_DATA), SOME_DOUBLE_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);


assertThat(trueMeasureDto.getValue()).isEqualTo(789); assertThat(trueMeasureDto.getValue()).isEqualTo(789);
assertThat(trueMeasureDto.getData()).isEqualTo(SOME_DATA); assertThat(trueMeasureDto.getData()).isEqualTo(SOME_DATA);


@Test @Test
public void toMeasureDto_maps_to_only_data_for_STRING_metric() { public void toMeasureDto_maps_to_only_data_for_STRING_metric() {
MeasureDto trueMeasureDto = underTest.toMeasureDto(Measure.builder().create(SOME_STRING), SOME_STRING_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);
MeasureDto trueMeasureDto = underTest.toMeasureDto(Measure.newMeasure().create(SOME_STRING), SOME_STRING_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);


assertThat(trueMeasureDto.getValue()).isNull(); assertThat(trueMeasureDto.getValue()).isNull();
assertThat(trueMeasureDto.getData()).isEqualTo(SOME_STRING); assertThat(trueMeasureDto.getData()).isEqualTo(SOME_STRING);


@Test @Test
public void toMeasureDto_maps_name_of_Level_to_data_and_has_no_value_for_LEVEL_metric() { public void toMeasureDto_maps_name_of_Level_to_data_and_has_no_value_for_LEVEL_metric() {
MeasureDto trueMeasureDto = underTest.toMeasureDto(Measure.builder().create(Measure.Level.OK), SOME_LEVEL_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);
MeasureDto trueMeasureDto = underTest.toMeasureDto(Measure.newMeasure().create(Measure.Level.OK), SOME_LEVEL_METRIC, SOME_COMPONENT_ID, SOME_SNAPSHOT_ID);


assertThat(trueMeasureDto.getValue()).isNull(); assertThat(trueMeasureDto.getValue()).isNull();
assertThat(trueMeasureDto.getData()).isEqualTo(Measure.Level.OK.name()); assertThat(trueMeasureDto.getData()).isEqualTo(Measure.Level.OK.name());

+ 10
- 11
server/sonar-server/src/test/java/org/sonar/server/computation/step/QualityGateEventsStepTest.java View File

import org.sonar.server.computation.event.Event; import org.sonar.server.computation.event.Event;
import org.sonar.server.computation.event.EventRepository; import org.sonar.server.computation.event.EventRepository;
import org.sonar.server.computation.measure.Measure; import org.sonar.server.computation.measure.Measure;
import org.sonar.server.computation.measure.Measure;
import org.sonar.server.computation.measure.MeasureRepository; import org.sonar.server.computation.measure.MeasureRepository;
import org.sonar.server.computation.measure.QualityGateStatus; import org.sonar.server.computation.measure.QualityGateStatus;
import org.sonar.server.computation.metric.Metric; import org.sonar.server.computation.metric.Metric;


@Test @Test
public void no_event_created_if_raw_ALERT_STATUS_measure_is_null() { public void no_event_created_if_raw_ALERT_STATUS_measure_is_null() {
when(measureRepository.getRawMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.builder().createNoValue()));
when(measureRepository.getRawMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.newMeasure().createNoValue()));


underTest.execute(); underTest.execute();




@Test @Test
public void no_event_created_if_raw_ALERT_STATUS_measure_is_unsupported_value() { public void no_event_created_if_raw_ALERT_STATUS_measure_is_unsupported_value() {
when(measureRepository.getRawMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.builder().create(INVALID_ALERT_STATUS)));
when(measureRepository.getRawMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.newMeasure().create(INVALID_ALERT_STATUS)));


underTest.execute(); underTest.execute();


public void no_event_created_if_no_base_ALERT_STATUS_and_raw_is_OK() { public void no_event_created_if_no_base_ALERT_STATUS_and_raw_is_OK() {
QualityGateStatus someQGStatus = new QualityGateStatus(Measure.Level.OK); QualityGateStatus someQGStatus = new QualityGateStatus(Measure.Level.OK);


when(measureRepository.getRawMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.builder().createNoValue().setQualityGateStatus(someQGStatus)));
when(measureRepository.getBaseMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.builder().createNoValue()));
when(measureRepository.getRawMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.newMeasure().setQualityGateStatus(someQGStatus).createNoValue()));
when(measureRepository.getBaseMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.newMeasure().createNoValue()));


underTest.execute(); underTest.execute();


private void verify_event_created_if_no_base_ALERT_STATUS_measure(Measure.Level rawAlterStatus, String expectedLabel) { private void verify_event_created_if_no_base_ALERT_STATUS_measure(Measure.Level rawAlterStatus, String expectedLabel) {
QualityGateStatus someQGStatus = new QualityGateStatus(rawAlterStatus, ALERT_TEXT); QualityGateStatus someQGStatus = new QualityGateStatus(rawAlterStatus, ALERT_TEXT);


when(measureRepository.getRawMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.builder().createNoValue().setQualityGateStatus(someQGStatus)));
when(measureRepository.getBaseMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.builder().createNoValue()));
when(measureRepository.getRawMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.newMeasure().setQualityGateStatus(someQGStatus).createNoValue()));
when(measureRepository.getBaseMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.newMeasure().createNoValue()));


underTest.execute(); underTest.execute();




@Test @Test
public void no_event_created_if_base_ALERT_STATUS_measure_but_status_is_the_same() { public void no_event_created_if_base_ALERT_STATUS_measure_but_status_is_the_same() {
when(measureRepository.getRawMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.builder().createNoValue().setQualityGateStatus(OK_QUALITY_GATE_STATUS)));
when(measureRepository.getBaseMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.builder().createNoValue().setQualityGateStatus(OK_QUALITY_GATE_STATUS)));
when(measureRepository.getRawMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.newMeasure().setQualityGateStatus(OK_QUALITY_GATE_STATUS).createNoValue()));
when(measureRepository.getBaseMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.newMeasure().setQualityGateStatus(OK_QUALITY_GATE_STATUS).createNoValue()));


underTest.execute(); underTest.execute();




private void verify_event_created_if_base_ALERT_STATUS_measure_exists_and_status_has_changed(Measure.Level previousAlertStatus, private void verify_event_created_if_base_ALERT_STATUS_measure_exists_and_status_has_changed(Measure.Level previousAlertStatus,
QualityGateStatus newQualityGateStatus, String expectedLabel) { QualityGateStatus newQualityGateStatus, String expectedLabel) {
when(measureRepository.getRawMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.builder().createNoValue().setQualityGateStatus(newQualityGateStatus)));
when(measureRepository.getRawMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(of(Measure.newMeasure().setQualityGateStatus(newQualityGateStatus).createNoValue()));
when(measureRepository.getBaseMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn( when(measureRepository.getBaseMeasure(PROJECT_COMPONENT, alertStatusMetric)).thenReturn(
of(Measure.builder().createNoValue().setQualityGateStatus(new QualityGateStatus(previousAlertStatus))));
of(Measure.newMeasure().setQualityGateStatus(new QualityGateStatus(previousAlertStatus)).createNoValue()));


underTest.execute(); underTest.execute();



+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/computation/step/QualityProfileEventsStepTest.java View File

} }


private static Measure newMeasure(@Nullable QualityProfile... qps) { private static Measure newMeasure(@Nullable QualityProfile... qps) {
return Measure.builder().create(toJson(qps));
return Measure.newMeasure().create(toJson(qps));
} }


private static String toJson(@Nullable QualityProfile... qps) { private static String toJson(@Nullable QualityProfile... qps) {

Loading…
Cancel
Save