From b230d58eaa32a7f115881cffbf5637d98d1e8299 Mon Sep 17 00:00:00 2001 From: sw00 Date: Sun, 25 Oct 2015 18:18:23 -0200 Subject: template user's email address into title this should solve https://github.com/pixelated/pixelated-user-agent/issues/246 needed to inject leap_session into root resource to access user email on request. --- service/pixelated/application.py | 1 + service/pixelated/resources/root_resource.py | 10 ++++-- service/test/unit/resources/test_root_resource.py | 40 +++++++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 service/test/unit/resources/test_root_resource.py (limited to 'service') diff --git a/service/pixelated/application.py b/service/pixelated/application.py index bca4d5e5..3505f884 100644 --- a/service/pixelated/application.py +++ b/service/pixelated/application.py @@ -47,6 +47,7 @@ def start_user_agent(root_resource, leap_home, leap_session): yield add_welcome_mail(leap_session.mail_store) root_resource.initialize( + leap_session, services.keymanager, services.search_engine, services.mail_service, diff --git a/service/pixelated/resources/root_resource.py b/service/pixelated/resources/root_resource.py index e6046eae..fd3c4f92 100644 --- a/service/pixelated/resources/root_resource.py +++ b/service/pixelated/resources/root_resource.py @@ -1,5 +1,6 @@ import os import requests +from string import Template from pixelated.resources.attachments_resource import AttachmentsResource from pixelated.resources.contacts_resource import ContactsResource from pixelated.resources.features_resource import FeaturesResource @@ -22,6 +23,7 @@ class RootResource(Resource): Resource.__init__(self) self._startup_assets_folder = self._get_startup_folder() self._static_folder = self._get_static_folder() + self._html_template = open(os.path.join(self._static_folder, 'index.html')).read() self._startup_mode() def _startup_mode(self): @@ -33,7 +35,9 @@ class RootResource(Resource): return self return Resource.getChild(self, path, request) - def initialize(self, keymanager, search_engine, mail_service, draft_service, feedback_service): + def initialize(self, leap_session, keymanager, search_engine, mail_service, draft_service, feedback_service): + self._leap_session = leap_session + self.putChild('assets', File(self._static_folder)) self.putChild('keys', KeysResource(keymanager)) self.putChild('attachment', AttachmentsResource(mail_service)) @@ -67,4 +71,6 @@ class RootResource(Resource): if self._is_starting(): return open(os.path.join(self._startup_assets_folder, 'Interstitial.html')).read() else: - return open(os.path.join(self._static_folder, 'index.html')).read() + email = self._leap_session.account_email() + response = Template(self._html_template).safe_substitute(account_email=email) + return str(response) diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py new file mode 100644 index 00000000..dc1e97ae --- /dev/null +++ b/service/test/unit/resources/test_root_resource.py @@ -0,0 +1,40 @@ +import unittest +from mockito import mock, when +from test.unit.resources import DummySite +from twisted.web.test.requesthelper import DummyRequest +from pixelated.resources.root_resource import RootResource + + +class TestRootResource(unittest.TestCase): + + def setUp(self): + leap_session = mock() + when(leap_session).account_email().thenReturn('hackerman@pixelated.org') + root_resource = RootResource() + root_resource.initialize(leap_session, mock(), mock(), mock(), mock(), mock()) + root_resource._html_template = """ + + + $account_email + + """ + self.web = DummySite(root_resource) + + def test_render_GET_should_template_account_email(self): + request = DummyRequest(['']) + + d = self.web.get(request) + + def assert_response(_): + expected = """ + + + hackerman@pixelated.org + + """ + + actual = request.written[0] + self.assertEquals(expected, actual) + + d.addCallback(assert_response) + return d -- cgit v1.2.3 From e2c83c13ba0ca1edf94b5af0408f17c0d1aa4e95 Mon Sep 17 00:00:00 2001 From: sw00 Date: Mon, 9 Nov 2015 22:39:14 -0200 Subject: use mail_service to inject account_email into root_resource instead of using leap_session, mail_service can be used to get the account email. --- service/pixelated/adapter/services/mail_service.py | 3 ++- service/pixelated/application.py | 1 - service/pixelated/config/services.py | 3 ++- service/pixelated/resources/root_resource.py | 7 +++---- service/test/unit/resources/test_root_resource.py | 8 +++++--- 5 files changed, 12 insertions(+), 10 deletions(-) (limited to 'service') diff --git a/service/pixelated/adapter/services/mail_service.py b/service/pixelated/adapter/services/mail_service.py index 44c4c145..53f7615e 100644 --- a/service/pixelated/adapter/services/mail_service.py +++ b/service/pixelated/adapter/services/mail_service.py @@ -23,10 +23,11 @@ import os class MailService(object): - def __init__(self, mail_sender, mail_store, search_engine): + def __init__(self, mail_sender, mail_store, search_engine, account_email): self.mail_store = mail_store self.search_engine = search_engine self.mail_sender = mail_sender + self.account_email = account_email @defer.inlineCallbacks def all_mails(self): diff --git a/service/pixelated/application.py b/service/pixelated/application.py index 3505f884..bca4d5e5 100644 --- a/service/pixelated/application.py +++ b/service/pixelated/application.py @@ -47,7 +47,6 @@ def start_user_agent(root_resource, leap_home, leap_session): yield add_welcome_mail(leap_session.mail_store) root_resource.initialize( - leap_session, services.keymanager, services.search_engine, services.mail_service, diff --git a/service/pixelated/config/services.py b/service/pixelated/config/services.py index 35429c01..b70bb3f9 100644 --- a/service/pixelated/config/services.py +++ b/service/pixelated/config/services.py @@ -60,7 +60,8 @@ class Services(object): return MailService( pixelated_mail_sender, leap_session.mail_store, - search_engine) + search_engine, + leap_session.account_email()) def setup_draft_service(self, mail_store): return DraftService(mail_store) diff --git a/service/pixelated/resources/root_resource.py b/service/pixelated/resources/root_resource.py index fd3c4f92..7bb7b3ad 100644 --- a/service/pixelated/resources/root_resource.py +++ b/service/pixelated/resources/root_resource.py @@ -35,8 +35,8 @@ class RootResource(Resource): return self return Resource.getChild(self, path, request) - def initialize(self, leap_session, keymanager, search_engine, mail_service, draft_service, feedback_service): - self._leap_session = leap_session + def initialize(self, keymanager, search_engine, mail_service, draft_service, feedback_service): + self.account_email = mail_service.account_email self.putChild('assets', File(self._static_folder)) self.putChild('keys', KeysResource(keymanager)) @@ -71,6 +71,5 @@ class RootResource(Resource): if self._is_starting(): return open(os.path.join(self._startup_assets_folder, 'Interstitial.html')).read() else: - email = self._leap_session.account_email() - response = Template(self._html_template).safe_substitute(account_email=email) + response = Template(self._html_template).safe_substitute(account_email=self.account_email) return str(response) diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index dc1e97ae..068a531f 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -8,10 +8,12 @@ from pixelated.resources.root_resource import RootResource class TestRootResource(unittest.TestCase): def setUp(self): - leap_session = mock() - when(leap_session).account_email().thenReturn('hackerman@pixelated.org') + test_email = 'hackerman@pixelated-project.org' + mail_service = mock() + mail_service.account_email = test_email + root_resource = RootResource() - root_resource.initialize(leap_session, mock(), mock(), mock(), mock(), mock()) + root_resource.initialize(mock(), mock(), mail_service, mock(), mock()) root_resource._html_template = """ -- cgit v1.2.3 From ef86d4458c21f1d722fb162423cd3dfeea055844 Mon Sep 17 00:00:00 2001 From: sw00 Date: Tue, 10 Nov 2015 00:09:18 -0200 Subject: refactor unit test don't use initialize method of root_resource in test --- .../test/support/integration/app_test_client.py | 2 +- service/test/unit/adapter/test_mail_service.py | 2 +- service/test/unit/resources/test_root_resource.py | 28 +++++++--------------- 3 files changed, 10 insertions(+), 22 deletions(-) (limited to 'service') diff --git a/service/test/support/integration/app_test_client.py b/service/test/support/integration/app_test_client.py index 369a393d..484bea6e 100644 --- a/service/test/support/integration/app_test_client.py +++ b/service/test/support/integration/app_test_client.py @@ -166,7 +166,7 @@ class AppTestClient(object): return mail_sender def _create_mail_service(self, mail_sender, mail_store, search_engine): - mail_service = MailService(mail_sender, mail_store, search_engine) + mail_service = MailService(mail_sender, mail_store, search_engine, self.MAIL_ADDRESS) return mail_service def _generate_soledad_test_folder_name(self, soledad_test_folder='/tmp/soledad-test/test'): diff --git a/service/test/unit/adapter/test_mail_service.py b/service/test/unit/adapter/test_mail_service.py index 6faf5140..1ec3806e 100644 --- a/service/test/unit/adapter/test_mail_service.py +++ b/service/test/unit/adapter/test_mail_service.py @@ -37,7 +37,7 @@ class TestMailService(unittest.TestCase): self.mail_sender = mock() self.search_engine = mock() - self.mail_service = MailService(self.mail_sender, self.mail_store, self.search_engine) + self.mail_service = MailService(self.mail_sender, self.mail_store, self.search_engine, 'acount@email') def tearDown(self): unstub() diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 068a531f..4cdaf97a 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -1,4 +1,5 @@ import unittest +import re from mockito import mock, when from test.unit.resources import DummySite from twisted.web.test.requesthelper import DummyRequest @@ -6,20 +7,13 @@ from pixelated.resources.root_resource import RootResource class TestRootResource(unittest.TestCase): + MAIL_ADDRESS = 'test_user@pixelated-project.org' def setUp(self): - test_email = 'hackerman@pixelated-project.org' - mail_service = mock() - mail_service.account_email = test_email - root_resource = RootResource() - root_resource.initialize(mock(), mock(), mail_service, mock(), mock()) - root_resource._html_template = """ - - - $account_email - - """ + root_resource._mode = root_resource + root_resource.account_email = self.MAIL_ADDRESS + root_resource._html_template = "$account_email" self.web = DummySite(root_resource) def test_render_GET_should_template_account_email(self): @@ -28,15 +22,9 @@ class TestRootResource(unittest.TestCase): d = self.web.get(request) def assert_response(_): - expected = """ - - - hackerman@pixelated.org - - """ - - actual = request.written[0] - self.assertEquals(expected, actual) + expected = "{0}".format(self.MAIL_ADDRESS) + matches = re.findall(expected, request.written[0]) + self.assertEquals(len(matches), 1) d.addCallback(assert_response) return d -- cgit v1.2.3