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
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"
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