summaryrefslogtreecommitdiff
path: root/service/test/support/integration
diff options
context:
space:
mode:
Diffstat (limited to 'service/test/support/integration')
-rw-r--r--service/test/support/integration/app_test_client.py67
-rw-r--r--service/test/support/integration/soledad_test_base.py2
2 files changed, 39 insertions, 30 deletions
diff --git a/service/test/support/integration/app_test_client.py b/service/test/support/integration/app_test_client.py
index eab001c6..860b9c40 100644
--- a/service/test/support/integration/app_test_client.py
+++ b/service/test/support/integration/app_test_client.py
@@ -18,8 +18,6 @@ import multiprocessing
import shutil
import time
-from pixelated.config.routes import setup_routes
-from klein.test_resource import requestMock, _render
from leap.mail.imap.account import SoledadBackedAccount
from leap.soledad.client import Soledad
from mock import MagicMock, Mock
@@ -29,16 +27,23 @@ from pixelated.adapter.services.mail_service import MailService
from pixelated.adapter.services.mailboxes import Mailboxes
from pixelated.adapter.soledad.soledad_querier import SoledadQuerier
from pixelated.adapter.services.tag_service import TagService
-from pixelated.controllers import FeaturesController, HomeController, MailsController, TagsController, \
- SyncInfoController, AttachmentsController, ContactsController
+from pixelated.resources.root_resource import RootResource
import pixelated.runserver
from pixelated.adapter.model.mail import PixelatedMail
from pixelated.adapter.search import SearchEngine
from test.support.integration.model import MailBuilder
+from test.support.test_helper import request_mock
+from twisted.internet import reactor
+from twisted.internet.defer import Deferred
+from twisted.web.resource import getChildForRequest
+from twisted.web.server import Site
class AppTestClient:
- def __init__(self, soledad_test_folder='soledad-test/test'):
+ INDEX_KEY = '\xde3?\x87\xff\xd9\xd3\x14\xf0\xa7>\x1f%C{\x16.\\\xae\x8c\x13\xa7\xfb\x04\xd4]+\x8d_\xed\xd1\x8d\x0bI' \
+ '\x8a\x0e\xa4tm\xab\xbf\xb4\xa5\x99\x00d\xd5w\x9f\x18\xbc\x1d\xd4_W\xd2\xb6\xe8H\x83\x1b\xd8\x9d\xad'
+
+ def __init__(self, soledad_test_folder='/tmp/soledad-test/test'):
self.soledad = initialize_soledad(tempdir=soledad_test_folder)
self.mail_address = "test@pixelated.org"
@@ -51,7 +56,7 @@ class AppTestClient:
self.app = pixelated.runserver.app
self.soledad_querier = SoledadQuerier(self.soledad)
- self.soledad_querier.get_index_masterkey = lambda: '\xde3?\x87\xff\xd9\xd3\x14\xf0\xa7>\x1f%C{\x16.\\\xae\x8c\x13\xa7\xfb\x04\xd4]+\x8d_\xed\xd1\x8d\x0bI\x8a\x0e\xa4tm\xab\xbf\xb4\xa5\x99\x00d\xd5w\x9f\x18\xbc\x1d\xd4_W\xd2\xb6\xe8H\x83\x1b\xd8\x9d\xad'
+ self.soledad_querier.get_index_masterkey = lambda: self.INDEX_KEY
self.account = SoledadBackedAccount('test', self.soledad, MagicMock())
self.mailboxes = Mailboxes(self.account, self.soledad_querier)
@@ -63,55 +68,59 @@ class AppTestClient:
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)
- contacts_controller = ContactsController(search_engine=self.search_engine)
- sync_info_controller = SyncInfoController()
- attachments_controller = AttachmentsController(self.soledad_querier)
+ self.app.resource = RootResource()
- setup_routes(self.app, home_controller, mails_controller, tags_controller,
- features_controller, sync_info_controller, attachments_controller, contacts_controller)
+ self.app.resource.initialize(self.soledad_querier, self.search_engine, self.mail_service, self.draft_service)
def _render(self, request, as_json=True):
+ def get_str(_str):
+ return json.loads(_str) if as_json else _str
+
def get_request_written_data(_=None):
written_data = request.getWrittenData()
if written_data:
- return json.loads(written_data) if as_json else written_data
+ return get_str(written_data)
+
+ resource = getChildForRequest(self.app.resource, request)
+ result = resource.render(request)
+
+ if isinstance(result, basestring):
+ return get_str(result), request
- d = _render(self.app.resource(), request)
if request.finished:
- return get_request_written_data(), request
+ d = Deferred()
+ d.addCallback(get_request_written_data)
+ return d, request
else:
+ d = request.notifyFinish()
+ d.addCallback(lambda _: request)
d.addCallback(get_request_written_data)
return d, request
- def run_on_a_thread(self, logfile='/tmp/app_test_client.log', port=4567, host='localhost'):
- worker = lambda: self.app.run(host=host, port=port, logFile=open(logfile, 'w'))
- process = multiprocessing.Process(target=worker)
+ def run_on_a_thread(self, logfile='/tmp/app_test_client.log', port=4567, host='0.0.0.0'):
+ def _start():
+ reactor.listenTCP(port, Site(self.app.resource), interface=host)
+ reactor.run()
+ process = multiprocessing.Process(target=_start)
process.start()
- time.sleep(1) # just let it start
+ time.sleep(1)
return lambda: process.terminate()
def get(self, path, get_args, as_json=True):
- request = requestMock(path)
+ request = request_mock(path)
request.args = get_args
return self._render(request, as_json)
def post(self, path, body=''):
- request = requestMock(path=path, method="POST", body=body, headers={'Content-Type': ['application/json']})
+ request = request_mock(path=path, method="POST", body=body, headers={'Content-Type': ['application/json']})
return self._render(request)
def put(self, path, body):
- request = requestMock(path=path, method="PUT", body=body, headers={'Content-Type': ['application/json']})
+ request = request_mock(path=path, method="PUT", body=body, headers={'Content-Type': ['application/json']})
return self._render(request)
def delete(self, path, body=""):
- request = requestMock(path=path, body=body, headers={'Content-Type': ['application/json']}, method="DELETE")
+ request = request_mock(path=path, body=body, headers={'Content-Type': ['application/json']}, method="DELETE")
return self._render(request)
def add_document_to_soledad(self, _dict):
diff --git a/service/test/support/integration/soledad_test_base.py b/service/test/support/integration/soledad_test_base.py
index 4149462c..5892de60 100644
--- a/service/test/support/integration/soledad_test_base.py
+++ b/service/test/support/integration/soledad_test_base.py
@@ -15,7 +15,7 @@
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
import unittest
-from pixelated.controllers import *
+from pixelated.resources import *
from test.support.integration.app_test_client import AppTestClient
from test.support.integration.model import ResponseMail