Пример #1
0
def test_payloads_are_equal_when_all_attributes_are_equal():
    event = Event(**build_event_kwargs())
    mega_object = ObjectData(**build_object_kwargs())
    extra = {'foo': 'bar', 'one': 1}

    this = Payload(event=event, object=mega_object, extra=extra)

    that = Payload(event=event, object=mega_object, extra=extra)

    assert this.__eq__(that) is True
    assert that.__eq__(this) is True
    assert this == that
    assert not (this != that)
Пример #2
0
def test_payloads_are_not_equal_if_one_attribute_is_different(
        attribute_name, different_value):
    this_kwargs = build_payload_kwargs()
    this = Payload(**this_kwargs)

    that_kwargs = build_payload_kwargs()
    that_kwargs[attribute_name] = different_value
    that = Payload(**that_kwargs)

    assert this.__eq__(that) is False
    assert that.__eq__(this) is False
    assert this != that
    assert not (this == that)
Пример #3
0
def test_serialize_full_valid_payload():
    event = Event(name='shopping_cart.item.added',
                  version=2,
                  timestamp=dateutil.parser.parse('2020-05-04T15:53:23.123'),
                  domain='shopping_cart',
                  subject='987650',
                  publisher='shopping-cart-service',
                  attributes=build_event_attributes())
    _object = ObjectData(type='shopping_cart',
                         id='18a3f92e-1fbf-45eb-8769-d836d0a1be55',
                         version=3,
                         current=build_current_object_data(),
                         previous=build_previous_object_data())
    extra = build_extra_data()
    payload = Payload(event=event, object=_object, extra=extra)

    data = serialize_payload(payload)

    assert data['protocol'] == 'mega'
    assert data['version'] == 1

    assert data['event']['name'] == event.name
    assert data['event']['version'] == event.version
    assert dateutil.parser.parse(data['event']['timestamp']) == event.timestamp
    assert data['event']['domain'] == event.domain
    assert data['event']['subject'] == event.subject
    assert data['event']['publisher'] == event.publisher
    assert data['event']['attributes'] == event.attributes
    assert data['object']['type'] == _object.type
    assert data['object']['id'] == _object.id
    assert data['object']['version'] == _object.version
    assert data['object']['current'] == _object.current
    assert data['object']['previous'] == _object.previous
    assert data['extra'] == extra
Пример #4
0
def test_create_payload_without_optional_attribute_should_use_default(
        attribute_name, expected_default):
    kwargs = build_payload_kwargs()
    del kwargs[attribute_name]

    payload = Payload(**kwargs)
    assert getattr(payload, attribute_name) == expected_default
Пример #5
0
def test_create_payload_with_additional_kwargs_should_be_added_to_the_extra_dictionary(
):
    payload = Payload(event=Event(**build_event_kwargs()), foo='bar', test=123)

    assert payload.extra == {
        'foo': 'bar',
        'test': 123,
    }
Пример #6
0
def test_fail_to_serialize_invalid_payload():
    event = Event(name='shopping_cart.item.added')
    event.name = None
    payload = Payload(event=event)

    with pytest.raises(SchemaError) as e:
        serialize_payload(payload)

    assert str(e.value) == "Invalid MEGA payload. " \
                           "There is an error in the 'event' section: {'name': ['Missing data for required field.']}"
Пример #7
0
def test_create_payload():
    kwargs = build_payload_kwargs()
    payload = Payload(**kwargs)

    assert payload.event is not None
    assert isinstance(payload.event, Event)
    assert payload.event == kwargs['event']

    assert payload.object is not None
    assert isinstance(payload.object, ObjectData)
    assert payload.object == kwargs['object']

    assert payload.extra is not None
    assert payload.extra == kwargs['extra']
Пример #8
0
def test_serialize_minimal_valid_payload():
    timestamp = '2020-05-19T18:43:52.424566'
    with freezegun.freeze_time(timestamp):
        event = Event(name='shopping_cart.item.added')
    payload = Payload(event=event)

    data = serialize_payload(payload)

    assert data == {
        'protocol': 'mega',
        'version': 1,
        'event': {
            'name': 'shopping_cart.item.added',
            'version': 1,
            'timestamp': timestamp
        }
    }
Пример #9
0
def test_serialize_medium_valid_payload():
    timestamp = '2020-05-19T18:43:52.424566'
    with freezegun.freeze_time(timestamp):
        event = Event(name='shopping_cart.item.removed',
                      version=2,
                      subject='235078',
                      item_id='b23c5670-e4d9-40cd-94e0-b7776e08b104',
                      all=True)

    _object = ObjectData(type='shopping_cart',
                         current=build_current_object_data())

    payload = Payload(event=event,
                      object=_object,
                      ip_address='172.217.162.174')

    data = serialize_payload(payload)

    assert data == {
        'protocol': 'mega',
        'version': 1,
        'event': {
            'name': 'shopping_cart.item.removed',
            'timestamp': timestamp,
            'version': 2,
            'subject': '235078',
            'attributes': {
                'item_id': 'b23c5670-e4d9-40cd-94e0-b7776e08b104',
                'all': True
            }
        },
        'object': {
            'type': 'shopping_cart',
            'version': 1,
            'current': _object.current
        },
        'extra': {
            'ip_address': '172.217.162.174'
        }
    }
Пример #10
0
def test_a_payload_is_not_equal_to(another_thing):
    payload = Payload(**build_payload_kwargs())
    assert payload != another_thing
Пример #11
0
def test_fail_to_create_payload_without_event():
    with pytest.raises(AttributeError) as e:
        Payload(event=None)
    assert str(e.value) == 'Mega payload event has not been set'
Пример #12
0
 def build_object(self, data, **kwargs):
     return Payload(**data)