test/unittest_mail.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Tue, 26 Jan 2010 13:32:54 +0100
changeset 4364 766359c69f2f
parent 4252 6c4f109c2b03
child 5421 8167de96c523
permissions -rw-r--r--
[uicfg] fix autoform_section rtags initialization 1. when a relation is marked as inlined in the 'main' form type, we want its opposite (eg when one the other side of the relation) to be marked as hidden in the 'inlined' form type 2. when no section is specified for the 'inlined' form type, use the same as in the 'main' form type to do this properly, we need two initialization stages. The first one to handle 1., the second to handle what was done before and 2. We can't do this in a single stage because we've to know the bare value of the "opposite" tag.

# -*- coding: utf-8 -*-
"""unit tests for module cubicweb.mail

:organization: Logilab
:copyright: 2001-2010 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2.
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
:license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
"""

import os
import sys

from logilab.common.testlib import unittest_main
from logilab.common.umessage import message_from_string

from cubicweb.devtools.testlib import CubicWebTC
from cubicweb.mail import format_mail


def getlogin():
    """avoid usinng os.getlogin() because of strange tty / stdin problems
    (man 3 getlogin)
    Another solution would be to use $LOGNAME, $USER or $USERNAME
    """
    if sys.platform != 'win32':
        import pwd
        return pwd.getpwuid(os.getuid())[0]
    else:
        return os.environ.get('USERNAME')


class EmailTC(CubicWebTC):

    def test_format_mail(self):
        self.set_option('sender-addr', 'bim@boum.fr')
        self.set_option('sender-name', 'BimBam')

        mail = format_mail({'name': 'oim', 'email': 'oim@logilab.fr'},
                           ['test@logilab.fr'], u'un petit cöucou', u'bïjour',
                           config=self.config)
        self.assertLinesEquals(mail.as_string(), """\
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Subject: =?utf-8?q?b=C3=AFjour?=
From: =?utf-8?q?oim?= <oim@logilab.fr>
Reply-to: =?utf-8?q?oim?= <oim@logilab.fr>, =?utf-8?q?BimBam?= <bim@boum.fr>
X-CW: data
To: test@logilab.fr

dW4gcGV0aXQgY8O2dWNvdQ==
""")
        msg = message_from_string(mail.as_string())
        self.assertEquals(msg.get('subject'), u'bïjour')
        self.assertEquals(msg.get('from'), u'oim <oim@logilab.fr>')
        self.assertEquals(msg.get('to'), u'test@logilab.fr')
        self.assertEquals(msg.get('reply-to'), u'oim <oim@logilab.fr>, BimBam <bim@boum.fr>')
        self.assertEquals(msg.get_payload(decode=True), u'un petit cöucou')


    def test_format_mail_euro(self):
        mail = format_mail({'name': u'oîm', 'email': u'oim@logilab.fr'},
                           ['test@logilab.fr'], u'un petit cöucou €', u'bïjour €')
        self.assertLinesEquals(mail.as_string(), """\
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Subject: =?utf-8?b?YsOvam91ciDigqw=?=
From: =?utf-8?q?o=C3=AEm?= <oim@logilab.fr>
Reply-to: =?utf-8?q?o=C3=AEm?= <oim@logilab.fr>
To: test@logilab.fr

dW4gcGV0aXQgY8O2dWNvdSDigqw=
""")
        msg = message_from_string(mail.as_string())
        self.assertEquals(msg.get('subject'), u'bïjour €')
        self.assertEquals(msg.get('from'), u'oîm <oim@logilab.fr>')
        self.assertEquals(msg.get('to'), u'test@logilab.fr')
        self.assertEquals(msg.get('reply-to'), u'oîm <oim@logilab.fr>')
        self.assertEquals(msg.get_payload(decode=True), u'un petit cöucou €')


    def test_format_mail_from_reply_to(self):
        # no sender-name, sender-addr in the configuration
        self.set_option('sender-name', '')
        self.set_option('sender-addr', '')
        msg = format_mail({'name': u'', 'email': u''},
                          ['test@logilab.fr'], u'un petit cöucou €', u'bïjour €',
                          config=self.config)
        self.assertEquals(msg.get('from'), u'')
        self.assertEquals(msg.get('reply-to'), None)
        msg = format_mail({'name': u'tutu', 'email': u'tutu@logilab.fr'},
                          ['test@logilab.fr'], u'un petit cöucou €', u'bïjour €',
                          config=self.config)
        msg = message_from_string(msg.as_string())
        self.assertEquals(msg.get('from'), u'tutu <tutu@logilab.fr>')
        self.assertEquals(msg.get('reply-to'), u'tutu <tutu@logilab.fr>')
        msg = format_mail({'name': u'tutu', 'email': u'tutu@logilab.fr'},
                          ['test@logilab.fr'], u'un petit cöucou €', u'bïjour €')
        msg = message_from_string(msg.as_string())
        self.assertEquals(msg.get('from'), u'tutu <tutu@logilab.fr>')
        self.assertEquals(msg.get('reply-to'), u'tutu <tutu@logilab.fr>')
        # set sender name and address as expected
        self.set_option('sender-name', 'cubicweb-test')
        self.set_option('sender-addr', 'cubicweb-test@logilab.fr')
        # anonymous notification: no name and no email specified
        msg = format_mail({'name': u'', 'email': u''},
                           ['test@logilab.fr'], u'un petit cöucou €', u'bïjour €',
                           config=self.config)
        msg = message_from_string(msg.as_string())
        self.assertEquals(msg.get('from'), u'cubicweb-test <cubicweb-test@logilab.fr>')
        self.assertEquals(msg.get('reply-to'), u'cubicweb-test <cubicweb-test@logilab.fr>')
        # anonymous notification: only email specified
        msg = format_mail({'email': u'tutu@logilab.fr'},
                           ['test@logilab.fr'], u'un petit cöucou €', u'bïjour €',
                           config=self.config)
        msg = message_from_string(msg.as_string())
        self.assertEquals(msg.get('from'), u'cubicweb-test <tutu@logilab.fr>')
        self.assertEquals(msg.get('reply-to'), u'cubicweb-test <tutu@logilab.fr>, cubicweb-test <cubicweb-test@logilab.fr>')
        # anonymous notification: only name specified
        msg = format_mail({'name': u'tutu'},
                          ['test@logilab.fr'], u'un petit cöucou €', u'bïjour €',
                          config=self.config)
        msg = message_from_string(msg.as_string())
        self.assertEquals(msg.get('from'), u'tutu <cubicweb-test@logilab.fr>')
        self.assertEquals(msg.get('reply-to'), u'tutu <cubicweb-test@logilab.fr>')



if __name__ == '__main__':
    unittest_main()