Ejemplo n.º 1
0
    def test_set_message_flags_no_message(self):
        db = mock_db()
        db_folder = db_account_folder(db, 'my account', 'archive')

        with db.transaction():
            self.assertRaises(KeyError, db_folder.set_message_flags,
                              13, set([r'\Seen', r'\Answered']))
Ejemplo n.º 2
0
    def test_remove_nonexistent_folder(self):
        db = mock_db()
        db_account = db.get_account('my account')

        with db.transaction():
            self.assertRaises(KeyError,
                              db_account.del_folder, 'no-such-folder')
Ejemplo n.º 3
0
    def test_add_existing_message(self):
        db = mock_db()
        db_folder = db_account_folder(db, 'my account', 'archive')
        with db.transaction():
            db_folder.add_message(*msg1)

        with db.transaction():
            self.assertRaises(AssertionError, db_folder.add_message, *msg1)
Ejemplo n.º 4
0
 def setUp(self):
     self.db = mock_db()
     self.account = _account_for_test(db=self.db)
     self.imap_data = {'fol1': {13: msg13_data}, 'fol2': {22: msg22_data}}
     with mock_worker(**self.imap_data):
         self.account.perform_update()
     self.fol1 = self.account.get_folder('fol1')
     self.fol2 = self.account.get_folder('fol2')
Ejemplo n.º 5
0
    def test_bulk_add_messages(self):
        db = mock_db()
        db_folder = db_account_folder(db, 'my account', 'archive')

        with db.transaction():
            db_folder.bulk_add_messages([msg1, msg2])

        messages = sorted(db_folder.list_messages())
        self.assertEqual(messages, [msg1, msg2])
Ejemplo n.º 6
0
    def test_bulk_remove_messages_nonexistent(self):
        db = mock_db()
        db_folder = db_account_folder(db, 'my account', 'archive')
        with db.transaction():
            db_folder.bulk_add_messages([msg1])

        with db.transaction():
            self.assertRaises(AssertionError,
                              db_folder.bulk_del_messages, [msg1[0], msg3[0]])
Ejemplo n.º 7
0
    def test_uidvalidity(self):
        db = mock_db()
        account = _account_for_test(db=db)
        with mock_worker(fol1={13: msg13_data, 'UIDVALIDITY': 1234}):
            account.perform_update()

        account2 = _account_for_test(db=db)
        fol1 = account2.get_folder('fol1')
        self.assertEqual(fol1._uidvalidity, 1234)
Ejemplo n.º 8
0
    def test_add_existing_folder(self):
        db = mock_db()
        db_account = db.get_account('my account')

        with db.transaction():
            db_account.add_folder('INBOX')

        with db.transaction():
            self.assertRaises(AssertionError, db_account.add_folder, 'INBOX')
Ejemplo n.º 9
0
    def test_bulk_add_messages_exising(self):
        db = mock_db()
        db_folder = db_account_folder(db, 'my account', 'archive')
        with db.transaction():
            db_folder.add_message(*msg1)

        with db.transaction():
            self.assertRaises(AssertionError,
                              db_folder.bulk_add_messages, [msg1, msg2])
Ejemplo n.º 10
0
 def setUp(self):
     self.db = mock_db()
     self.account = _account_for_test(db=self.db)
     self.imap_data = {'fol1': {
         4: (4, set([r'\Seen']), "Subject: test message"),
         15: (15, set([r'\Flagged']), "Subject: whatever"),
         22: (22, set([r'\Seen', r'\Answered']), "Subject: blah"),
     }}
     with mock_worker(**self.imap_data):
         self.account.perform_update()
Ejemplo n.º 11
0
    def test_bulk_remove_messages(self):
        db = mock_db()
        db_folder = db_account_folder(db, 'my account', 'archive')
        with db.transaction():
            db_folder.bulk_add_messages([msg1, msg2, msg3])

        with db.transaction():
            db_folder.bulk_del_messages([msg1[0], msg3[0]])

        self.assertEqual(list(db_folder.list_messages()), [msg2])
Ejemplo n.º 12
0
def _account_for_test(config=None):
    from tinymail.account import Account
    if config is None:
        config = {
            'name': 'my test account',
            'host': 'test_host',
            'login_name': 'test_username',
            'login_pass': '******',
        }
    return Account(config, mock_db())
