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
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
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
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
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
def add_group_trait(self, trait_yaml): trait_property = YamlProperty(trait_yaml) self._group_traits.append(trait_property)
def add_identify_trait(self, trait_yaml): trait_property = YamlProperty(trait_yaml) self._identify_traits.append(trait_property)
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
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)
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)
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)
def __init__(self, event_yaml): self._event_yaml = event_yaml self._properties = [YamlProperty(p) for p in event_yaml['properties']] self.validate()