def test_ignore_messages(self): """Test if it ignores some messages without mandatory fields""" backend = MBox('http://example.com/', self.tmp_error_path) messages = [m for m in backend.fetch()] # There are only two valid message on the mbox self.assertEqual(len(messages), 2) expected = { 'From': 'goran at domain.com ( Göran Lastname )', 'Date': 'Wed, 01 Dec 2010 14:26:40 +0100', 'Subject': '[List-name] Protocol Buffers anyone?', 'Message-ID': '<*****@*****.**>', 'unixfrom': 'goran at domain.com Wed Dec 1 08:26:40 2010', 'body': { 'plain': "Hi!\n\nA message in English, with a signature " "with a different encoding.\n\nregards, G?ran" "\n", } } message = messages[0]['data'] self.assertDictEqual(message, expected) # On the second message, the only change is that 'Message-id' # is replaced by 'Message-ID' message = messages[1]['data'] self.assertDictEqual(message, expected)
def test_fetch(self): """Test whether it parses a set of mbox files""" backend = MBox('http://example.com/', self.tmp_path) messages = [m for m in backend.fetch()] expected = [('<*****@*****.**>', '86315b479b4debe320b59c881c1e375216cbf333', 1291210000.0), ('<*****@*****.**>', '86315b479b4debe320b59c881c1e375216cbf333', 1291210000.0), ('<*****@*****.**>', 'bd0185317b013beb21ad3ea04635de3db72496ad', 1095843820.0), ('<*****@*****.**>', '51535703010a3e63d5272202942c283394cdebca', 1205746505.0), ('<019801ca633f$f4376140$dca623c0$@[email protected]>', '302e314c07242bb4750351286862f49e758f3e17', 1257992964.0), ('<*****@*****.**>', 'ddda42422c55d08d56c017a6f128fcd7447484ea', 1043881350.0), ('<*****@*****.**>', '86315b479b4debe320b59c881c1e375216cbf333', 1291210000.0), ('<*****@*****.**>', '4e255acab6442424ecbf05cb0feb1eccb587f7de', 1030123489.0)] self.assertEqual(len(messages), len(expected)) for x in range(len(messages)): message = messages[x] self.assertEqual(message['data']['Message-ID'], expected[x][0]) self.assertEqual(message['origin'], 'http://example.com/') self.assertEqual(message['uuid'], expected[x][1]) self.assertEqual(message['updated_on'], expected[x][2]) self.assertEqual(message['category'], 'message') self.assertEqual(message['tag'], 'http://example.com/')
def test_fetch_from_date(self): """Test whether a list of messages is returned since a given date""" from_date = datetime.datetime(2008, 1, 1) backend = MBox('http://example.com/', self.tmp_path) messages = [m for m in backend.fetch(from_date=from_date)] expected = [('<*****@*****.**>', '86315b479b4debe320b59c881c1e375216cbf333', 1291210000.0), ('<*****@*****.**>', '86315b479b4debe320b59c881c1e375216cbf333', 1291210000.0), ('<*****@*****.**>', '51535703010a3e63d5272202942c283394cdebca', 1205746505.0), ('<019801ca633f$f4376140$dca623c0$@[email protected]>', '302e314c07242bb4750351286862f49e758f3e17', 1257992964.0), ('<*****@*****.**>', '86315b479b4debe320b59c881c1e375216cbf333', 1291210000.0)] self.assertEqual(len(messages), len(expected)) for x in range(len(messages)): message = messages[x] self.assertEqual(message['data']['Message-ID'], expected[x][0]) self.assertEqual(message['origin'], 'http://example.com/') self.assertEqual(message['uuid'], expected[x][1]) self.assertEqual(message['updated_on'], expected[x][2]) self.assertEqual(message['category'], 'message') self.assertEqual(message['tag'], 'http://example.com/')
def test_initialization(self): """Test whether attributes are initializated""" backend = MBox('http://example.com/', self.tmp_path, origin='test') self.assertEqual(backend.uri, 'http://example.com/') self.assertEqual(backend.dirpath, self.tmp_path) self.assertEqual(backend.origin, 'test') # When origin is empty or None it will be set to # the value in uri backend = MBox('http://example.com/', self.tmp_path) self.assertEqual(backend.origin, 'http://example.com/') backend = MBox('http://example.com/', self.tmp_path, origin='') self.assertEqual(backend.origin, 'http://example.com/')
def test_ignore_file_errors(self): """Files with IO errors should be ignored""" tmp_path_ign = tempfile.mkdtemp(prefix='perceval_') shutil.copy('data/mbox_single.mbox', tmp_path_ign) shutil.copy('data/mbox_multipart.mbox', tmp_path_ign) # Update file mode to make it unable to access os.chmod(os.path.join(tmp_path_ign, 'mbox_multipart.mbox'), 0o000) backend = MBox('http://example.com/', tmp_path_ign) messages = [m for m in backend.fetch()] # Only one message is read self.assertEqual(len(messages), 1) self.assertEqual(messages[0]['data']['Message-ID'], '<*****@*****.**>') self.assertEqual(messages[0]['data']['Date'], 'Wed, 01 Dec 2010 14:26:40 +0100') shutil.rmtree(tmp_path_ign)