Ejemplo n.º 13
0
    def test_folders(self):
        db = mock_db()
        account = _account_for_test(db=db)

        with mock_worker(myfolder={}) as worker:
            account.perform_update()

        account2 = _account_for_test(db=db)
        folders = list(account2.list_folders())
        self.assertEqual(len(folders), 1)
        self.assertEqual(folders[0].name, 'myfolder')
Ejemplo n.º 14
0
    def test_remove_all_messagse(self):
        db = mock_db()
        db_folder = db_account_folder(db, 'my account', 'archive')
        with db.transaction():
            db_folder.add_message(*msg1)
            db_folder.add_message(*msg2)

        with db.transaction():
            db_folder.del_all_messages()

        self.assertEqual(list(db_folder.list_messages()), [])
Ejemplo n.º 15
0
    def test_remove_folder(self):
        db = mock_db()
        db_account = db.get_account('my account')

        with db.transaction():
            db_account.add_folder('INBOX')

        with db.transaction():
            db_account.del_folder('INBOX')

        self.assertEqual(list(db_account.list_folders()), [])
Ejemplo n.º 16
0
    def test_folder(self):
        db = mock_db()
        db_account = db.get_account('my account')

        with db.transaction():
            db_account.add_folder('mailing-lists')

        folder = db_account.get_folder('mailing-lists')
        self.assertEqual(folder.name, 'mailing-lists')

        self.assertRaises(KeyError, db_account.get_folder, 'no-such-folder')
Ejemplo n.º 17
0
    def test_message_nonascii_headers(self):
        db = mock_db()
        db_folder = db_account_folder(db, 'my account', 'archive')

        unicode_msg = (24, set([r'\Seen']), "Subject: hi!\xec\xec\xff")

        with db.transaction():
            db_folder.add_message(*unicode_msg)

        messages = sorted(db_folder.list_messages())
        self.assertEqual(messages, [unicode_msg])
        self.assertTrue(type(messages[0][2]) is str)
Ejemplo n.º 18
0
    def test_folder_uidvalidity(self):
        db = mock_db()
        db_account = db.get_account('my account')
        with db.transaction():
            db_account.add_folder('archive')
        db_folder = db_account.get_folder('archive')
        self.assertIs(db_folder.get_uidvalidity(), None)

        with db.transaction():
            db_folder.set_uidvalidity(1234)

        self.assertEqual(db_folder.get_uidvalidity(), 1234)
Ejemplo n.º 19
0
    def test_list_folders(self):
        db = mock_db()
        db_account = db.get_account('my account')
        self.assertEqual(list(db_account.list_folders()), [])

        with db.transaction():
            db_account.add_folder('INBOX')
            db_account.add_folder('archive')

        names = set(f.name for f in db_account.list_folders())
        self.assertEqual(len(names), 2)
        self.assertEqual(names, set(['INBOX', 'archive']))
Ejemplo n.º 20
0
    def test_message_removed(self):
        db = mock_db()
        account = _account_for_test(db=db)
        with mock_worker(fol1={6: None, 8: None}):
            account.perform_update()

        with mock_worker(fol1={6: None}):
            account.perform_update()

        account2 = _account_for_test(db=db)
        fol1 = account2.get_folder('fol1')
        self.assertEqual([m.uid for m in fol1.list_messages()], [6])
Ejemplo n.º 21
0
    def test_require_transactions(self):
        db = mock_db()
        db_account = db.get_account('my account')
        db_folder = db_account_folder(db, 'my account', 'archive')
        with db.transaction():
            db_folder.add_message(13, set([r'\Seen']), "Subject: hi!")

        self.assertRaises(AssertionError, db_account.add_folder, 'other')
        self.assertRaises(AssertionError, db_folder.add_message,
                          17, set([r'\Seen']), "Subject: smth")
        self.assertRaises(AssertionError, db_folder.set_message_flags,
                          13, set([r'\Seen', r'\Answered']))
