diff --git a/providers/go-feature-flag/src/main/java/dev/openfeature/contrib/providers/gofeatureflag/GoFeatureFlagProvider.java b/providers/go-feature-flag/src/main/java/dev/openfeature/contrib/providers/gofeatureflag/GoFeatureFlagProvider.java index 462a37a82..6beb780af 100644 --- a/providers/go-feature-flag/src/main/java/dev/openfeature/contrib/providers/gofeatureflag/GoFeatureFlagProvider.java +++ b/providers/go-feature-flag/src/main/java/dev/openfeature/contrib/providers/gofeatureflag/GoFeatureFlagProvider.java @@ -395,6 +395,9 @@ private ErrorCode mapErrorCode(String errorCode) { */ private ImmutableMetadata convertFlagMetadata(Map flagMetadata) { ImmutableMetadata.ImmutableMetadataBuilder builder = ImmutableMetadata.builder(); + if (flagMetadata == null) { + return builder.build(); + } flagMetadata.forEach((k, v) -> { if (v instanceof Long) { builder.addLong(k, (Long) v); diff --git a/providers/go-feature-flag/src/test/java/dev/openfeature/contrib/providers/gofeatureflag/GoFeatureFlagProviderTest.java b/providers/go-feature-flag/src/test/java/dev/openfeature/contrib/providers/gofeatureflag/GoFeatureFlagProviderTest.java index 2311bd234..f66810582 100644 --- a/providers/go-feature-flag/src/test/java/dev/openfeature/contrib/providers/gofeatureflag/GoFeatureFlagProviderTest.java +++ b/providers/go-feature-flag/src/test/java/dev/openfeature/contrib/providers/gofeatureflag/GoFeatureFlagProviderTest.java @@ -701,6 +701,23 @@ void should_not_fail_if_receive_an_unknown_field_in_response() { assertEquals(want, got); } + @SneakyThrows + @Test + void should_not_fail_if_no_metadata_in_response() { + GoFeatureFlagProvider g = new GoFeatureFlagProvider(GoFeatureFlagProviderOptions.builder().endpoint(this.baseUrl.toString()).timeout(1000).build()); + String providerName = this.testName; + OpenFeatureAPI.getInstance().setProviderAndWait(providerName, g); + Client client = OpenFeatureAPI.getInstance().getClient(providerName); + FlagEvaluationDetails got = client.getBooleanDetails("no_metadata",false, this.evaluationContext); + FlagEvaluationDetails want = FlagEvaluationDetails.builder() + .value(true) + .variant("True") + .flagKey("no_metadata") + .reason(Reason.TARGETING_MATCH.name()) + .build(); + assertEquals(want, got); + } + @SneakyThrows @Test void should_publish_events() { diff --git a/providers/go-feature-flag/src/test/resources/mock_responses/no_metadata.json b/providers/go-feature-flag/src/test/resources/mock_responses/no_metadata.json new file mode 100644 index 000000000..dd20b510c --- /dev/null +++ b/providers/go-feature-flag/src/test/resources/mock_responses/no_metadata.json @@ -0,0 +1,9 @@ +{ + "trackEvents": true, + "variationType": "True", + "failed": false, + "version": 0, + "reason": "TARGETING_MATCH", + "errorCode": "", + "value": true +}