Ejemplo n.º 1
0
def test_handle_changes(db, generic_account):
    namespace_id = generic_account.namespace.id
    event_sync = EventSync(generic_account.email_address, 'google', 
                           generic_account.id, namespace_id)

    # Sync calendars/events
    event_sync.provider.sync_calendars = calendar_response
    event_sync.provider.sync_events = event_response
    event_sync.sync()

    assert db.session.query(Calendar).filter(
        Calendar.namespace_id == namespace_id,
        Calendar.name != 'Emailed events').count() == 2

    assert db.session.query(Event).join(Calendar).filter(
        Event.namespace_id == namespace_id,
        Calendar.uid == 'first_calendar_uid').count() == 3

    assert db.session.query(Event).join(Calendar).filter(
        Event.namespace_id == namespace_id,
        Calendar.uid == 'second_calendar_uid').count() == 2

    # Sync a calendar update
    event_sync.provider.sync_calendars = calendar_response_with_update
    event_sync.provider.sync_events = event_response
    event_sync.sync()

    # Check that we have the same number of calendars and events as before
    assert db.session.query(Calendar).filter(
        Calendar.namespace_id == namespace_id,
        Calendar.name != 'Emailed events').count() == 2

    assert db.session.query(Event).join(Calendar).filter(
        Event.namespace_id == namespace_id,
        Calendar.uid == 'first_calendar_uid').count() == 3

    assert db.session.query(Event).join(Calendar).filter(
        Event.namespace_id == namespace_id,
        Calendar.uid == 'second_calendar_uid').count() == 2

    # Check that calendar attribute was updated.
    first_calendar = db.session.query(Calendar).filter(
        Calendar.namespace_id == namespace_id,
        Calendar.uid == 'first_calendar_uid').one()
    assert first_calendar.name == 'Super Important Meetings'

    # Sync an event update
    event_sync.provider.sync_events = event_response_with_update
    event_sync.sync()
    # Make sure the update was persisted
    first_event = db.session.query(Event).filter(
        Event.namespace_id == namespace_id,
        Event.calendar_id == first_calendar.id,
        Event.uid == 'first_event_uid').one()
    assert first_event.title == 'Top Secret Plotting Meeting'

    # Sync an event delete
    event_sync.provider.sync_events = event_response_with_delete
    event_sync.sync()
    # Make sure the delete was persisted.
    first_event = db.session.query(Event).filter(
        Event.namespace_id == namespace_id,
        Event.calendar_id == first_calendar.id,
        Event.uid == 'first_event_uid').first()

    db.session.refresh(first_event)
    assert first_event.status == 'cancelled'

    # Sync a calendar delete
    event_public_ids = [id_ for id_, in db.session.query(Event.public_id).
                        filter(Event.namespace_id == namespace_id,
                               Event.calendar_id == first_calendar.id)]
    event_sync.provider.sync_calendars = calendar_response_with_delete
    event_sync.sync()
    assert db.session.query(Calendar).filter(
        Calendar.namespace_id == namespace_id,
        Calendar.uid == 'first_calendar_uid').first() is None

    # Check that delete transactions are created for events on the deleted
    # calendar.
    deleted_event_transactions = db.session.query(Transaction).filter(
        Transaction.object_type == 'event',
        Transaction.command == 'delete',
        Transaction.namespace_id == namespace_id,
        Transaction.object_public_id.in_(event_public_ids)).all()
    assert len(deleted_event_transactions) == 3

    # Check that events with the same uid but associated to a different
    # calendar still survive.
    assert db.session.query(Event).filter(
        Event.namespace_id == namespace_id).count() == 2
