this will in turn make adding a update method on MeasureRepository more meaningfultags/5.2-RC1
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) { |
@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) { |
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) { |
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) { |
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 |
@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()); |
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(); | ||||
} | } | ||||
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) { |