Exemple #1
0
def add_fake_category(db_session, namespace_id, display_name, name=None):
    from inbox.models import Category
    category = Category(namespace_id=namespace_id,
                        display_name=display_name,
                        name=name)
    db_session.add(category)
    db_session.commit()
    return category
def test_query_target(db, api_client, thread, default_namespace):
    cat = Category(namespace_id=default_namespace.id,
                   name='inbox', display_name='Inbox', type_='label')
    for _ in range(3):
        message = add_fake_message(db.session, default_namespace.id, thread,
                                   to_addr=[('Bob', '*****@*****.**')],
                                   from_addr=[('Alice', '*****@*****.**')],
                                   subject='some subject')
        message.categories.add(cat)
    db.session.commit()

    results = api_client.get_data('/messages?in=inbox')
    assert len(results) == 3

    count = api_client.get_data('/messages?in=inbox&view=count')
    assert count['count'] == 3
Exemple #3
0
def test_query_target(db, api_client, thread, default_namespace):
    cat = Category(
        namespace_id=default_namespace.id,
        name="inbox",
        display_name="Inbox",
        type_="label",
    )
    for _ in range(3):
        message = add_fake_message(
            db.session,
            default_namespace.id,
            thread,
            to_addr=[("Bob", "*****@*****.**")],
            from_addr=[("Alice", "*****@*****.**")],
            subject="some subject",
        )
        message.categories.add(cat)
    db.session.commit()

    results = api_client.get_data("/messages?in=inbox")
    assert len(results) == 3

    count = api_client.get_data("/messages?in=inbox&view=count")
    assert count["count"] == 3
def test_filtering(db, api_client, default_namespace):
    thread = add_fake_thread(db.session, default_namespace.id)
    message = add_fake_message(db.session,
                               default_namespace.id,
                               thread,
                               to_addr=[('Bob', '*****@*****.**')],
                               from_addr=[('Alice', '*****@*****.**')],
                               subject='some subject')
    message.categories.add(
        Category(namespace_id=message.namespace_id,
                 name='inbox',
                 display_name='Inbox',
                 type_='label'))
    thread.subject = message.subject
    db.session.commit()

    t_start = dt_to_timestamp(thread.subjectdate)
    t_lastmsg = dt_to_timestamp(thread.recentdate)
    subject = message.subject
    to_addr = message.to_addr[0][1]
    from_addr = message.from_addr[0][1]
    received_date = message.received_date
    unread = not message.is_read
    starred = message.is_starred

    results = api_client.get_data('/threads?thread_id={}'.format(
        thread.public_id))
    assert len(results) == 1

    results = api_client.get_data('/messages?thread_id={}'.format(
        thread.public_id))
    assert len(results) == 1

    results = api_client.get_data('/threads?cc={}'.format(message.cc_addr))
    assert len(results) == 0

    results = api_client.get_data('/messages?cc={}'.format(message.cc_addr))
    assert len(results) == 0

    results = api_client.get_data('/threads?bcc={}'.format(message.bcc_addr))
    assert len(results) == 0

    results = api_client.get_data('/messages?bcc={}'.format(message.bcc_addr))
    assert len(results) == 0

    results = api_client.get_data('/threads?filename=test')
    assert len(results) == 0

    results = api_client.get_data('/messages?filename=test')
    assert len(results) == 0

    results = api_client.get_data('/threads?started_after={}'.format(t_start -
                                                                     1))
    assert len(results) == 1

    results = api_client.get_data('/messages?started_after={}'.format(t_start -
                                                                      1))
    assert len(results) == 1

    results = api_client.get_data(
        '/messages?last_message_before={}&limit=1'.format(t_lastmsg + 1))
    assert len(results) == 1

    results = api_client.get_data(
        '/threads?last_message_before={}&limit=1'.format(t_lastmsg + 1))
    assert len(results) == 1

    results = api_client.get_data('/threads?in=inbox&limit=1')
    assert len(results) == 1

    results = api_client.get_data('/messages?in=inbox&limit=1')
    assert len(results) == 1

    results = api_client.get_data('/messages?in=banana%20rama')
    assert len(results) == 0

    results = api_client.get_data('/threads?subject={}'.format(subject))
    assert len(results) == 1

    results = api_client.get_data('/messages?subject={}'.format(subject))
    assert len(results) == 1

    results = api_client.get_data('/threads?unread={}'.format(unread))
    assert len(results) == 1

    results = api_client.get_data('/messages?unread={}'.format((not unread)))
    assert len(results) == 0

    results = api_client.get_data('/threads?starred={}'.format((not starred)))
    assert len(results) == 0

    results = api_client.get_data('/messages?starred={}'.format(starred))
    assert len(results) == 1

    for _ in range(3):
        add_fake_message(db.session,
                         default_namespace.id,
                         to_addr=[('', '*****@*****.**')],
                         thread=add_fake_thread(db.session,
                                                default_namespace.id))

    results = api_client.get_data(
        '/messages?any_email={}'.format('*****@*****.**'))
    assert len(results) > 1

    # Test multiple any_email params
    multiple_results = api_client.get_data(
        '/messages?any_email={},{},{}'.format('*****@*****.**',
                                              '*****@*****.**',
                                              '*****@*****.**'))
    assert len(multiple_results) > len(results)

    # Check that we canonicalize when searching.
    alternate_results = api_client.get_data(
        '/threads?any_email={}'.format('*****@*****.**'))
    assert len(alternate_results) == len(results)

    results = api_client.get_data('/messages?from={}'.format(from_addr))
    assert len(results) == 1
    results = api_client.get_data('/threads?from={}'.format(from_addr))
    assert len(results) == 1

    early_time = received_date - datetime.timedelta(seconds=1)
    late_time = received_date + datetime.timedelta(seconds=1)
    early_ts = calendar.timegm(early_time.utctimetuple())
    late_ts = calendar.timegm(late_time.utctimetuple())

    results = api_client.get_data(
        '/messages?subject={}&started_before={}'.format(subject, early_ts))
    assert len(results) == 0
    results = api_client.get_data(
        '/threads?subject={}&started_before={}'.format(subject, early_ts))
    assert len(results) == 0

    results = api_client.get_data(
        '/messages?subject={}&started_before={}'.format(subject, late_ts))
    assert len(results) == 1
    results = api_client.get_data(
        '/threads?subject={}&started_before={}'.format(subject, late_ts))
    assert len(results) == 1

    results = api_client.get_data(
        '/messages?subject={}&last_message_after={}'.format(subject, early_ts))
    assert len(results) == 1
    results = api_client.get_data(
        '/threads?subject={}&last_message_after={}'.format(subject, early_ts))
    assert len(results) == 1

    results = api_client.get_data(
        '/messages?subject={}&last_message_after={}'.format(subject, late_ts))
    assert len(results) == 0
    results = api_client.get_data(
        '/threads?subject={}&last_message_after={}'.format(subject, late_ts))
    assert len(results) == 0

    results = api_client.get_data(
        '/messages?subject={}&started_before={}'.format(subject, early_ts))
    assert len(results) == 0
    results = api_client.get_data(
        '/threads?subject={}&started_before={}'.format(subject, early_ts))
    assert len(results) == 0

    results = api_client.get_data(
        '/messages?subject={}&started_before={}'.format(subject, late_ts))
    assert len(results) == 1
    results = api_client.get_data(
        '/threads?subject={}&started_before={}'.format(subject, late_ts))
    assert len(results) == 1

    results = api_client.get_data('/messages?from={}&to={}'.format(
        from_addr, to_addr))
    assert len(results) == 1

    results = api_client.get_data('/threads?from={}&to={}'.format(
        from_addr, to_addr))
    assert len(results) == 1

    results = api_client.get_data('/messages?to={}&limit={}&offset={}'.format(
        '*****@*****.**', 2, 1))
    assert len(results) == 2

    results = api_client.get_data('/threads?to={}&limit={}'.format(
        '*****@*****.**', 3))
    assert len(results) == 3

    results = api_client.get_data('/threads?view=count')

    assert results['count'] == 4

    results = api_client.get_data('/threads?view=ids&to={}&limit=3'.format(
        '*****@*****.**', 3))

    assert len(results) == 3
    assert all(isinstance(r, basestring)
               for r in results), "Returns a list of string"
