andrewferrier_email2pdf/tests/Direct/test_Direct_Errors.py
2015-11-02 21:27:36 +00:00

171 lines
7.5 KiB
Python

from email.mime.multipart import MIMEMultipart
import os
import tempfile
import unittest.mock
from tests import BaseTestClasses
class Direct_Errors(BaseTestClasses.Email2PDFTestCase):
def setUp(self):
super(Direct_Errors, self).setUp()
self.msg = MIMEMultipart()
def test_plaincontent_fileexist(self):
self.attachText("Hello!")
with tempfile.NamedTemporaryFile() as tmpfile:
with self.assertRaisesRegex(Exception, "file.*exist"):
self.invokeDirectly(outputFile=tmpfile.name, okToExist=True)
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_plaincontent_dirnotexist(self):
self.attachText("Hello!")
with self.assertRaisesRegex(Exception, "(?i)directory.*not.*exist"):
self.invokeDirectly(outputDirectory="/notexist/")
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_image_doesnt_exist(self):
if self.isOnline:
path = os.path.join(self.examineDir, "remoteImageDoesntExist.pdf")
self.addHeaders()
self.attachHTML('<img src="' + self.NONEXIST_IMG + '">')
error = self.invokeDirectly(outputFile=path)
self.assertTrue(os.path.exists(path))
self.assertRegex(error, "(?i)could not retrieve")
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
else:
self.skipTest("Not online.")
def test_image_doesnt_exist_blacklist(self):
path = os.path.join(self.examineDir, "remoteImageDoesntExistBlacklist.pdf")
self.addHeaders()
self.attachHTML('<img src="' + self.NONEXIST_IMG_BLACKLIST + '">')
error = self.invokeDirectly(outputFile=path)
self.assertTrue(os.path.exists(path))
self.assertEqual('', error)
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_image_doesnt_exist_blacklist_upper(self):
path = os.path.join(self.examineDir, "remoteImageDoesntExistBlacklistUpper.pdf")
self.addHeaders()
self.attachHTML('<img src="' + self.NONEXIST_IMG_BLACKLIST.upper() + '">')
error = self.invokeDirectly(outputFile=path)
self.assertTrue(os.path.exists(path))
self.assertEqual('', error)
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_image_doesnt_exist_with_pdf(self):
if self.isOnline:
self.addHeaders()
self.attachHTML('<img src="' + self.NONEXIST_IMG + '">')
filename = self.attachPDF("Some PDF content")
error = self.invokeDirectly()
self.assertTrue(self.existsByTime())
self.assertTrue(os.path.exists(os.path.join(self.workingDir, filename)))
self.assertRegex(error, "(?i)could not retrieve")
self.assertTrue(self.existsByTimeWarning())
self.assertRegex(self.getWarningFileContents(), "(?i)could not retrieve")
self.assertTrue(self.existsByTimeOriginal())
self.assertValidOriginalFileContents()
else:
self.skipTest("Not online.")
def test_local_image_doesnt_exist(self):
path = os.path.join(self.examineDir, "localImageDoesntExist.pdf")
self.addHeaders()
self.attachHTML('<img src="/test.png">')
error = self.invokeDirectly(outputFile=path)
self.assertTrue(os.path.exists(path))
self.assertRegex(error, "(?i)could not retrieve")
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_local_image_with_query_doesnt_exist(self):
path = os.path.join(self.examineDir, "localImageWithQueryDoesntExist.pdf")
self.addHeaders()
self.attachHTML('<img src="/test.png?foo=bar">')
error = self.invokeDirectly(outputFile=path)
self.assertTrue(os.path.exists(path))
self.assertRegex(error, "(?i)could not retrieve")
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_local_script_doesnt_exist(self):
path = os.path.join(self.examineDir, "localScriptDoesntExist.pdf")
self.addHeaders()
self.attachHTML("<script src=\"/test.js\"></script>")
error = self.invokeDirectly(outputFile=path)
self.assertTrue(os.path.exists(path))
self.assertEqual('', error)
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_local_script_with_query_doesnt_exist(self):
path = os.path.join(self.examineDir, "localScriptWithQueryDoesntExist.pdf")
self.addHeaders()
self.attachHTML("<script src=\"/test.js?muh\"></script>")
error = self.invokeDirectly(outputFile=path)
self.assertTrue(os.path.exists(path))
self.assertEqual('', error)
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_local_stylesheet_doesnt_exist(self):
path = os.path.join(self.examineDir, "localStylesheetDoesntExist.pdf")
self.addHeaders()
self.attachHTML("<html><head><link href=\"/test.css\" rel=\"stylesheet\"></head></html>")
error = self.invokeDirectly(outputFile=path)
self.assertTrue(os.path.exists(path))
self.assertEqual('', error)
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_local_stylesheet_with_query_doesnt_exist(self):
path = os.path.join(self.examineDir, "localStylesheetWithQueryDoesntExist.pdf")
self.addHeaders()
self.attachHTML("<html><head><link href=\"/test.css?muh\" rel=\"stylesheet\"></head></html>")
error = self.invokeDirectly(outputFile=path)
self.assertTrue(os.path.exists(path))
self.assertEqual('', error)
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_no_explicit_parts(self):
# If we don't add any parts explicitly, email2pdf should find a
# plain-text part
error = self.invokeDirectly()
self.assertEqual('', error)
self.assertTrue(self.existsByTime())
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_fuzz(self):
with self.assertRaisesRegex(Exception, "(?i)defects parsing email"):
self.invokeDirectly(completeMessage="This is total junk")
self.assertFalse(self.existsByTime())
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_broken_html(self):
self.addHeaders()
self.attachHTML('<img<a<h href')
error = self.invokeDirectly()
self.assertEqual('', error)
self.assertTrue(self.existsByTime())
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_missing_wkhtmltopdf(self):
with unittest.mock.patch.dict(os.environ, {'PATH': ''}):
with self.assertRaisesRegex(Exception, "(?i)email2pdf requires wkhtmltopdf"):
self.invokeDirectly()
self.assertFalse(self.existsByTime())
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())