def __init__(self, account, soledad_querier, search_engine): self.account = account self.querier = soledad_querier self.search_engine = search_engine for mailbox_name in account.mailboxes: MailboxIndexerListener.listen(self.account, mailbox_name, soledad_querier)
def test_catches_exceptions_to_not_break_other_listeners(self): when(logger).error(ANY()).thenReturn(None) listener = MailboxIndexerListener('INBOX', self.mail_store, mock()) yield listener.notify_new() verify(logger).error(ANY())
def test_add_itself_to_mailbox_listeners(self): self.account.mailboxes = ['INBOX'] mailbox = mock() when(self.account).get_collection_by_mailbox('INBOX').thenReturn(mailbox) mailbox.listeners = set() when(mailbox).addListener = lambda x: mailbox.listeners.add(x) self.assertNotIn(MailboxIndexerListener('INBOX', self.mail_store, mock()), mailbox.listeners) MailboxIndexerListener.listen(self.account, 'INBOX', self.mail_store, mock()) self.assertIn(MailboxIndexerListener('INBOX', self.mail_store, mock()), mailbox.listeners)
def test_reindex_missing_idents(self): mail = mock() search_engine = mock() when(search_engine).search('tag:inbox', all_mails=True).thenReturn(['ident1', 'ident2']) listener = MailboxIndexerListener('INBOX', self.mail_store, search_engine) when(self.mail_store).get_mailbox_mail_ids('INBOX').thenReturn({'ident1', 'ident2', 'missing_ident'}) when(self.mail_store).get_mails({'missing_ident'}, include_body=True).thenReturn([mail]) listener.notify_new() verify(self.mail_store, times=1).get_mails({'missing_ident'}, include_body=True) verify(search_engine).index_mails([mail])
def test_add_itself_to_mailbox_listeners(self): self.account.mailboxes = ['INBOX'] mailbox = mock() when(self.account).getMailbox('INBOX').thenReturn(mailbox) mailbox.listeners = set() when(mailbox).addListener = lambda x: mailbox.listeners.add(x) self.assertNotIn(MailboxIndexerListener('INBOX', self.querier), mailbox.listeners) MailboxIndexerListener.listen(self.account, 'INBOX', self.querier) self.assertIn(MailboxIndexerListener('INBOX', self.querier), mailbox.listeners)
def test_reindex_missing_idents(self): search_engine = mock() when(search_engine).search('tag:inbox', all_mails=True).thenReturn(['ident1', 'ident2']) listener = MailboxIndexerListener('INBOX', self.mail_store, search_engine) when(self.mail_store).get_mailbox_mail_ids('INBOX').thenReturn({'ident1', 'ident2', 'missing_ident'}) self.mail_store.used_arguments = [] self.mail_store.get_mails = lambda x: self.mail_store.used_arguments.append(x) listener.newMessages(10, 5) verify(self.mail_store, times=1).get_mails('INBOX') self.assertIn({'missing_ident'}, self.mail_store.used_arguments)
def test_reindex_missing_idents(self): search_engine = mock() when(search_engine).search('tag:inbox', all_mails=True).thenReturn(['ident1', 'ident2']) MailboxIndexerListener.SEARCH_ENGINE = search_engine listener = MailboxIndexerListener('INBOX', self.querier) when(self.querier).idents_by_mailbox('INBOX').thenReturn({'ident1', 'ident2', 'missing_ident'}) self.querier.used_arguments = [] self.querier.mails = lambda x: self.querier.used_arguments.append(x) listener.newMessages(10, 5) verify(self.querier, times=1).idents_by_mailbox('INBOX') self.assertIn({'missing_ident'}, self.querier.used_arguments)
def _create_or_get(self, mailbox_name): mailbox_name = mailbox_name.upper() # if mailbox_name not in self.account.mailboxes: if mailbox_name not in (yield self.account.account.list_all_mailbox_names()): try: yield self.account.addMailbox(mailbox_name) except MailboxCollision: pass # It means that it is already created. FIXME Why list_all fails to tell? yield MailboxIndexerListener.listen(self.account, mailbox_name, self.querier) defer.returnValue(Mailbox.create(mailbox_name, self.querier, self.search_engine))
def test_message_collection(self): # given mbx = yield self.account.getMailbox('INBOX') input_mail = MailBuilder().build_input_mail() # when yield MailboxIndexerListener.listen(self.account, 'INBOX', self.mail_store, self.search_engine) yield mbx.addMessage(input_mail.raw, [], notify_just_mdoc=False) # then yield self.wait_in_reactor() # event handlers are called async, wait for it mails, mail_count = self.search_engine.search('in:all') self.assertEqual(1, mail_count) self.assertEqual(1, len(mails))
def test_message_collection(self): # given MailboxIndexerListener.SEARCH_ENGINE = self.search_engine mbx = yield self.account.getMailbox('INBOX') input_mail = MailBuilder().build_input_mail() # when yield MailboxIndexerListener.listen(self.account, 'INBOX', self.mail_store) yield mbx.addMessage(input_mail.raw, [], notify_just_mdoc=False) # then yield self.wait_in_reactor( ) # event handlers are called async, wait for it mails, mail_count = self.search_engine.search('in:all') self.assertEqual(1, mail_count) self.assertEqual(1, len(mails))
def test_message_collection(self): # given mail_collection = yield self.account.get_collection_by_mailbox('INBOX') input_mail = MailBuilder().build_input_mail() # when yield MailboxIndexerListener.listen(self.account, 'INBOX', self.mail_store, self.search_engine) yield mail_collection.add_msg(input_mail.raw) # then yield self.wait_in_reactor( ) # event handlers are called async, wait for it mails, mail_count = self.search_engine.search('in:all') self.assertEqual(1, mail_count) self.assertEqual(1, len(mails))
def test_message_collection(self): # given mail_collection = yield self.app_test_client.account.get_collection_by_mailbox('INBOX') input_mail = MailBuilder().build_input_mail() # when yield MailboxIndexerListener.listen( self.app_test_client.account, 'INBOX', self.app_test_client.mail_store, self.app_test_client.search_engine) yield mail_collection.add_msg(input_mail.raw) # then yield self.wait_in_reactor() # event handlers are called async, wait for it mails, mail_count = self.app_test_client.search_engine.search('in:all') self.assertEqual(1, mail_count) self.assertEqual(1, len(mails))
def _index_mailboxes(self, mailboxes): for mailbox_name in mailboxes: yield MailboxIndexerListener.listen(self.account, mailbox_name, self.querier)
def __init__(self, account, soledad_querier): self.account = account self.querier = soledad_querier for mailbox_name in account.mailboxes: MailboxIndexerListener.listen(self.account, mailbox_name, soledad_querier)
def _create_or_get(self, mailbox_name): mailbox_name = mailbox_name.upper() if mailbox_name not in self.account.mailboxes: self.account.addMailbox(mailbox_name) MailboxIndexerListener.listen(self.account, mailbox_name, self.querier) return Mailbox.create(mailbox_name, self.querier, self.search_engine)