diff --git a/src/main/java/dev/openfeature/sdk/FlagEvaluationDetails.java b/src/main/java/dev/openfeature/sdk/FlagEvaluationDetails.java index 0a60565c3..78e04c718 100644 --- a/src/main/java/dev/openfeature/sdk/FlagEvaluationDetails.java +++ b/src/main/java/dev/openfeature/sdk/FlagEvaluationDetails.java @@ -1,17 +1,21 @@ package dev.openfeature.sdk; +import javax.annotation.Nullable; + +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; - -import javax.annotation.Nullable; +import lombok.NoArgsConstructor; /** - * Contains information about how the evaluation happened, including any resolved values. + * Contains information about how the provider resolved a flag, including the resolved value. * * @param the type of the flag being evaluated. */ @Data @Builder +@NoArgsConstructor +@AllArgsConstructor public class FlagEvaluationDetails implements BaseEvaluation { private String flagKey; diff --git a/src/main/java/dev/openfeature/sdk/ProviderEvaluation.java b/src/main/java/dev/openfeature/sdk/ProviderEvaluation.java index 42441a8e7..c4720263f 100644 --- a/src/main/java/dev/openfeature/sdk/ProviderEvaluation.java +++ b/src/main/java/dev/openfeature/sdk/ProviderEvaluation.java @@ -1,12 +1,21 @@ package dev.openfeature.sdk; +import javax.annotation.Nullable; + +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; -import javax.annotation.Nullable; - -@SuppressWarnings("checkstyle:MissingJavadocType") -@Data @Builder +/** + * Contains information about how the a flag was evaluated, including the resolved value. + * + * @param the type of the flag being evaluated. + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor public class ProviderEvaluation implements BaseEvaluation { T value; @Nullable String variant; diff --git a/src/test/java/dev/openfeature/sdk/FlagEvaluationDetailsTest.java b/src/test/java/dev/openfeature/sdk/FlagEvaluationDetailsTest.java new file mode 100644 index 000000000..9a6df1a65 --- /dev/null +++ b/src/test/java/dev/openfeature/sdk/FlagEvaluationDetailsTest.java @@ -0,0 +1,48 @@ +package dev.openfeature.sdk; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class FlagEvaluationDetailsTest { + + @Test + @DisplayName("Should have empty constructor") + public void empty() { + FlagEvaluationDetails details = new FlagEvaluationDetails(); + assertNotNull(details); + } + + @Test + @DisplayName("Should have flagKey, value, variant, reason, errorCode, errorMessage, metadata constructor") + // removeing this constructor is a breaking change! + public void sevenArgConstructor() { + + String flagKey = "my-flag"; + Integer value = 100; + String variant = "1-hundred"; + Reason reason = Reason.DEFAULT; + ErrorCode errorCode = ErrorCode.GENERAL; + String errorMessage = "message"; + ImmutableMetadata metadata = ImmutableMetadata.builder().build(); + + FlagEvaluationDetails details = new FlagEvaluationDetails<>( + flagKey, + value, + variant, + reason.toString(), + errorCode, + errorMessage, + metadata); + + assertEquals(flagKey, details.getFlagKey()); + assertEquals(value, details.getValue()); + assertEquals(variant, details.getVariant()); + assertEquals(reason.toString(), details.getReason()); + assertEquals(errorCode, details.getErrorCode()); + assertEquals(errorMessage, details.getErrorMessage()); + assertEquals(metadata, details.getFlagMetadata()); + } +} diff --git a/src/test/java/dev/openfeature/sdk/ProviderEvaluationTest.java b/src/test/java/dev/openfeature/sdk/ProviderEvaluationTest.java new file mode 100644 index 000000000..16215dc1c --- /dev/null +++ b/src/test/java/dev/openfeature/sdk/ProviderEvaluationTest.java @@ -0,0 +1,45 @@ +package dev.openfeature.sdk; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class ProviderEvaluationTest { + + @Test + @DisplayName("Should have empty constructor") + public void empty() { + ProviderEvaluation details = new ProviderEvaluation(); + assertNotNull(details); + } + + @Test + @DisplayName("Should have value, variant, reason, errorCode, errorMessage, metadata constructor") + // removeing this constructor is a breaking change! + public void sixArgConstructor() { + + Integer value = 100; + String variant = "1-hundred"; + Reason reason = Reason.DEFAULT; + ErrorCode errorCode = ErrorCode.GENERAL; + String errorMessage = "message"; + ImmutableMetadata metadata = ImmutableMetadata.builder().build(); + + ProviderEvaluation details = new ProviderEvaluation<>( + value, + variant, + reason.toString(), + errorCode, + errorMessage, + metadata); + + assertEquals(value, details.getValue()); + assertEquals(variant, details.getVariant()); + assertEquals(reason.toString(), details.getReason()); + assertEquals(errorCode, details.getErrorCode()); + assertEquals(errorMessage, details.getErrorMessage()); + assertEquals(metadata, details.getFlagMetadata()); + } +}