common/test/unittest_mail.py
changeset 0 b97547f5f1fa
child 1802 d628defebc17
equal deleted inserted replaced
-1:000000000000 0:b97547f5f1fa
       
     1 # -*- coding: utf-8 -*-
       
     2 """unit tests for module cubicweb.common.mail"""
       
     3 
       
     4 import os
       
     5 import pwd
       
     6 
       
     7 from logilab.common.testlib import unittest_main
       
     8 from logilab.common.umessage import message_from_string
       
     9 
       
    10 from cubicweb.devtools.apptest import EnvBasedTC
       
    11 from cubicweb.common.mail import format_mail
       
    12 
       
    13 
       
    14 def getlogin():
       
    15     """avoid usinng os.getlogin() because of strange tty / stdin problems
       
    16     (man 3 getlogin)
       
    17     Another solution would be to use $LOGNAME, $USER or $USERNAME
       
    18     """
       
    19     return pwd.getpwuid(os.getuid())[0]
       
    20     
       
    21 
       
    22 class EmailTC(EnvBasedTC):
       
    23 
       
    24     def test_format_mail(self):
       
    25         self.set_option('sender-addr', 'bim@boum.fr')
       
    26         self.set_option('sender-name', 'BimBam')
       
    27         
       
    28         mail = format_mail({'name': 'oim', 'email': 'oim@logilab.fr'},
       
    29                            ['test@logilab.fr'], u'un petit cöucou', u'bïjour',
       
    30                            config=self.config)
       
    31         self.assertLinesEquals(mail.as_string(), """\
       
    32 MIME-Version: 1.0
       
    33 Content-Type: text/plain; charset="utf-8"
       
    34 Content-Transfer-Encoding: base64
       
    35 Subject: =?utf-8?q?b=C3=AFjour?=
       
    36 From: =?utf-8?q?oim?= <oim@logilab.fr>
       
    37 Reply-to: =?utf-8?q?oim?= <oim@logilab.fr>, =?utf-8?q?BimBam?= <bim@boum.fr>
       
    38 X-CW: data
       
    39 To: test@logilab.fr
       
    40 
       
    41 dW4gcGV0aXQgY8O2dWNvdQ==
       
    42 """)
       
    43         msg = message_from_string(mail.as_string())
       
    44         self.assertEquals(msg.get('subject'), u'bïjour')
       
    45         self.assertEquals(msg.get('from'), u'oim <oim@logilab.fr>')
       
    46         self.assertEquals(msg.get('to'), u'test@logilab.fr')
       
    47         self.assertEquals(msg.get('reply-to'), u'oim <oim@logilab.fr>, BimBam <bim@boum.fr>')
       
    48         self.assertEquals(msg.get_payload(decode=True), u'un petit cöucou')
       
    49 
       
    50         
       
    51     def test_format_mail_euro(self):
       
    52         mail = format_mail({'name': u'oîm', 'email': u'oim@logilab.fr'},
       
    53                            ['test@logilab.fr'], u'un petit cöucou €', u'bïjour €')
       
    54         self.assertLinesEquals(mail.as_string(), """\
       
    55 MIME-Version: 1.0
       
    56 Content-Type: text/plain; charset="utf-8"
       
    57 Content-Transfer-Encoding: base64
       
    58 Subject: =?utf-8?b?YsOvam91ciDigqw=?=
       
    59 From: =?utf-8?q?o=C3=AEm?= <oim@logilab.fr>
       
    60 Reply-to: =?utf-8?q?o=C3=AEm?= <oim@logilab.fr>
       
    61 To: test@logilab.fr
       
    62 
       
    63 dW4gcGV0aXQgY8O2dWNvdSDigqw=
       
    64 """)
       
    65         msg = message_from_string(mail.as_string())
       
    66         self.assertEquals(msg.get('subject'), u'bïjour €')
       
    67         self.assertEquals(msg.get('from'), u'oîm <oim@logilab.fr>')
       
    68         self.assertEquals(msg.get('to'), u'test@logilab.fr')
       
    69         self.assertEquals(msg.get('reply-to'), u'oîm <oim@logilab.fr>')
       
    70         self.assertEquals(msg.get_payload(decode=True), u'un petit cöucou €')
       
    71 
       
    72 
       
    73     def test_format_mail_from_reply_to(self):
       
    74         # no sender-name, sender-addr in the configuration
       
    75         self.set_option('sender-name', '')
       
    76         self.set_option('sender-addr', '')
       
    77         msg = format_mail({'name': u'', 'email': u''},
       
    78                           ['test@logilab.fr'], u'un petit cöucou €', u'bïjour €',
       
    79                           config=self.config)
       
    80         self.assertEquals(msg.get('from'), u'')
       
    81         self.assertEquals(msg.get('reply-to'), None)
       
    82         msg = format_mail({'name': u'tutu', 'email': u'tutu@logilab.fr'},
       
    83                           ['test@logilab.fr'], u'un petit cöucou €', u'bïjour €',
       
    84                           config=self.config)
       
    85         msg = message_from_string(msg.as_string())
       
    86         self.assertEquals(msg.get('from'), u'tutu <tutu@logilab.fr>')
       
    87         self.assertEquals(msg.get('reply-to'), u'tutu <tutu@logilab.fr>')
       
    88         msg = format_mail({'name': u'tutu', 'email': u'tutu@logilab.fr'},
       
    89                           ['test@logilab.fr'], u'un petit cöucou €', u'bïjour €')
       
    90         msg = message_from_string(msg.as_string())
       
    91         self.assertEquals(msg.get('from'), u'tutu <tutu@logilab.fr>')
       
    92         self.assertEquals(msg.get('reply-to'), u'tutu <tutu@logilab.fr>')
       
    93         # set sender name and address as expected
       
    94         self.set_option('sender-name', 'cubicweb-test')
       
    95         self.set_option('sender-addr', 'cubicweb-test@logilab.fr') 
       
    96         # anonymous notification: no name and no email specified
       
    97         msg = format_mail({'name': u'', 'email': u''},
       
    98                            ['test@logilab.fr'], u'un petit cöucou €', u'bïjour €',
       
    99                            config=self.config)
       
   100         msg = message_from_string(msg.as_string())
       
   101         self.assertEquals(msg.get('from'), u'cubicweb-test <cubicweb-test@logilab.fr>')
       
   102         self.assertEquals(msg.get('reply-to'), u'cubicweb-test <cubicweb-test@logilab.fr>')
       
   103         # anonymous notification: only email specified
       
   104         msg = format_mail({'email': u'tutu@logilab.fr'},
       
   105                            ['test@logilab.fr'], u'un petit cöucou €', u'bïjour €',
       
   106                            config=self.config)
       
   107         msg = message_from_string(msg.as_string())
       
   108         self.assertEquals(msg.get('from'), u'cubicweb-test <tutu@logilab.fr>')
       
   109         self.assertEquals(msg.get('reply-to'), u'cubicweb-test <tutu@logilab.fr>, cubicweb-test <cubicweb-test@logilab.fr>')
       
   110         # anonymous notification: only name specified
       
   111         msg = format_mail({'name': u'tutu'},
       
   112                           ['test@logilab.fr'], u'un petit cöucou €', u'bïjour €',
       
   113                           config=self.config)
       
   114         msg = message_from_string(msg.as_string())
       
   115         self.assertEquals(msg.get('from'), u'tutu <cubicweb-test@logilab.fr>')
       
   116         self.assertEquals(msg.get('reply-to'), u'tutu <cubicweb-test@logilab.fr>')
       
   117 
       
   118 
       
   119 
       
   120 if __name__ == '__main__':
       
   121     unittest_main()
       
   122