diff options
| -rw-r--r-- | service/pixelated/application.py | 18 | ||||
| -rw-r--r-- | service/pixelated/config/leap.py | 49 | ||||
| -rw-r--r-- | service/test/integration/test_welcome_mail.py | 43 | ||||
| -rw-r--r-- | service/test/unit/test_welcome_mail.py | 73 | 
4 files changed, 107 insertions, 76 deletions
| diff --git a/service/pixelated/application.py b/service/pixelated/application.py index 51763fa2..dfeb8d82 100644 --- a/service/pixelated/application.py +++ b/service/pixelated/application.py @@ -19,13 +19,10 @@ from twisted.internet import defer  from twisted.internet import ssl  from OpenSSL import SSL  from OpenSSL import crypto -from email import message_from_file -import os -from pixelated.adapter.model.mail import InputMail  from pixelated.config import arguments  from pixelated.config.services import Services -from pixelated.config.leap import initialize_leap, CREATE_WELCOME_MAIL +from pixelated.config.leap import initialize_leap  from pixelated.config import logger  from pixelated.config.site import PixelatedSite  from pixelated.resources.loading_page import LoadingResource @@ -77,18 +74,6 @@ def _ssl_options(sslkey, sslcert):      return options -def welcome_mail(leap_session): -    if CREATE_WELCOME_MAIL(): -        current_path = os.path.dirname(os.path.abspath(__file__)) -        with open(os.path.join(current_path, 'assets', 'welcome.mail')) as mail_template_file: -            mail_template = message_from_file(mail_template_file) - -        input_mail = InputMail.from_python_mail(mail_template) - -        leap_session.mail_store.add_mail('INBOX', input_mail.raw) -    return leap_session - -  def initialize():      args = arguments.parse_user_agent_args()      logger.init(debug=args.debug) @@ -100,7 +85,6 @@ def initialize():                                 args.organization_mode,                                 args.leap_home) -    deferred.addCallback(welcome_mail)      deferred.addCallback(          lambda leap_session: start_user_agent(              loading_app, diff --git a/service/pixelated/config/leap.py b/service/pixelated/config/leap.py index 83b913a8..0409e54f 100644 --- a/service/pixelated/config/leap.py +++ b/service/pixelated/config/leap.py @@ -1,18 +1,19 @@  from __future__ import absolute_import +from leap.common.events import (server as events_server, +                                register, catalog as events) +from email import message_from_file  from pixelated.config import credentials -from leap.common.events import server as events_server, register, catalog as events  from pixelated.bitmask_libraries.config import LeapConfig  from pixelated.bitmask_libraries.certs import LeapCertificate  from pixelated.bitmask_libraries.provider import LeapProvider  from pixelated.bitmask_libraries.session import LeapSessionFactory +from pixelated.adapter.model.mail import InputMail  from twisted.internet import defer +import os +import logging -_CREATE_WELCOME_MAIL = False - - -def CREATE_WELCOME_MAIL(): -    return _CREATE_WELCOME_MAIL +fresh_account = False  @defer.inlineCallbacks @@ -24,9 +25,12 @@ def initialize_leap(leap_provider_cert,                      initial_sync=True):      init_monkeypatches()      events_server.ensure_server() -    check_new_account() -    provider, username, password = credentials.read(organization_mode, credentials_file) -    LeapCertificate.set_cert_and_fingerprint(leap_provider_cert, leap_provider_cert_fingerprint) +    register(events.KEYMANAGER_FINISHED_KEY_GENERATION, +             set_fresh_account) +    provider, username, password = credentials.read(organization_mode, +                                                    credentials_file) +    LeapCertificate.set_cert_and_fingerprint(leap_provider_cert, +                                             leap_provider_cert_fingerprint)      config = LeapConfig(leap_home=leap_home, start_background_jobs=True)      provider = LeapProvider(provider, config) @@ -36,17 +40,30 @@ def initialize_leap(leap_provider_cert,      if initial_sync:          leap_session = yield leap_session.initial_sync() +    global fresh_account +    if fresh_account: +        add_welcome_mail(leap_session.mail_store) +      defer.returnValue(leap_session) -def init_monkeypatches(): -    import pixelated.extensions.requests_urllib3 +def add_welcome_mail(mail_store): +    current_path = os.path.dirname(os.path.abspath(__file__)) +    with open(os.path.join(current_path, +                           '..', +                           'assets', +                           'welcome.mail')) as mail_template_file: +        mail_template = message_from_file(mail_template_file) + +    input_mail = InputMail.from_python_mail(mail_template) +    logging.getLogger('pixelated.config.leap').info('Adding the welcome mail') +    mail_store.add_mail('INBOX', input_mail.raw) -def mark_to_create_welcome_mail(_, x): -    global _CREATE_WELCOME_MAIL -    _CREATE_WELCOME_MAIL = True +def init_monkeypatches(): +    import pixelated.extensions.requests_urllib3 -def check_new_account(): -    register(events.KEYMANAGER_FINISHED_KEY_GENERATION, mark_to_create_welcome_mail) +def set_fresh_account(_, x): +    global fresh_account +    fresh_account = True diff --git a/service/test/integration/test_welcome_mail.py b/service/test/integration/test_welcome_mail.py deleted file mode 100644 index dfd106dc..00000000 --- a/service/test/integration/test_welcome_mail.py +++ /dev/null @@ -1,43 +0,0 @@ -# -# Copyright (c) 2014 ThoughtWorks, Inc. -# -# Pixelated is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Pixelated is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with Pixelated. If not, see <http://www.gnu.org/licenses/>. - -from test.support.integration import SoledadTestBase -from twisted.internet import defer -from pixelated.adapter.model.mail import welcome_mail - - -class TestWelcomeMail(SoledadTestBase): - -    @defer.inlineCallbacks -    def _test_welcome_mail_is_added_only_once(self): -        yield self._add_welcome_mail() -        # yield self._add_welcome_mail() # TODO: verificar o pq de add 2 mails quando chamado 3 vezes -        # yield self._add_welcome_mail() -        inbox_mails = yield self.get_mails_by_mailbox_name('INBOX') -        self.assertEquals(1, len(inbox_mails)) - -    def _add_welcome_mail(self): -        mail = welcome_mail() -        self.add_mail_to_inbox(mail) - -    @defer.inlineCallbacks -    def _test_empty_mailbox_doesnt_mean_fresh_mailbox(self): -        yield self.mailboxes.add_welcome_mail_for_fresh_user() -        inbox_mails = yield self.get_mails_by_tag('inbox') -        yield self.delete_mail(inbox_mails[0].ident) -        yield self.mailboxes.add_welcome_mail_for_fresh_user() -        inbox_mails = yield self.get_mails_by_tag('inbox') -        self.assertEquals(0, len(inbox_mails)) diff --git a/service/test/unit/test_welcome_mail.py b/service/test/unit/test_welcome_mail.py new file mode 100644 index 00000000..7e9ab0c9 --- /dev/null +++ b/service/test/unit/test_welcome_mail.py @@ -0,0 +1,73 @@ +# +# Copyright (c) 2014 ThoughtWorks, Inc. +# +# Pixelated is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pixelated is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + +import os +import unittest +from mockito import verify, mock +from mockito.matchers import Matcher +from email import message_from_file +from pixelated.config.leap import add_welcome_mail +from pixelated.adapter.model.mail import InputMail + + +class TestWelcomeMail(unittest.TestCase): + +    def test_add_welcome_mail(self): +        mail_store = mock() +        input_mail = self._get_welcome_mail() + +        add_welcome_mail(mail_store) +        capture = WelcomeMailCapture() + +        verify(mail_store).add_mail('INBOX', capture) +        capture.assert_mail(input_mail.raw) + +    def _get_welcome_mail(self): +        current_path = os.path.dirname(os.path.abspath(__file__)) +        with open(os.path.join(current_path, +                               '..', +                               '..', +                               'pixelated', +                               'assets', +                               'welcome.mail')) as mail_template_file: +            mail_template = message_from_file(mail_template_file) + +        return InputMail.from_python_mail(mail_template) + + +class WelcomeMailCapture(Matcher): + +    def matches(self, arg): +        self.value = arg +        return True + +    def assert_mail(self, mail): +        captured_mail = self._format(self.value) +        expected_mail = self._format(mail) +        assert captured_mail == expected_mail + +    def _format(self, mail): +        splitter = '\n' +        arr = mail.split(splitter) +        arr = self._remove_variable_value(arr) + +        return splitter.join(arr) + +    def _remove_variable_value(self, arr): +        arr.pop(0) +        arr.pop(6) +        arr.pop(44) +        return arr | 
