pfwb/tests: add test for the attached file mode of the mail interface

This commit is contained in:
Benjamin Dauvergne 2014-01-30 16:24:08 +01:00
parent 0a395c8219
commit c13e55c285
1 changed files with 62 additions and 1 deletions

View File

@ -9,6 +9,7 @@ import tempfile
import sys
from contextlib import contextmanager
from StringIO import StringIO
from functools import wraps
@contextmanager
def captured_output():
@ -25,6 +26,7 @@ class stderr_output(object):
self.output = output
def __call__(self, func):
@wraps(func)
def f(testcase, *args, **kwargs):
with captured_output() as (out, err):
ret = func(testcase, *args, **kwargs)
@ -51,7 +53,6 @@ RECIPIENT_LIST_EMAIL = 'liste-ma-liste@example.com'
@override_settings(DOCBOW_PFWB_SENDMAIL_DEFAULT_TYPE_NAME='Default')
@override_settings(DOCBOW_PFWB_SENDMAIL_TABELLIO_EXPEDITION_EMAIL=EXPEDITION_EMAIL)
@override_settings(DOCBOW_PFWB_SENDMAIL_TABELLIO_EXPEDITION_USER_ID=1)
@override_settings(PFWB_GED_DIRECTORY='/tmp')
class SendMailTestCase(TestCase):
def setUp(self):
self.pjd_filetype = FileType.objects.create(name='PJD', id=2)
@ -173,6 +174,66 @@ Coucou''', EXPEDITION_EMAIL, RECIPIENT_EMAIL, 'PJD', 'Mouais: monfichier.pdf')
self.assertEquals(Document.objects.get().to_list.count(), 1)
self.assertEquals(Document.objects.get().to_list.all()[0], self.to_list)
@override_settings(DOCBOW_PFWB_SENDMAIL_DEFAULT_TYPE_ID=1)
@override_settings(DOCBOW_PFWB_SENDMAIL_DEFAULT_TYPE_NAME='Default')
@override_settings(DOCBOW_PFWB_SENDMAIL_ATTACHED_FILE_EMAIL=EXPEDITION_EMAIL)
@override_settings(DOCBOW_PFWB_SENDMAIL_ATTACHED_FILE_USER_ID=1)
class SendMailAttachedFileTestCase(TestCase):
def setUp(self):
self.pjd_filetype = FileType.objects.create(name='PJD', id=2)
self.tabellio_doc_type = TabellioDocType.objects.create(filetype=self.pjd_filetype,
tabellio_doc_type='PJD')
self.expedition_user = User.objects.create(username='expedition', id=1)
self.to_user = User.objects.create(username='recipient', email=RECIPIENT_EMAIL, id=2)
self.to_list = MailingList.objects.create(name='ma liste')
self.to_list.members.add(self.to_user)
def build_message(self, filetype, to_addr, from_addr, content, attached_files):
from email import encoders
from email.header import Header
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import random
message = MIMEMultipart()
message['Subject'] = Header(unicode(filetype), 'utf-8')
message['To'] = Header(to_addr, 'utf-8')
message['From'] = Header(from_addr, 'utf-8')
message['Message-ID'] = '<%s@example.com>' % random.random()
msg = MIMEText(content, _subtype='plain')
message.attach(msg)
for filename, content in attached_files:
msg = MIMEBase('application', 'octet-stream')
msg.set_payload(content)
msg.add_header('Content-Disposition', 'attachment', filename=filename)
encoders.encode_base64(msg)
message.attach(msg)
return message.as_string()
@stderr_output('')
def test_attached_file1(self):
with tempfile.NamedTemporaryFile() as f:
f.write(self.build_message(
self.pjd_filetype,
EXPEDITION_EMAIL,
RECIPIENT_EMAIL,
'coucou',
(('attached-file', 'content'),)))
f.flush()
management.call_command('sendmail', RECIPIENT_EMAIL, file=f.name,
sender=EXPEDITION_EMAIL)
self.assertEqual(Document.objects.count(), 1)
document = Document.objects.get()
self.assertEquals(document.attached_files.count(), 1)
self.assertEquals(document.comment, 'coucou')
self.assertEquals(document.attached_files.get().name, 'attached-file')
self.assertEquals(document.attached_files.get().content.read(),
'content')
self.assertEquals(document.to_user.count(), 1)
self.assertEquals(document.to_list.count(), 0)
self.assertEquals(document.to_user.get(), self.to_user)
class PushDocumentTestCase(TestCase):
def setUp(self):
self.ged_dir = tempfile.mkdtemp()