"""Tests for feature flags wrapper classes.""" from unittest.mock import MagicMock, patch import pytest from pdp.connectors.features import ( FEATURE_DISABLED, FEATURE_ON, IDENTITY_ID_ATTRIBUTE, BooleanFeature, Feature, ) from pdp.connectors.features.wrappers import IS_ENABLED_ALL_ID @pytest.mark.parametrize( "feature_value, expected_return_value", [ (FEATURE_ON, True), (FEATURE_DISABLED, False), ("no.such.feature.value", False), ], ) @patch("pdp.connectors.features.SplitioClient") def test_boolean_feature( mock_splitio_client: MagicMock, feature_value: str, expected_return_value: bool, identity_uuid: str, ) -> None: """Verify the boolean feature class.""" mock_splitio_client.get_treatment.return_value = feature_value my_feature = BooleanFeature( client=mock_splitio_client, feature_name="my_awesome_feature" ) assert my_feature.is_on_for_identity(identity_uuid) == expected_return_value mock_splitio_client.get_treatment.assert_called_with( key=IDENTITY_ID_ATTRIBUTE, feature_flag_name="my_awesome_feature", attributes={IDENTITY_ID_ATTRIBUTE: identity_uuid}, ) @pytest.mark.parametrize( "feature_value, expected_return_value", [ (FEATURE_ON, True), (FEATURE_DISABLED, False), ("no.such.feature.value", False), ], ) @patch("pdp.connectors.features.SplitioClient") def test_boolean_feature__is_enabled( mock_splitio_client: MagicMock, feature_value: str, expected_return_value: bool, ) -> None: """Verify the boolean feature class.""" mock_splitio_client.get_treatment.return_value = feature_value my_feature = BooleanFeature( client=mock_splitio_client, feature_name="my_awesome_feature" ) assert my_feature.is_enabled() == expected_return_value mock_splitio_client.get_treatment.assert_called_with( key=IDENTITY_ID_ATTRIBUTE, feature_flag_name="my_awesome_feature", attributes={IDENTITY_ID_ATTRIBUTE: IS_ENABLED_ALL_ID}, ) @pytest.mark.parametrize( "feature_value, expected_return_value", [ (FEATURE_ON, FEATURE_ON), (FEATURE_DISABLED, FEATURE_DISABLED), ("test", "test"), ], ) @patch("pdp.connectors.features.SplitioClient") def test_feature( mock_splitio_client: MagicMock, feature_value: str, expected_return_value: str, identity_uuid: str, ) -> None: """Verify the boolean feature class.""" mock_splitio_client.get_treatment.return_value = feature_value my_feature = Feature(client=mock_splitio_client, feature_name="my_awesome_feature") assert my_feature.get_value_for_identity(identity_uuid) == expected_return_value mock_splitio_client.get_treatment.assert_called_with( key=IDENTITY_ID_ATTRIBUTE, feature_flag_name="my_awesome_feature", attributes={IDENTITY_ID_ATTRIBUTE: identity_uuid}, )