Switch to side-by-side view

--- a
+++ b/AlluraTesting/alluratest/controller.py
@@ -0,0 +1,84 @@
+"""Unit and functional test suite for allura."""
+import os
+
+import mock
+import beaker.session
+from paste.deploy import loadapp
+from paste.script.appinstall import SetupCommand
+from pylons import c, g, h, url, request, response, session
+import tg
+from webtest import TestApp
+from webob import Request, Response
+import ew
+from ming.orm import ThreadLocalORMSession
+
+from allura import model as M
+from allura.lib.app_globals import Globals
+from allura.lib.custom_middleware import environ as ENV, MagicalC
+
+from .validation import ValidatingTestApp
+
+DFL_APP_NAME = 'main_without_authn'
+
+def get_config_file(config=None):
+    if not config:
+        return 'test.ini'
+    return config
+
+def setup_basic_test(config=None, app_name=DFL_APP_NAME):
+    '''Create clean environment for running tests'''
+    try:
+        conf_dir = tg.config.here
+    except AttributeError:
+        conf_dir = os.getcwd()
+    environ = {}
+    ew.TemplateEngine.initialize({})
+    ew.widget_context.set_up(environ)
+    ew.widget_context.resource_manager = ew.ResourceManager()
+    ENV.set_environment(environ)
+    test_file = os.path.join(conf_dir, get_config_file(config))
+    cmd = SetupCommand('setup-app')
+    cmd.run([test_file])
+
+def setup_functional_test(config=None, app_name=DFL_APP_NAME):
+    '''Create clean environment for running tests.  Also return WSGI test app'''
+    config = get_config_file(config)
+    setup_basic_test(config, app_name)
+    conf_dir = tg.config.here
+    wsgiapp = loadapp('config:%s#%s' % (config, app_name),
+                      relative_to=conf_dir)
+    return wsgiapp
+
+def setup_unit_test():
+    from allura.lib import helpers
+    g._push_object(Globals())
+    c._push_object(MagicalC(mock.Mock(), ENV))
+    h._push_object(helpers)
+    url._push_object(lambda:None)
+    c.queued_messages = None
+    request._push_object(Request.blank('/'))
+    response._push_object(Response())
+    session._push_object(beaker.session.SessionObject({}))
+    ThreadLocalORMSession.close_all()
+
+def setup_global_objects():
+    setup_unit_test()
+    g.set_project('test')
+    g.set_app('wiki')
+    c.user = M.User.query.get(username='test-admin')
+
+
+class TestController(object):
+    
+    application_under_test = 'main'
+    validate_skip = False
+
+    def setUp(self):
+        """Method called by nose before running each test"""
+        self.app = ValidatingTestApp(setup_functional_test(app_name=self.application_under_test))
+        if self.validate_skip:
+            self.app.validate_skip = self.validate_skip
+    
+    def tearDown(self):
+        """Method called by nose after running each test"""
+        pass