def test_evaluate_second_variation_no_target_match(): feature = copy(minimal_feature) hash_value = int(hashlib.sha1('feature.key.abc.xyz'.encode('utf-8')).hexdigest()[:15], 16) / float( 0xFFFFFFFFFFFFFFF) feature['variations'] = [ { u'value': True, u'weight': floor(hash_value) - 1, u'targets': [ { u'attribute': u'bizzle', u'op': u'in', u'values': [u'defg'] } ] }, { u'value': False, u'weight': 100 - (floor(hash_value) - 1), u'targets': [ { u'attribute': u'bazzle', u'op': u'in', u'values': [u'zyx'] }, { u'attribute': u'bizzle', u'op': u'in', u'values': [u'defg'] } ] } ] assert util._evaluate(feature, user) == False
def test_evaluate_first_variation_both_targets_match_user_key_match_no_user_target(): feature = copy(minimal_feature) feature['variations'] = [ { u'value': True, u'weight': 0, u'targets': [ { u'attribute': u'key', u'op': u'in', u'values': ['xyz'] }, ] }, { u'value': False, u'weight': 100, u'targets': [ { u'attribute': u'bazzle', u'op': u'in', u'values': [u'zyx'] }, { u'attribute': u'bizzle', u'op': u'in', u'values': [u'def'] } ] } ] assert util._evaluate(feature, user) == True
def test_evaluate_second_variation_target_match(): feature = copy(minimal_feature) feature['variations'] = [ { u'value': True, u'weight': 0, u'targets': [ { u'attribute': u'bizzle', u'op': u'in', u'values': [u'defg'] } ] }, { u'value': False, u'weight': 100, u'targets': [ { u'attribute': u'bazzle', u'op': u'in', u'values': [u'zyx'] }, { u'attribute': u'bizzle', u'op': u'in', u'values': [u'def'] } ] } ] assert util._evaluate(feature, user) == False
def test_evaluate_second_variation_no_target_match(): feature = copy(minimal_feature) hash_value = int( hashlib.sha1('feature.key.abc.xyz'.encode('utf-8')).hexdigest()[:15], 16) / float(0xFFFFFFFFFFFFFFF) feature['variations'] = [{ u'value': True, u'weight': floor(hash_value) - 1, u'targets': [{ u'attribute': u'bizzle', u'op': u'in', u'values': [u'defg'] }] }, { u'value': False, u'weight': 100 - (floor(hash_value) - 1), u'targets': [{ u'attribute': u'bazzle', u'op': u'in', u'values': [u'zyx'] }, { u'attribute': u'bizzle', u'op': u'in', u'values': [u'defg'] }] }] assert util._evaluate(feature, user) == False
def test_evaluate_second_variation_target_match(): feature = copy(minimal_feature) feature['variations'] = [{ u'value': True, u'weight': 0, u'targets': [{ u'attribute': u'bizzle', u'op': u'in', u'values': [u'defg'] }] }, { u'value': False, u'weight': 100, u'targets': [{ u'attribute': u'bazzle', u'op': u'in', u'values': [u'zyx'] }, { u'attribute': u'bizzle', u'op': u'in', u'values': [u'def'] }] }] assert util._evaluate(feature, user) == False
def test_evaluate_first_variation_both_targets_match_user_key_match_no_user_target( ): feature = copy(minimal_feature) feature['variations'] = [{ u'value': True, u'weight': 0, u'targets': [ { u'attribute': u'key', u'op': u'in', u'values': ['xyz'] }, ] }, { u'value': False, u'weight': 100, u'targets': [{ u'attribute': u'bazzle', u'op': u'in', u'values': [u'zyx'] }, { u'attribute': u'bizzle', u'op': u'in', u'values': [u'def'] }] }] assert util._evaluate(feature, user) == True
def cb(feature): if feature is None: val = default else: val = _evaluate(feature, user) if val is None: val = default self._send({"kind": "feature", "key": key, "user": user, "value": val}) return val
def cb(feature): if feature is None: val = default else: val = _evaluate(feature, user) if val is None: val = default self._send({ 'kind': 'feature', 'key': key, 'user': user, 'value': val }) return val
def test_evaluate_feature_off(): feature = copy(minimal_feature) feature['on'] = False assert util._evaluate(feature, user) == None