Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / __init__.py @ a2d3e48e

History | View | Annotate | Download (2.45 KB)

1
# -*- coding: utf-8 -*-
2
"""Unit and functional test suite for vigiboard."""
3

    
4
from os import path, environ
5
import sys
6

    
7
from tg import config
8
from paste.deploy import loadapp
9
from paste.script.appinstall import SetupCommand
10
from routes import url_for
11
from webtest import TestApp
12
import nose
13
from nose.tools import eq_, nottest
14

    
15
from vigiboard import model
16

    
17
__all__ = ['setup_db', 'teardown_db', 'TestController', 'url_for']
18

    
19
def setup_db():
20
    """Method used to build a database"""
21
    engine = config['pylons.app_globals'].sa_engine 
22
    model.init_model(engine)
23
    model.metadata.create_all(engine)
24

    
25
def teardown_db():
26
    """Method used to destroy a database"""
27
    engine = config['pylons.app_globals'].sa_engine
28
    model.metadata.drop_all(engine)
29

    
30

    
31
class TestController(object):
32
    """
33
    Base functional test case for the controllers.
34
    
35
    The vigiboard application instance (``self.app``) set up in this test 
36
    case (and descendants) has authentication disabled, so that developers can
37
    test the protected areas independently of the :mod:`repoze.who` plugins
38
    used initially. This way, authentication can be tested once and separately.
39
    
40
    Check vigiboard.tests.functional.test_authentication for the repoze.who
41
    integration tests.
42
    
43
    This is the officially supported way to test protected areas with
44
    repoze.who-testutil (http://code.gustavonarea.net/repoze.who-testutil/).
45
    
46
    """
47
    
48
    application_under_test = 'main_without_authn'
49
    
50
    def setUp(self):
51
        """Method called by nose before running each test"""
52
        # Loading the application:
53
        conf_dir = config.here
54
        wsgiapp = loadapp('config:test.ini#%s' % self.application_under_test,
55
                          relative_to=conf_dir)
56
        self.app = TestApp(wsgiapp)
57
        # Setting it up:
58
        test_file = path.join(conf_dir, 'test.ini')
59
        cmd = SetupCommand('setup-app')
60
        cmd.run([test_file])
61
    
62
    def tearDown(self):
63
        """Method called by nose after running each test"""
64
        # Cleaning up the database:
65
        teardown_db()
66

    
67

    
68
def runtests():
69
    # XXX This is a hack, some import gets there first.
70
    #environ.setdefault('VIGILO_SETTINGS_MODULE', 'settings_tests')
71
    # XXX hard-coded path.
72
    sys.argv[1:0] = ['--with-pylons', '../vigiboard/test.ini', 
73
                     '--with-coverage', '--cover-inclusive',
74
                     '--cover-erase', '--cover-package', 'vigiboard',
75
                     'vigiboard.tests' ]
76
    nose.main()
77