fixture_add_user: Factoring a unit test tool
authorElrond <elrond+mediagoblin.org@samba-tng.org>
Thu, 1 Dec 2011 22:33:47 +0000 (23:33 +0100)
committerElrond <elrond+mediagoblin.org@samba-tng.org>
Thu, 1 Dec 2011 22:33:47 +0000 (23:33 +0100)
Some unit tests need a user in the database, especially to
act as that user.  Some routines did that on their own.  So
factored this whole thing into a new function and use it
around.

mediagoblin/tests/test_auth.py
mediagoblin/tests/test_edit.py
mediagoblin/tests/test_submission.py
mediagoblin/tests/tools.py

index 153c6e53824e88fca163c6090349544238222b11..acef3d26b2af5222609fb563fef9f235298f25a8 100644 (file)
@@ -20,7 +20,7 @@ import datetime
 from nose.tools import assert_equal
 
 from mediagoblin.auth import lib as auth_lib
-from mediagoblin.tests.tools import setup_fresh_app
+from mediagoblin.tests.tools import setup_fresh_app, fixture_add_user
 from mediagoblin import mg_globals
 from mediagoblin.tools import template, mail
 
@@ -332,11 +332,7 @@ def test_authentication_views(test_app):
     Test logging in and logging out
     """
     # Make a new user
-    test_user = mg_globals.database.User()
-    test_user['username'] = u'chris'
-    test_user['email'] = u'chris@example.com'
-    test_user['pw_hash'] = auth_lib.bcrypt_gen_password_hash('toast')
-    test_user.save()
+    test_user = fixture_add_user(active_user=False)
 
     # Get login
     # ---------
index 3637b046501b614b074f20c67bed0157c1d73acb..c29ddfe920fe006d5ca89098dd836f53ff9dc1d6 100644 (file)
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from mediagoblin import mg_globals
-from mediagoblin.tests.tools import setup_fresh_app
+from mediagoblin.tests.tools import setup_fresh_app, fixture_add_user
 from mediagoblin.tools import template
-from mediagoblin.auth.lib import bcrypt_check_password, \
-                                 bcrypt_gen_password_hash
+from mediagoblin.auth.lib import bcrypt_check_password
 
 
 @setup_fresh_app
 def test_change_password(test_app):
     """Test changing password correctly and incorrectly"""
     # set up new user
-    test_user = mg_globals.database.User()
-    test_user['username'] = u'chris'
-    test_user['email'] = u'chris@example.com'
-    test_user['email_verified'] = True
-    test_user['status'] = u'active'
-    test_user['pw_hash'] = bcrypt_gen_password_hash('toast')
-    test_user.save()
+    test_user = fixture_add_user()
 
     test_app.post(
         '/auth/login/', {
@@ -73,13 +66,7 @@ def test_change_password(test_app):
 def change_bio_url(test_app):
     """Test changing bio and URL"""
     # set up new user
-    test_user = mg_globals.database.User()
-    test_user['username'] = u'chris'
-    test_user['email'] = u'chris@example.com'
-    test_user['email_verified'] = True
-    test_user['status'] = u'active'
-    test_user['pw_hash'] = bcrypt_gen_password_hash('toast')
-    test_user.save()
+    test_user = fixture_add_user()
 
     # test changing the bio and the URL properly
     test_app.post(
index eea5747fb102c9a01b38c1f5a92cf2468416c6d3..7ea6c4bcd7a9ae0c411dc545480f530248a211c9 100644 (file)
@@ -19,8 +19,8 @@ import pkg_resources
 
 from nose.tools import assert_equal, assert_true, assert_false
 
-from mediagoblin.auth import lib as auth_lib
-from mediagoblin.tests.tools import setup_fresh_app, get_test_app
+from mediagoblin.tests.tools import setup_fresh_app, get_test_app, \
+    fixture_add_user
 from mediagoblin import mg_globals
 from mediagoblin.tools import template, common
 
@@ -45,13 +45,7 @@ class TestSubmission:
 
         # TODO: Possibly abstract into a decorator like:
         # @as_authenticated_user('chris')
-        test_user = mg_globals.database.User()
-        test_user['username'] = u'chris'
-        test_user['email'] = u'chris@example.com'
-        test_user['email_verified'] = True
-        test_user['status'] = u'active'
-        test_user['pw_hash'] = auth_lib.bcrypt_gen_password_hash('toast')
-        test_user.save()
+        test_user = fixture_add_user()
 
         self.test_user = test_user
 
index 01813e96ea4887e4882a1d2a87e755fd1fa2e993..49a3d33ef94c6118874cc254bc79956c6002e675 100644 (file)
@@ -27,6 +27,7 @@ from mediagoblin.init.config import read_mediagoblin_config
 from mediagoblin.decorators import _make_safe
 from mediagoblin.db.open import setup_connection_and_db_from_config
 from mediagoblin.meddleware import BaseMeddleware
+from mediagoblin.auth.lib import bcrypt_gen_password_hash
 
 
 MEDIAGOBLIN_TEST_DB_NAME = u'__mediagoblin_tests__'
@@ -200,3 +201,19 @@ def assert_db_meets_expected(db, expected):
             document = collection.find_one({'_id': expected_document['_id']})
             assert document is not None  # make sure it exists
             assert document == expected_document  # make sure it matches
+
+
+def fixture_add_user(username = u'chris', password = 'toast',
+                     active_user = True):
+    test_user = mg_globals.database.User()
+    test_user.username = username
+    test_user.email = username + u'@example.com'
+    if password is not None:
+        test_user.pw_hash = bcrypt_gen_password_hash(password)
+    if active_user:
+        test_user.email_verified = True
+        test_user.status = u'active'
+
+    test_user.save()
+
+    return test_user