Exemple #5
0
def test_received_before_after(db, api_client, default_namespace):
    thread = add_fake_thread(db.session, default_namespace.id)
    message = add_fake_message(db.session,
                               default_namespace.id,
                               thread,
                               to_addr=[('Bob', '*****@*****.**')],
                               from_addr=[('Alice', '*****@*****.**')],
                               received_date=datetime.datetime(year=1999,
                                                               day=20,
                                                               month=03),
                               subject='some subject')

    thread2 = add_fake_thread(db.session, default_namespace.id)
    message2 = add_fake_message(db.session,
                                default_namespace.id,
                                thread,
                                to_addr=[('Bob', '*****@*****.**')],
                                from_addr=[('Alice', '*****@*****.**')],
                                received_date=datetime.datetime(year=2000,
                                                                day=20,
                                                                month=03),
                                subject='another subject')

    inbox = Category(namespace_id=message.namespace_id,
                     name='inbox',
                     display_name='Inbox',
                     type_='label')
    message.categories.add(inbox)
    thread.subject = message.subject

    message2.categories.add(inbox)
    thread2.subject = message2.subject

    db.session.commit()

    received_date = message.received_date
    t_epoch = dt_to_timestamp(datetime.datetime(year=1998, month=2, day=3))
    t_firstmsg = dt_to_timestamp(received_date)

    results = api_client.get_data(
        '/messages?received_before={}'.format(t_epoch))
    assert len(results) == 0

    # received_before should be inclusive (i.e: match <=, not just <).
    results = api_client.get_data(
        '/messages?received_before={}'.format(t_firstmsg))
    assert len(results) == 1

    t1 = dt_to_timestamp(received_date + datetime.timedelta(days=1))
    results = api_client.get_data('/messages?received_after={}'.format(t1))
    assert len(results) == 1

    results = api_client.get_data(
        '/messages?received_before={}&received_after={}'.format(
            t1, t_firstmsg))
    assert len(results) == 0

    # bogus values
    results = api_client.get_data(
        '/messages?received_before={}&received_after={}'.format(t_epoch, t1))
    assert len(results) == 0