diff --git a/providers/openfeature-provider-ofrep/src/openfeature/contrib/provider/ofrep/__init__.py b/providers/openfeature-provider-ofrep/src/openfeature/contrib/provider/ofrep/__init__.py index 48aec7f5..69372e12 100644 --- a/providers/openfeature-provider-ofrep/src/openfeature/contrib/provider/ofrep/__init__.py +++ b/providers/openfeature-provider-ofrep/src/openfeature/contrib/provider/ofrep/__init__.py @@ -168,7 +168,7 @@ def _resolve( value=data["value"], reason=Reason[data["reason"]], variant=data["variant"], - flag_metadata=data["metadata"], + flag_metadata=data.get("metadata", {}), ) def _handle_error(self, exception: requests.RequestException) -> NoReturn: diff --git a/providers/openfeature-provider-ofrep/tests/test_provider.py b/providers/openfeature-provider-ofrep/tests/test_provider.py index f698a166..a84b369d 100644 --- a/providers/openfeature-provider-ofrep/tests/test_provider.py +++ b/providers/openfeature-provider-ofrep/tests/test_provider.py @@ -166,6 +166,28 @@ def test_provider_typecheck_flag_value(ofrep_provider, requests_mock): ofrep_provider.resolve_boolean_details("flag_key", False) +def test_provider_missing_metadata_field(ofrep_provider, requests_mock): + """Test that provider handles missing metadata field gracefully""" + requests_mock.post( + "http://localhost:8080/ofrep/v1/evaluate/flags/flag_key", + json={ + "key": "flag_key", + "reason": "TARGETING_MATCH", + "variant": "true", + "value": True, + }, + ) + + resolution = ofrep_provider.resolve_boolean_details("flag_key", False) + + assert resolution == FlagResolutionDetails( + value=True, + reason=Reason.TARGETING_MATCH, + variant="true", + flag_metadata={}, + ) + + @pytest.mark.parametrize( "base_url", [