From ba583f83895cdf998ebee7c80ace26a40338c414 Mon Sep 17 00:00:00 2001 From: Duda Dornelles Date: Tue, 18 Nov 2014 19:42:06 -0200 Subject: Fixing functional tests. Im not proud. --- service/test/functional/features/environment.py | 19 +--- .../test/functional/features/steps/data_setup.py | 2 +- service/test/support/integration_helper.py | 124 +++++++++++---------- 3 files changed, 74 insertions(+), 71 deletions(-) (limited to 'service') diff --git a/service/test/functional/features/environment.py b/service/test/functional/features/environment.py index cb9e0876..5d481e25 100644 --- a/service/test/functional/features/environment.py +++ b/service/test/functional/features/environment.py @@ -17,25 +17,19 @@ import time import multiprocessing from selenium import webdriver -from test.support.integration_helper import SoledadTestBase -import pixelated.runserver import logging +from test.support.integration_helper import setup_test_app + +logging.disable('INFO') import pixelated.controllers.features_controller def before_all(context): - context.soledad_test_base = SoledadTestBase() - context.soledad_test_base.setup_soledad() - - context.mailboxes = context.soledad_test_base.mailboxes - context.app = pixelated.runserver.app - context.app.mail_service = context.soledad_test_base.mail_service pixelated.controllers.features_controller.FeaturesController.DISABLED_FEATURES.append('autoRefresh') - logging.disable('INFO') + setup_test_app(context) - worker = lambda app, port: pixelated.runserver.app.run(host='localhost', port=4567, - logFile=open('/tmp/behave-tests.log', 'w')) - context._process = multiprocessing.Process(target=worker, args=(context.app, 4567)) + worker = lambda: context.app.run(host='localhost', port=4567, logFile=open('/tmp/behave-tests.log', 'w')) + context._process = multiprocessing.Process(target=worker) context._process.start() # we must wait the server start listening @@ -43,7 +37,6 @@ def before_all(context): def after_all(context): - context.soledad_test_base.teardown_soledad() context._process.terminate() diff --git a/service/test/functional/features/steps/data_setup.py b/service/test/functional/features/steps/data_setup.py index 51c5f9b8..e3e9a389 100644 --- a/service/test/functional/features/steps/data_setup.py +++ b/service/test/functional/features/steps/data_setup.py @@ -19,4 +19,4 @@ from test.support.integration_helper import MailBuilder @given('I have a mail in my inbox') def add_mail_impl(context): input_mail = MailBuilder().build_input_mail() - context.soledad_test_base.add_mail_to_inbox(input_mail) + context.add_mail_to_inbox(input_mail) diff --git a/service/test/support/integration_helper.py b/service/test/support/integration_helper.py index 0008d33f..fd8ce75a 100644 --- a/service/test/support/integration_helper.py +++ b/service/test/support/integration_helper.py @@ -15,6 +15,7 @@ # along with Pixelated. If not, see . import shutil + from klein.resource import KleinResource from leap.soledad.client import Soledad from mockito import mock @@ -33,8 +34,7 @@ from pixelated.controllers import * import pixelated.config.app_factory as app_factory from leap.mail.imap.account import SoledadBackedAccount from klein.test_resource import requestMock, _render -from nose.twistedtools import stop_reactor, threaded_reactor -from twisted.internet.error import ReactorNotRestartable +import unittest soledad_test_folder = "soledad-test" @@ -117,52 +117,80 @@ class MailBuilder: return InputMail.from_dict(self.mail) -import unittest +def add_document_to_soledad(self, _dict): + self.soledad_querier.soledad.create_doc(_dict) + + +def add_mail_to_inbox(self, input_mail): + mail = self.mailboxes.inbox().add(input_mail) + mail.update_tags(input_mail.tags) + self.search_engine.index_mail(mail) + + +def add_multiple_to_mailbox(self, num, mailbox='', flags=[], tags=[]): + mails = [] + for _ in range(num): + input_mail = MailBuilder().with_status(flags).with_tags(tags).build_input_mail() + mail = self.mailboxes._create_or_get(mailbox).add(input_mail) + mails.append(mail) + mail.update_tags(input_mail.tags) + self.search_engine.index_mail(mail) + return mails + + +def setup_test_app(self): + from functools import partial + self.add_document_to_soledad = partial(add_document_to_soledad, self) + self.add_mail_to_inbox = partial(add_mail_to_inbox, self) + self.add_multiple_to_mailbox = partial(add_multiple_to_mailbox, self) + + self.soledad = initialize_soledad(tempdir=soledad_test_folder) + self.mail_address = "test@pixelated.org" + + # setup app + PixelatedMail.from_email_address = self.mail_address + + SearchEngine.INDEX_FOLDER = soledad_test_folder + '/search_index' + + self.app = pixelated.runserver.app + + self.soledad_querier = SoledadQuerier(self.soledad) + self.soledad_querier.get_index_masterkey = lambda: '_yg2oG_5ELM8_-sQYcsxI37WesI0dOtZQXpwAqjvhR4=' + + self.account = SoledadBackedAccount('test', self.soledad, MagicMock()) + self.mailboxes = Mailboxes(self.account, self.soledad_querier) + self.mail_sender = mock() + self.tag_service = TagService() + self.draft_service = DraftService(self.mailboxes) + self.mail_service = MailService(self.mailboxes, self.mail_sender, self.tag_service, + self.soledad_querier) + self.search_engine = SearchEngine(self.soledad_querier) + self.search_engine.index_mails(self.mail_service.all_mails()) + + features_controller = FeaturesController() + features_controller.DISABLED_FEATURES.append('autoReload') + home_controller = HomeController() + mails_controller = MailsController(mail_service=self.mail_service, + draft_service=self.draft_service, + search_engine=self.search_engine) + tags_controller = TagsController(search_engine=self.search_engine) + sync_info_controller = SyncInfoController() + attachments_controller = AttachmentsController(self.soledad_querier) + + app_factory._setup_routes(self.app, home_controller, mails_controller, tags_controller, + features_controller, sync_info_controller, attachments_controller) + self.resource = KleinResource(self.app) class SoledadTestBase(unittest.TestCase): @classmethod def setUpClass(cls): + from nose.twistedtools import threaded_reactor threaded_reactor() def setUp(self): - self.soledad = initialize_soledad(tempdir=soledad_test_folder) - self.mail_address = "test@pixelated.org" - - # setup app - PixelatedMail.from_email_address = self.mail_address - - SearchEngine.INDEX_FOLDER = soledad_test_folder + '/search_index' - - self.app = pixelated.runserver.app - - self.soledad_querier = SoledadQuerier(self.soledad) - self.soledad_querier.get_index_masterkey = lambda: '_yg2oG_5ELM8_-sQYcsxI37WesI0dOtZQXpwAqjvhR4=' - - self.account = SoledadBackedAccount('test', self.soledad, MagicMock()) - self.mailboxes = Mailboxes(self.account, self.soledad_querier) - self.mail_sender = mock() - self.tag_service = TagService() - self.draft_service = DraftService(self.mailboxes) - self.mail_service = MailService(self.mailboxes, self.mail_sender, self.tag_service, - self.soledad_querier) - self.search_engine = SearchEngine(self.soledad_querier) - self.search_engine.index_mails(self.mail_service.all_mails()) - - features_controller = FeaturesController() - features_controller.DISABLED_FEATURES.append('autoReload') - home_controller = HomeController() - mails_controller = MailsController(mail_service=self.mail_service, - draft_service=self.draft_service, - search_engine=self.search_engine) - tags_controller = TagsController(search_engine=self.search_engine) - sync_info_controller = SyncInfoController() - attachments_controller = AttachmentsController(self.soledad_querier) - - app_factory._setup_routes(self.app, home_controller, mails_controller, tags_controller, - features_controller, sync_info_controller, attachments_controller) - self.resource = KleinResource(self.app) + setup_test_app(self) def get_mails_by_tag(self, tag, page=1, window=100): request = requestMock(path="/mails") @@ -233,24 +261,6 @@ class SoledadTestBase(unittest.TestCase): _render(self.resource, request) return request - def add_document_to_soledad(self, _dict): - self.soledad_querier.soledad.create_doc(_dict) - - def add_mail_to_inbox(self, input_mail): - mail = self.mailboxes.inbox().add(input_mail) - mail.update_tags(input_mail.tags) - self.search_engine.index_mail(mail) - - def add_multiple_to_mailbox(self, num, mailbox='', flags=[], tags=[]): - mails = [] - for _ in range(num): - input_mail = MailBuilder().with_status(flags).with_tags(tags).build_input_mail() - mail = self.mailboxes._create_or_get(mailbox).add(input_mail) - mails.append(mail) - mail.update_tags(input_mail.tags) - self.search_engine.index_mail(mail) - return mails - class ResponseMail: def __init__(self, mail_dict): -- cgit v1.2.3