summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorJefferson Stachelski <jeffhsta@riseup.net>2015-10-20 21:08:29 -0200
committerJefferson Stachelski <jeffhsta@riseup.net>2015-10-20 21:11:21 -0200
commit33ac29beffa23c844900ae0b8f189e955bbde9d2 (patch)
tree1b7d9a0551593405d79a951b05212917e037bcff /service
parentbae4d080349faa50e54de2c7c13b4503afac798d (diff)
Refactored the welcome mail logic and add a test
Diffstat (limited to 'service')
-rw-r--r--service/pixelated/application.py18
-rw-r--r--service/pixelated/config/leap.py49
-rw-r--r--service/test/integration/test_welcome_mail.py43
-rw-r--r--service/test/unit/test_welcome_mail.py73
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