Ejemplo n.º 2
0
def test_handle_changes(db, generic_account):
    namespace_id = generic_account.namespace.id
    event_sync = EventSync(generic_account.email_address, 'google',
                           generic_account.id, namespace_id)

    # Sync calendars/events
    event_sync.provider.sync_calendars = calendar_response
    event_sync.provider.sync_events = event_response
    event_sync.sync()

    assert db.session.query(Calendar).filter(
        Calendar.namespace_id == namespace_id,
        Calendar.name != 'Emailed events').count() == 2

    assert db.session.query(Event).join(Calendar).filter(
        Event.namespace_id == namespace_id,
        Calendar.uid == 'first_calendar_uid').count() == 3

    assert db.session.query(Event).join(Calendar).filter(
        Event.namespace_id == namespace_id,
        Calendar.uid == 'second_calendar_uid').count() == 2

    # Sync a calendar update with long name
    event_sync.provider.sync_calendars = calendar_long_name
    event_sync.sync()

    long_calendar = db.session.query(Calendar).filter(
        Calendar.namespace_id == namespace_id,
        Calendar.uid == 'long_calendar_uid').one()

    assert len(long_calendar.name) == MAX_INDEXABLE_LENGTH

    # Sync a calendar update
    event_sync.provider.sync_calendars = calendar_response_with_update
    event_sync.provider.sync_events = event_response
    event_sync.sync()

    # Check that we have the same number of calendars and events as before
    assert db.session.query(Calendar).filter(
        Calendar.namespace_id == namespace_id,
        Calendar.name != 'Emailed events').count() == 3

    assert db.session.query(Event).join(Calendar).filter(
        Event.namespace_id == namespace_id,
        Calendar.uid == 'first_calendar_uid').count() == 3

    assert db.session.query(Event).join(Calendar).filter(
        Event.namespace_id == namespace_id,
        Calendar.uid == 'second_calendar_uid').count() == 2

    assert db.session.query(Event).join(Calendar).filter(
        Event.namespace_id == namespace_id,
        Calendar.uid == 'long_calendar_uid').count() == 2

    # Check that calendar attribute was updated.
    first_calendar = db.session.query(Calendar).filter(
        Calendar.namespace_id == namespace_id,
        Calendar.uid == 'first_calendar_uid').one()
    assert first_calendar.name == 'Super Important Meetings'

    # Sync an event update
    event_sync.provider.sync_events = event_response_with_update
    event_sync.sync()
    # Make sure the update was persisted
    first_event = db.session.query(Event).filter(
        Event.namespace_id == namespace_id,
        Event.calendar_id == first_calendar.id,
        Event.uid == 'first_event_uid').one()
    assert first_event.title == 'Top Secret Plotting Meeting'

    # Sync an event delete
    event_sync.provider.sync_events = event_response_with_delete
    event_sync.sync()
    # Make sure the delete was persisted.
    first_event = db.session.query(Event).filter(
        Event.namespace_id == namespace_id,
        Event.calendar_id == first_calendar.id,
        Event.uid == 'first_event_uid').first()

    db.session.refresh(first_event)
    assert first_event.status == 'cancelled'

    # Sync a calendar delete
    event_public_ids = [
        id_ for id_, in db.session.query(Event.public_id).filter(
            Event.namespace_id == namespace_id, Event.calendar_id ==
            first_calendar.id)
    ]
    event_sync.provider.sync_calendars = calendar_response_with_delete
    event_sync.sync()
    assert db.session.query(Calendar).filter(
        Calendar.namespace_id == namespace_id, Calendar.uid
        == 'first_calendar_uid').first() is None

    # Check that delete transactions are created for events on the deleted
    # calendar.
    deleted_event_transactions = db.session.query(Transaction).filter(
        Transaction.object_type == 'event', Transaction.command == 'delete',
        Transaction.namespace_id == namespace_id,
        Transaction.object_public_id.in_(event_public_ids)).all()
    assert len(deleted_event_transactions) == 3

    # Check that events with the same uid but associated to a different
    # calendar still survive.
    assert db.session.query(Event).filter(
        Event.namespace_id == namespace_id).count() == 4
