diff --git a/config.py b/config.py index 0d9e342a..4a1c3ab0 100644 --- a/config.py +++ b/config.py @@ -18,7 +18,11 @@ class DevelopmentConfig(Config): SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'data_dev.sqlite') -# class TestingConfig(Config): +class TestingConfig(Config): + TESTING = True + SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL') or \ + 'sqlite://' + WTF_CSRF_ENABLED = False # class ProductionConfig(Config): @@ -26,7 +30,7 @@ class DevelopmentConfig(Config): config = { 'development': DevelopmentConfig, - # 'testing': TestingConfig, + 'testing': TestingConfig, # 'production': ProductionConfig, 'default': DevelopmentConfig diff --git a/opaque.py b/opaque.py index 75a1e562..0e603289 100644 --- a/opaque.py +++ b/opaque.py @@ -11,3 +11,11 @@ migrate = Migrate(app, db) @app.shell_context_processor def make_shell_context(): return dict(db=db, User=User, Role=Role) + + +@app.cli.command() +def test(): + """Run the unit tests.""" + import unittest + tests = unittest.TestLoader().discover('tests') + unittest.TextTestRunner(verbosity=2).run(tests) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/test_basics.py b/tests/test_basics.py new file mode 100644 index 00000000..0fdf4983 --- /dev/null +++ b/tests/test_basics.py @@ -0,0 +1,22 @@ +import unittest +from flask import current_app +from app import create_app, db + + +class BasicsTestCase(unittest.TestCase): + def setUp(self): + self.app = create_app('testing') + self.app_context = self.app.app_context() + self.app_context.push() + db.create_all() + + def tearDown(self): + db.session.remove() + db.drop_all() + self.app_context.pop() + + def test_app_exists(self): + self.assertFalse(current_app is None) + + def test_app_is_testing(self): + self.assertTrue(current_app.config['TESTING']) diff --git a/tests/test_user_model.py b/tests/test_user_model.py new file mode 100644 index 00000000..3c794b0b --- /dev/null +++ b/tests/test_user_model.py @@ -0,0 +1,23 @@ +import unittest +from app.models import User + + +class UserModelTestCase(unittest.TestCase): + def test_password_setter(self): + u = User(password='cat') + self.assertTrue(u.password_hash is not None) + + def test_no_password_getter(self): + u = User(password='cat') + with self.assertRaises(AttributeError): + u.password + + def test_password_verification(self): + u = User(password='cat') + self.assertTrue(u.verify_password('cat')) + self.assertFalse(u.verify_password('dog')) + + def test_password_salts_are_random(self): + u = User(password='cat') + u2 = User(password='cat') + self.assertTrue(u.password_hash != u2.password_hash)