Ejemplo n.º 22
0
    def test_folders_removed(self):
        db = mock_db()
        account = _account_for_test(db=db)

        with mock_worker(fol1={}, fol2={}):
            account.perform_update()

        with mock_worker(fol1={}):
            account.perform_update()

        account2 = _account_for_test(db=db)
        self.assertEqual([f.name for f in account2.list_folders()], ['fol1'])
Ejemplo n.º 23
0
    def test_uidvalidity_changed(self):
        db = mock_db()
        account = _account_for_test(db=db)
        msg13_bis_data = (13, set([r'\Seen']), "Subject: another message")
        with mock_worker(fol1={13: msg13_data, 'UIDVALIDITY': 1234}):
            account.perform_update()
        with mock_worker(fol1={13: msg13_bis_data, 'UIDVALIDITY': 1239}):
            account.perform_update()

        account2 = _account_for_test(db=db)
        fol1 = account2.get_folder('fol1')
        self.assertEqual(fol1._uidvalidity, 1239)
        self.assertEqual([m.raw_headers for m in fol1.list_messages()],
                         [msg13_bis_data[2]])
Ejemplo n.º 24
0
    def test_message_flags_changed(self):
        db = mock_db()
        account = _account_for_test(db=db)
        msg13_bis_data = (13, set([r'\Flagged']), "Subject: test message")
        with mock_worker(fol1={13: msg13_data}):
            account.perform_update()

        with mock_worker(fol1={13: msg13_bis_data}):
            account.perform_update()

        account2 = _account_for_test(db=db)
        fol1 = account2.get_folder('fol1')
        self.assertEqual([m.flags for m in fol1.list_messages()],
                         [set(['\\Flagged'])])
Ejemplo n.º 25
0
    def test_set_message_flags(self):
        db = mock_db()
        db_folder = db_account_folder(db, 'my account', 'archive')

        with db.transaction():
            db_folder.add_message(*msg1)
            db_folder.add_message(*msg2)

        with db.transaction():
            db_folder.set_message_flags(13, set([r'\Seen', r'\Answered']))

        msg1bis = (13, set([r'\Seen', r'\Answered']), "Subject: hi!")

        messages = sorted(db_folder.list_messages())
        self.assertEqual(messages, [msg1bis, msg2])
Ejemplo n.º 26
0
    def test_separate_accounts(self):
        msg1 = (13, set([r'\Seen']), "Subject: hi!")
        msg2 = (22, set([r'\Flagged']), "Subject: bye!")
        db = mock_db()
        A_fol = db_account_folder(db, 'A', 'fol')
        B_fol = db_account_folder(db, 'B', 'fol')
        with db.transaction():
            A_fol.add_message(*msg1)
            B_fol.add_message(*msg2)

        def _msgs(db, account_name, folder_name):
            account = db.get_account(account_name)
            folder = account.get_folder(folder_name)
            return list(folder.list_messages())
        self.assertEqual(_msgs(db, 'A', 'fol'), [msg1])
        self.assertEqual(_msgs(db, 'B', 'fol'), [msg2])
Ejemplo n.º 27
0
    def test_messages(self):
        db = mock_db()
        account = _account_for_test(db=db)

        msg4_data = (4, set([r'\Seen']), "Subject: test message")
        msg22_data = (22, set([r'\Seen', r'\Answered']), "Subject: blah")

        with mock_worker(myfolder={4: msg4_data, 22: msg22_data}) as worker:
            account.perform_update()

        account2 = _account_for_test(db=db)
        myfolder = account2.get_folder('myfolder')
        messages = list(myfolder.list_messages())
        messages.sort(key=lambda m: m.uid)

        self.assertEqual(len(messages), 2)
        msg4, msg22 = messages
        self.assertEqual(msg4.uid, 4)
        self.assertEqual(msg4.flags, set([r'\Seen']))
        self.assertEqual(msg4.raw_headers, "Subject: test message")
        self.assertEqual(msg22.uid, 22)
        self.assertEqual(msg22.flags, set([r'\Seen', r'\Answered']))
        self.assertEqual(msg22.raw_headers, "Subject: blah")
Ejemplo n.º 28
0
    def test_remove_nonexistent_message(self):
        db = mock_db()
        db_folder = db_account_folder(db, 'my account', 'archive')

        with db.transaction():
            self.assertRaises(AssertionError, db_folder.del_message, 13)