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']))
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')
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)
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')
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])
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]])
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)
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')
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])
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()
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])
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())
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')
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()), [])
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()), [])
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')
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)
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)
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']))
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])
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']))
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'])
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]])
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'])])
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])
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])
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")
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)