diff --git a/mixpanel/flags/local_feature_flags.py b/mixpanel/flags/local_feature_flags.py index 7409e1b..140f849 100644 --- a/mixpanel/flags/local_feature_flags.py +++ b/mixpanel/flags/local_feature_flags.py @@ -233,7 +233,7 @@ def get_variant( logger.warning("Cannot find flag definition for key: '%s'", flag_key) return fallback_value.as_fallback(FallbackReason.flag_not_found()) - if not (context_value := context.get(flag_definition.context)): + if (context_value := context.get(flag_definition.context)) is None: logger.warning( "The rollout context, '%s' for flag, '%s' is not present in the supplied context dictionary", flag_definition.context, diff --git a/mixpanel/flags/test_local_feature_flags.py b/mixpanel/flags/test_local_feature_flags.py index 6f5554b..eba5eb0 100644 --- a/mixpanel/flags/test_local_feature_flags.py +++ b/mixpanel/flags/test_local_feature_flags.py @@ -832,6 +832,30 @@ async def test_get_variant_tags_missing_context(self): assert result.fallback_reason.kind == "MISSING_CONTEXT_KEY" assert result.fallback_reason.message == "distinct_id" + @respx.mock + async def test_get_variant_evaluates_zero_context_value(self): + flag = create_test_flag(context="account_age_days") + await self.setup_flags([flag]) + fallback = SelectedVariant(variant_value="fb") + result = self._flags.get_variant( + TEST_FLAG_KEY, + fallback, + {"distinct_id": DISTINCT_ID, "account_age_days": 0}, + ) + assert result.variant_source == VariantSource.LOCAL + + @respx.mock + async def test_get_variant_evaluates_false_context_value(self): + flag = create_test_flag(context="is_subscriber") + await self.setup_flags([flag]) + fallback = SelectedVariant(variant_value="fb") + result = self._flags.get_variant( + TEST_FLAG_KEY, + fallback, + {"distinct_id": DISTINCT_ID, "is_subscriber": False}, + ) + assert result.variant_source == VariantSource.LOCAL + @respx.mock async def test_get_variant_tags_no_rollout_match(self): flag = create_test_flag(rollout_percentage=0.0)