pfwb/tests: add test for the attached file mode of the mail interface
This commit is contained in:
parent
0a395c8219
commit
c13e55c285
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue