# -*- coding: utf-8 -*- """Unit and functional test suite for pod.""" from os import getcwd, path from paste.deploy import loadapp from webtest import TestApp from gearbox.commands.setup_app import SetupAppCommand from tg import config from tg.util import Bunch from pod import model __all__ = ['setup_app', 'setup_db', 'teardown_db', 'TestController'] application_name = 'main_without_authn' def load_app(name=application_name): """Load the test application.""" return TestApp(loadapp('config:test.ini#%s' % name, relative_to=getcwd())) def setup_app(): """Setup the application.""" cmd = SetupAppCommand(Bunch(options=Bunch(verbose_level=1)), Bunch()) cmd.run(Bunch(config_file='config:test.ini', section_name=None)) def setup_db(): """Create the database schema (not needed when you run setup_app).""" engine = config['tg.app_globals'].sa_engine model.init_model(engine) model.metadata.create_all(engine) def teardown_db(): """Destroy the database schema.""" engine = config['tg.app_globals'].sa_engine model.metadata.drop_all(engine) class TestController(object): """Base functional test case for the controllers. The pod application instance (``self.app``) set up in this test case (and descendants) has authentication disabled, so that developers can test the protected areas independently of the :mod:`repoze.who` plugins used initially. This way, authentication can be tested once and separately. Check pod.tests.functional.test_authentication for the repoze.who integration tests. This is the officially supported way to test protected areas with repoze.who-testutil (http://code.gustavonarea.net/repoze.who-testutil/). """ application_under_test = application_name def setUp(self): """Setup test fixture for each functional test method.""" self.app = load_app(self.application_under_test) setup_app() def tearDown(self): """Tear down test fixture for each functional test method.""" model.DBSession.remove() teardown_db()