Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 23 additions & 7 deletions src/main/java/com/google/firebase/remoteconfig/ParameterValue.java
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,13 @@ public static PersonalizationValue ofPersonalization(String personalizationId) {
*
* @param experimentId The experiment ID.
* @param variantValues The list of experiment variant values.
* @param exposurePercent The percentage of users exposed to the experiment.
* @return A {@link ParameterValue.ExperimentValue} instance.
*/
public static ExperimentValue ofExperiment(String experimentId,
List<ExperimentVariantValue> variantValues) {
return new ExperimentValue(experimentId, variantValues);
public static ExperimentValue of(
String experimentId,
List<ExperimentVariantValue> variantValues, Double exposurePercent) {
return new ExperimentValue(experimentId, variantValues, exposurePercent);
}

abstract ParameterValueResponse toParameterValueResponse();
Expand Down Expand Up @@ -119,7 +121,8 @@ static ParameterValue fromParameterValueResponse(
.map(evv -> new ExperimentVariantValue(
evv.getVariantId(), evv.getValue(), evv.getNoChange()))
.collect(toList());
return ParameterValue.ofExperiment(ev.getExperimentId(), variantValues);
return ParameterValue.ofExperiment(
ev.getExperimentId(), variantValues, ev.getExposurePercent());
}
return ParameterValue.of(parameterValueResponse.getValue());
}
Expand Down Expand Up @@ -400,10 +403,13 @@ public int hashCode() {
public static final class ExperimentValue extends ParameterValue {
private final String experimentId;
private final List<ExperimentVariantValue> variantValues;
private final Double exposurePercent;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

A getter method for exposurePercent is missing in the ExperimentValue class. This is necessary to access the value of this field from outside the class, maintaining proper encapsulation and usability.


private ExperimentValue(String experimentId, List<ExperimentVariantValue> variantValues) {

private ExperimentValue(String experimentId, List<ExperimentVariantValue> variantValues, Double exposurePercent) {
this.experimentId = experimentId;
this.variantValues = variantValues;
this.exposurePercent = exposurePercent;
}

/**
Expand All @@ -415,6 +421,15 @@ public String getExperimentId() {
return experimentId;
}


/**
* Gets the percentage of users exposed to the experiment.
*
* @return The exposure percent
*/
public Double getExposurePercent() { return exposurePercent; }


/**
* Gets a collection of variant values served by the experiment.
*
Expand Down Expand Up @@ -448,12 +463,13 @@ public boolean equals(Object o) {
}
ExperimentValue that = (ExperimentValue) o;
return Objects.equals(experimentId, that.experimentId)
&& Objects.equals(variantValues, that.variantValues);
&& Objects.equals(variantValues, that.variantValues)
&& Objects.equals(exposurePercent, that.exposurePercent);
}

@Override
public int hashCode() {
return Objects.hash(experimentId, variantValues);
return Objects.hash(experimentId, variantValues, exposurePercent);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,9 @@ public static final class ExperimentValueResponse {
@Key("variantValue")
private List<ExperimentVariantValueResponse> experimentVariantValues;

@Key("exposurePercent")
private Double exposurePercent;

public String getExperimentId() {
return experimentId;
}
Expand All @@ -296,6 +299,11 @@ public List<ExperimentVariantValueResponse> getExperimentVariantValues() {
return experimentVariantValues;
}

public Double getExposurePercent() {
return exposurePercent;
}


public ExperimentValueResponse setExperimentId(String experimentId) {
this.experimentId = experimentId;
return this;
Expand All @@ -306,6 +314,11 @@ public ExperimentValueResponse setExperimentVariantValues(
this.experimentVariantValues = experimentVariantValues;
return this;
}

public ExperimentValueResponse setExposurePercent(Double exposurePercent) {
this.exposurePercent = exposurePercent;
return this;
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public void testCreateExperimentValue() {
ParameterValue.ofExperiment("experiment_1", ImmutableList.of(
ExperimentVariantValue.of("variant_1", "value_1"),
ExperimentVariantValue.ofNoChange("variant_2")
));
), 10.0);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The testCreateExperimentValue method is updated to pass exposurePercent, but there is no assertion to verify its value. Please add an assertion to ensure the exposurePercent is correctly set and retrieved.

Suggested change
), 10.0);
), 10.0);
assertEquals("experiment_1", parameterValue.getExperimentId());
assertEquals(2, parameterValue.getExperimentVariantValues().size());
assertEquals(10.0, parameterValue.getExposurePercent(), 0.0);


assertEquals("experiment_1", parameterValue.getExperimentId());
assertEquals(2, parameterValue.getExperimentVariantValues().size());
Expand All @@ -77,6 +77,8 @@ public void testCreateExperimentValue() {
assertEquals("variant_2", variant2.getVariantId());
assertEquals(null, variant2.getValue());
assertEquals(true, variant2.isNoChange());
assertEquals(10.0, parameterValue.getExposurePercent(), 0.0);

}

@Test
Expand Down Expand Up @@ -116,19 +118,19 @@ public void testEquality() {
ParameterValue.ExperimentValue experimentValueOne =
ParameterValue.ofExperiment("experiment_1", ImmutableList.of(
ExperimentVariantValue.of("variant_1", "value_1")
));
), 10.0);
ParameterValue.ExperimentValue experimentValueTwo =
ParameterValue.ofExperiment("experiment_1", ImmutableList.of(
ExperimentVariantValue.of("variant_1", "value_1")
));
), 10.0);
ParameterValue.ExperimentValue experimentValueThree =
ParameterValue.ofExperiment("experiment_2", ImmutableList.of(
ExperimentVariantValue.of("variant_1", "value_1")
));
), 10.0);
ParameterValue.ExperimentValue experimentValueFour =
ParameterValue.ofExperiment("experiment_1", ImmutableList.of(
ExperimentVariantValue.of("variant_2", "value_2")
));
), 10.0);
Comment on lines +121 to +133

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The testEquality method for ExperimentValue is updated to include exposurePercent in the constructor calls, but the equals and hashCode methods in ParameterValue.ExperimentValue are not updated to consider exposurePercent. This means the equality checks in this test might not be fully accurate or could pass incorrectly if exposurePercent values differ. This is a high-severity correctness issue.


assertEquals(experimentValueOne, experimentValueTwo);
assertNotEquals(experimentValueOne, experimentValueThree);
Expand Down
Loading