"""Unit tests feature variant force rule model.""" from unittest.mock import MagicMock import pytest from features.constants import context as context_constants from features.models import feature_variant_force_rule as force_rule @pytest.mark.parametrize( 'test_input,expected_output', [ (['id 1', 'id 2'], ['id 1', 'id 2']), ('dumb', ['d', 'u', 'm', 'b']), ({'id': 'dumb'}, ['id']), ('', []), ], ) def test_create(test_input, expected_output): """Test the creation of a rule.""" def filter_method(x): return x rule = force_rule.FeatureVariantForceRule('variant_name', filter_method, test_input) assert rule.filter is filter_method assert rule.variant_name == 'variant_name' assert rule.values == expected_output def test_feature_variant_override_behavior(): """Test the feature variant force rule.""" spy = MagicMock() def filter(ids, context): spy() return context.get('id') in ids rule = force_rule.FeatureVariantForceRule('variant_name', filter, ['id 1', 'id 2']) assert rule.matches(dict(id='id 1')) assert not rule.matches(dict(id='random')) assert spy.called def test_creation_from_context(): """Verify that from_context creates the expected variant.""" passed_context = {context_constants.USER_ID: 'alw:7123'} instance = force_rule.FeatureVariantForceRule.from_context( 'variant_name', passed_context ) assert instance.matches(passed_context)