Committing present MediaGoblin translations before pushing extracted messages
[mediagoblin.git] / mediagoblin / tests / tools.py
index cc4a7addf66c8c10c6b3aeb67a89703aae882002..2ee39e89c00c57f5f534972d0b4dec86b98f5df2 100644 (file)
@@ -15,6 +15,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
+import sys
 import os
 import pkg_resources
 import shutil
@@ -28,12 +29,10 @@ from mediagoblin import mg_globals
 from mediagoblin.db.models import User, MediaEntry, Collection
 from mediagoblin.tools import testing
 from mediagoblin.init.config import read_mediagoblin_config
-from mediagoblin.db.open import setup_connection_and_db_from_config
 from mediagoblin.db.base import Session
 from mediagoblin.meddleware import BaseMeddleware
 from mediagoblin.auth.lib import bcrypt_gen_password_hash
 from mediagoblin.gmg_commands.dbupdate import run_dbupdate
-from mediagoblin.init.celery import setup_celery_app
 
 
 MEDIAGOBLIN_TEST_DB_NAME = u'__mediagoblin_tests__'
@@ -41,21 +40,9 @@ TEST_SERVER_CONFIG = pkg_resources.resource_filename(
     'mediagoblin.tests', 'test_paste.ini')
 TEST_APP_CONFIG = pkg_resources.resource_filename(
     'mediagoblin.tests', 'test_mgoblin_app.ini')
-TEST_USER_DEV = pkg_resources.resource_filename(
-    'mediagoblin.tests', 'test_user_dev')
-MGOBLIN_APP = None
 
-USER_DEV_DIRECTORIES_TO_SETUP = [
-    'media/public', 'media/queue',
-    'beaker/sessions/data', 'beaker/sessions/lock']
 
-BAD_CELERY_MESSAGE = """\
-Sorry, you *absolutely* must run nosetests with the
-mediagoblin.init.celery.from_tests module.  Like so:
-$ CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_tests ./bin/nosetests"""
-
-
-class BadCeleryEnviron(Exception): pass
+USER_DEV_DIRECTORIES_TO_SETUP = ['media/public', 'media/queue']
 
 
 class TestingMeddleware(BaseMeddleware):
@@ -97,41 +84,40 @@ class TestingMeddleware(BaseMeddleware):
         return
 
 
-def suicide_if_bad_celery_environ():
-    if not os.environ.get('CELERY_CONFIG_MODULE') == \
-            'mediagoblin.init.celery.from_tests':
-        raise BadCeleryEnviron(BAD_CELERY_MESSAGE)
-
-
-def get_app(dump_old_app=True):
-    suicide_if_bad_celery_environ()
-
-    # Make sure we've turned on testing
-    testing._activate_testing()
+def get_app(request, paste_config=None, mgoblin_config=None):
+    """Create a MediaGoblin app for testing.
 
-    # Leave this imported as it sets up celery.
-    from mediagoblin.init.celery import from_tests
+    Args:
+     - request: Not an http request, but a pytest fixture request.  We
+       use this to make temporary directories that pytest
+       automatically cleans up as needed.
+     - paste_config: particular paste config used by this application.
+     - mgoblin_config: particular mediagoblin config used by this
+       application.
+    """
+    paste_config = paste_config or TEST_SERVER_CONFIG
+    mgoblin_config = mgoblin_config or TEST_APP_CONFIG
 
-    global MGOBLIN_APP
+    # This is the directory we're copying the paste/mgoblin config stuff into
+    run_dir = request.config._tmpdirhandler.mktemp(
+        'mgoblin_app', numbered=True)
+    user_dev_dir = run_dir.mkdir('user_dev').strpath
 
-    # Just return the old app if that exists and it's okay to set up
-    # and return
-    if MGOBLIN_APP and not dump_old_app:
-        return MGOBLIN_APP
+    new_paste_config = run_dir.join('paste.ini').strpath
+    new_mgoblin_config = run_dir.join('mediagoblin.ini').strpath
+    shutil.copyfile(paste_config, new_paste_config)
+    shutil.copyfile(mgoblin_config, new_mgoblin_config)
 
     Session.rollback()
     Session.remove()
 
-    # Remove and reinstall user_dev directories
-    if os.path.exists(TEST_USER_DEV):
-        shutil.rmtree(TEST_USER_DEV)
-
+    # install user_dev directories
     for directory in USER_DEV_DIRECTORIES_TO_SETUP:
-        full_dir = os.path.join(TEST_USER_DEV, directory)
+        full_dir = os.path.join(user_dev_dir, directory)
         os.makedirs(full_dir)
 
     # Get app config
-    global_config, validation_result = read_mediagoblin_config(TEST_APP_CONFIG)
+    global_config, validation_result = read_mediagoblin_config(new_mgoblin_config)
     app_config = global_config['mediagoblin']
 
     # Run database setup/migrations
@@ -139,10 +125,7 @@ def get_app(dump_old_app=True):
 
     # setup app and return
     test_app = loadapp(
-        'config:' + TEST_SERVER_CONFIG)
-
-    # Re-setup celery
-    setup_celery_app(app_config, global_config)
+        'config:' + new_paste_config)
 
     # Insert the TestingMeddleware, which can do some
     # sanity checks on every request/response.
@@ -151,26 +134,10 @@ def get_app(dump_old_app=True):
     mg_globals.app.meddleware.insert(0, TestingMeddleware(mg_globals.app))
 
     app = TestApp(test_app)
-    MGOBLIN_APP = app
 
     return app
 
 
-def setup_fresh_app(func):
-    """
-    Decorator to setup a fresh test application for this function.
-
-    Cleans out test buckets and passes in a new, fresh test_app.
-    """
-    @wraps(func)
-    def wrapper(*args, **kwargs):
-        test_app = get_app()
-        testing.clear_test_buckets()
-        return func(test_app, *args, **kwargs)
-
-    return wrapper
-
-
 def install_fixtures_simple(db, fixtures):
     """
     Very simply install fixtures in the database
@@ -235,7 +202,7 @@ def fixture_media_entry(title=u"Some title", slug=None,
     entry.slug = slug
     entry.uploader = uploader or fixture_add_user().id
     entry.media_type = u'image'
-    
+
     if gen_slug:
         entry.generate_slug()
     if save:
@@ -263,3 +230,4 @@ def fixture_add_collection(name=u"My first Collection", user=None):
     Session.expunge(coll)
 
     return coll
+