Source code for ferris.tests.lib

from google.appengine.ext import testbed, deferred
from google.appengine.api.blobstore import blobstore_stub, file_blob_storage
from google.appengine.api.files import file_service_stub
from google.appengine.api.search.simple_search_stub import SearchServiceStub
import unittest
import webtest
import os
import base64
import ferris

from ferris.core.wsgi import WSGIApp
from settings import app_config


class TestbedWithFiles(testbed.Testbed):
    def init_blobstore_stub(self):
        import tempfile
        blob_storage = file_blob_storage.FileBlobStorage(tempfile.gettempdir(),
                                                testbed.DEFAULT_APP_ID)
        blob_stub = blobstore_stub.BlobstoreServiceStub(blob_storage)
        file_stub = file_service_stub.FileServiceStub(blob_storage)
        self._register_stub('blobstore', blob_stub)
        self._register_stub('file', file_stub)


[docs]class WithTestBed(unittest.TestCase): """ Provides a complete App Engine test environment. """ def setUp(self): self.testbed = TestbedWithFiles() self.testbed.setup_env( AUTH_DOMAIN='example.com', APPLICATION_ID='_') self.testbed.activate() self.testbed.init_memcache_stub() self.testbed.init_datastore_v3_stub() self.testbed.init_taskqueue_stub(root_path=os.path.join(os.path.abspath(os.path.dirname(ferris.__file__)), '..')) self.testbed.init_blobstore_stub() self.testbed.init_images_stub() self.testbed.init_logservice_stub() self.testbed.init_mail_stub() self.testbed.init_urlfetch_stub() self.testbed.init_user_stub() stub = SearchServiceStub() self.testbed._register_stub('search', stub) self.taskqueue_stub = self.testbed.get_stub(testbed.TASKQUEUE_SERVICE_NAME) def tearDown(self): self.testbed.deactivate() def loginUser(self, email='test@example.com', admin=False): self.testbed.setup_env( USER_EMAIL=email, USER_ID='123', USER_IS_ADMIN='1' if admin else '0', AUTH_DOMAIN='example.com', overwrite=True) def runDeferredTasks(self, queue='default'): tasks = self.taskqueue_stub.GetTasks(queue) while tasks: self.taskqueue_stub.FlushQueue(queue) for task in tasks: deferred.run(base64.b64decode(task['body'])) tasks = self.taskqueue_stub.GetTasks(queue)
[docs]class AppTestCase(WithTestBed): """ Provides a complete App Engine test environment and also automatically routes all application and plugin handlers to ``testapp``. """ def setUp(self): super(AppTestCase, self).setUp() import main reload(main) self.testapp = webtest.TestApp(main.app)
class FerrisTestCase(WithTestBed): def setUp(self): super(FerrisTestCase, self).setUp() app = WSGIApp(debug=True, config=app_config) self.testapp = webtest.TestApp(app)