def test_fail_to_deserialize_event_data_with_invalid_timestamp(): data = build_event_data(timestamp='2020-05-15TFOOBAR') with pytest.raises(SchemaError) as e: EventSchema().load(data) assert "{'timestamp': ['Not a valid datetime.']}" in str(e.value)
def test_fail_to_deserialize_event_data_with_invalid_version(): data = build_event_data(version='foobar') with pytest.raises(SchemaError) as e: EventSchema().load(data) assert "{'version': ['Not a valid integer.']}" in str(e.value)
def test_deserialize_event_data_with_timezone_aware_timestamp(): timestamp = '2020-05-15T20:35:45.000+05:00' data = build_event_data(timestamp=timestamp) event = EventSchema().load(data) assert event.timestamp == dateutil.parser.parse(timestamp) assert event.timestamp.utcoffset() == timedelta(hours=5)
def test_deserialize_event_data_ignoring_unknown_attributes(): data = build_event_data() data['foo'] = 'bar' data['one'] = 1 payload = EventSchema().load(data) assert payload is not None assert isinstance(payload, Event)
def test_fail_to_deserialize_event_data_with_required_attribute_set_to_null(attribute_key): data = build_event_data() data[attribute_key] = None with pytest.raises(SchemaError) as e: EventSchema().load(data) assert str(e.value) == ( "Invalid MEGA payload. There is an error in the 'event' section: " "{{'{0}': ['Field may not be null.']}}".format(attribute_key) )
def test_fail_to_deserialize_event_data_without_required_attribute(attribute_key): data = build_event_data() del data[attribute_key] with pytest.raises(SchemaError) as e: EventSchema().load(data) assert str(e.value) == ( "Invalid MEGA payload. There is an error in the 'event' section: " "{{'{0}': ['Missing data for required field.']}}".format(attribute_key) )
def test_fail_to_deserialize_event_data_with_invalid_attribute_key(): data = build_event_data( attributes={ 'foo': 'bar', 666: 'bogus' } ) with pytest.raises(SchemaError) as e: EventSchema().load(data) assert "{'attributes': defaultdict(<class 'dict'>, {666: {'key': ['Not a valid string.']}})}" in str(e.value)
def test_deserialize_full_event_data(): data = build_event_data() event = EventSchema().load(data) assert event.name == data['name'] assert event.version == data['version'] assert event.domain == data['domain'] assert event.subject == data['subject'] assert event.publisher == data['publisher'] assert event.attributes == data['attributes'] assert event.timestamp == dateutil.parser.parse(data['timestamp']) assert event.timestamp.utcoffset() is None assert event.timestamp.tzinfo is None
def test_deserialize_event_data_with_optional_attribute_set_to_null(attribute_key, expected_value): data = build_event_data() data[attribute_key] = None event = EventSchema().load(data) assert getattr(event, attribute_key) == expected_value
def test_deserialize_event_data_without_optional_attribute(attribute_key, expected_value): data = build_event_data() del data[attribute_key] event = EventSchema().load(data) assert getattr(event, attribute_key) == expected_value