示例#1
0
def test_to_json(experiments_yaml_obj):
    event = YamlEvent.from_yaml(experiments_yaml_obj)
    event_properties = {}
    for p in experiments_yaml_obj['properties']:
        event_properties[p['name']] = YamlProperty.from_yaml(p).to_json()

    expected = {
        'version': 1,
        'name': 'Experiment Enrolled',
        'description': 'Track whom has been added to an A/B Test Experiment',
        'rules': {
            'labels': {
                'area': 'experiments'
            },
            'properties': {
                'context': {},
                'traits': {},
                'properties': {
                    'type': 'object',
                    'properties': event_properties,
                    'required': ['experiment']
                }
            },
            'required': ['properties'],
            '$schema': 'http://json-schema.org/draft-07/schema#',
            'type': 'object'
        }
    }

    actual = event.to_json()
    assert expected == actual
示例#2
0
def test_default_values(property_yaml_obj):
    property_yaml_obj.pop('required')
    property_yaml_obj.pop('allowNull')

    prop = YamlProperty.from_yaml(property_yaml_obj)

    assert prop.required == False
    assert prop.allow_null == False
示例#3
0
def test_parsing_top_level_attrs(property_yaml_obj):
    prop = YamlProperty.from_yaml(property_yaml_obj)

    assert prop.name == 'variation'
    assert prop.description == 'What variation of the group'
    assert prop.type == 'string'
    assert prop.required == False
    assert prop.allow_null == True
示例#4
0
def test_to_json(property_yaml_obj):
    prop = YamlProperty.from_yaml(property_yaml_obj)

    expected = {
        'description': 'What variation of the group',
        'pattern': 'experiment|control',
        'type': ['string', 'null']
    }

    actual = prop.to_json()

    assert expected == actual
示例#5
0
def test_to_json_traits(tracking_plan_yaml, tracking_plan_trait_yaml):
    plan = YamlTrackingPlan(tracking_plan_yaml)
    plan.add_identify_trait(tracking_plan_trait_yaml)

    json_plan = plan.to_json()

    json_traits = json_plan['rules']['identify']['properties']['traits'][
        'properties']

    assert len(json_traits) == 1
    expected = YamlProperty(tracking_plan_trait_yaml).to_json()
    actual = json_traits['email']
    assert actual == expected
示例#6
0
 def add_group_trait(self, trait_yaml):
     trait_property = YamlProperty(trait_yaml)
     self._group_traits.append(trait_property)
示例#7
0
 def add_identify_trait(self, trait_yaml):
     trait_property = YamlProperty(trait_yaml)
     self._identify_traits.append(trait_property)
示例#8
0
def test_type_any_to_json(property_type_any_yaml_obj):
    prop = YamlProperty.from_yaml(property_type_any_yaml_obj)

    actual = prop.to_json()

    assert 'type' not in actual
示例#9
0
def test_valid_name(property_yaml_obj):
    property_yaml_obj['name'] = 'FooBar'

    with assert_raises_validation_error(
            expected_msg="FooBar is not a valid property name"):
        YamlProperty(property_yaml_obj)
示例#10
0
def test_valid_type(property_yaml_obj):
    property_yaml_obj['type'] = 'foo'
    property_yaml_obj.pop('pattern')
    with assert_raises_validation_error(
            expected_msg="Type foo is not a valid property type"):
        YamlProperty(property_yaml_obj)
示例#11
0
def test_validate_pattern_on_string_type(property_yaml_obj):
    property_yaml_obj['type'] = 'number'

    with assert_raises_validation_error(
            expected_msg=f'Property variation cannot specify a pattern'):
        YamlProperty(property_yaml_obj)
示例#12
0
 def __init__(self, event_yaml):
     self._event_yaml = event_yaml
     self._properties = [YamlProperty(p) for p in event_yaml['properties']]
     self.validate()