Ejemplo n.º 3
0
def test_handle_changes(db, generic_account):
    namespace_id = generic_account.namespace.id
    event_sync = EventSync(generic_account.email_address, "google",
                           generic_account.id, namespace_id)

    # Sync calendars/events
    event_sync.provider.sync_calendars = calendar_response
    event_sync.provider.sync_events = event_response
    event_sync.sync()

    assert (db.session.query(Calendar).filter(
        Calendar.namespace_id == namespace_id,
        Calendar.name != "Emailed events").count() == 2)

    assert (db.session.query(Event).join(Calendar).filter(
        Event.namespace_id == namespace_id,
        Calendar.uid == "first_calendar_uid").count() == 3)

    assert (db.session.query(Event).join(Calendar).filter(
        Event.namespace_id == namespace_id,
        Calendar.uid == "second_calendar_uid").count() == 2)

    # Sync a calendar update with long name
    event_sync.provider.sync_calendars = calendar_long_name
    event_sync.sync()

    long_calendar = (db.session.query(Calendar).filter(
        Calendar.namespace_id == namespace_id,
        Calendar.uid == "long_calendar_uid").one())

    assert len(long_calendar.name) == MAX_INDEXABLE_LENGTH

    # Sync a calendar update
    event_sync.provider.sync_calendars = calendar_response_with_update
    event_sync.provider.sync_events = event_response
    event_sync.sync()

    # Check that we have the same number of calendars and events as before
    assert (db.session.query(Calendar).filter(
        Calendar.namespace_id == namespace_id,
        Calendar.name != "Emailed events").count() == 3)

    assert (db.session.query(Event).join(Calendar).filter(
        Event.namespace_id == namespace_id,
        Calendar.uid == "first_calendar_uid").count() == 3)

    assert (db.session.query(Event).join(Calendar).filter(
        Event.namespace_id == namespace_id,
        Calendar.uid == "second_calendar_uid").count() == 2)

    assert (db.session.query(Event).join(Calendar).filter(
        Event.namespace_id == namespace_id,
        Calendar.uid == "long_calendar_uid").count() == 2)

    # Check that calendar attribute was updated.
    first_calendar = (db.session.query(Calendar).filter(
        Calendar.namespace_id == namespace_id,
        Calendar.uid == "first_calendar_uid").one())
    assert first_calendar.name == "Super Important Meetings"

    # Sync an event update
    event_sync.provider.sync_events = event_response_with_update
    event_sync.sync()
    # Make sure the update was persisted
    first_event = (db.session.query(Event).filter(
        Event.namespace_id == namespace_id,
        Event.calendar_id == first_calendar.id,
        Event.uid == "first_event_uid",
    ).one())
    assert first_event.title == "Top Secret Plotting Meeting"

    # Sync a participant update
    event_sync.provider.sync_events = event_response_with_participants_update
    event_sync.sync()

    # Make sure the update was persisted
    first_event = (db.session.query(Event).filter(
        Event.namespace_id == namespace_id,
        Event.calendar_id == first_calendar.id,
        Event.uid == "first_event_uid",
    ).one())

    db.session.refresh(first_event)
    assert first_event.participants == [{
        "name": "Johnny Thunders",
        "email": "*****@*****.**"
    }]

    # Sync an event delete
    event_sync.provider.sync_events = event_response_with_delete
    event_sync.sync()
    # Make sure the delete was persisted.
    first_event = (db.session.query(Event).filter(
        Event.namespace_id == namespace_id,
        Event.calendar_id == first_calendar.id,
        Event.uid == "first_event_uid",
    ).first())

    db.session.refresh(first_event)
    assert first_event.status == "cancelled"

    # Sync a calendar delete
    event_public_ids = [
        id_ for id_, in db.session.query(Event.public_id).filter(
            Event.namespace_id == namespace_id, Event.calendar_id ==
            first_calendar.id)
    ]
    event_sync.provider.sync_calendars = calendar_response_with_delete
    event_sync.sync()
    assert (db.session.query(Calendar).filter(
        Calendar.namespace_id == namespace_id, Calendar.uid
        == "first_calendar_uid").first() is None)

    # Check that delete transactions are created for events on the deleted
    # calendar.
    deleted_event_transactions = (db.session.query(Transaction).filter(
        Transaction.object_type == "event",
        Transaction.command == "delete",
        Transaction.namespace_id == namespace_id,
        Transaction.object_public_id.in_(event_public_ids),
    ).all())
    assert len(deleted_event_transactions) == 3

    # Check that events with the same uid but associated to a different
    # calendar still survive.
    assert (db.session.query(Event).filter(
        Event.namespace_id == namespace_id).count() == 4)