class _BaseTestCase(unittest.TestCase): def setUp(self): #self.basedir = os.path.realpath(tempfile.mkdtemp()) self.env = EnvironmentStub(enable=['trac.*', 'acct_mgr.*']) self.env.config.set('account-manager', 'password_store', 'SessionStore') self.store = SessionStore(self.env) #self.env.path = os.path.join(self.basedir, 'trac-tempenv') #os.mkdir(self.env.path) def test_get_users(self): db = self.env.get_db_cnx() cursor = db.cursor() cursor.executemany("INSERT INTO session_attribute " "(sid,authenticated,name,value) " "VALUES (%s,1,'password',%s)", [('a', 'a'), ('b', 'b'), ('c', 'c')]) self.assertEqual(set(['a', 'b', 'c']), set(self.store.get_users())) def test_has_user(self): db = self.env.get_db_cnx() cursor = db.cursor() cursor.execute("INSERT INTO session_attribute " "(sid,authenticated,name,value) " "VALUES (%s,1,'password',%s)", ('bar', 'bar')) self.assertFalse(self.store.has_user('foo')) self.assertTrue(self.store.has_user('bar')) def test_create_user(self): self.assertFalse(self.store.has_user('foo')) self.store.set_password('foo', 'password') self.assertTrue(self.store.has_user('foo')) def test_update_password(self): self.store.set_password('foo', 'pass1') self.assertFalse(self.store.check_password('foo', 'pass2')) self.store.set_password('foo', 'pass2') self.assertTrue(self.store.check_password('foo', 'pass2')) self.store.set_password('foo', 'pass3', 'pass2') self.assertTrue(self.store.check_password('foo', 'pass3')) def test_delete_user(self): self.store.set_password('foo', 'password') self.assertTrue(self.store.has_user('foo')) self.assertTrue(self.store.delete_user('foo')) self.assertFalse(self.store.has_user('foo')) def test_delete_nonexistant_user(self): self.assertFalse(self.store.has_user('foo')) self.assertFalse(self.store.delete_user('foo')) def test_unicode_username_and_password(self): username = u'\u4e60' password = u'\u4e61' self.store.set_password(username, password) self.assertTrue(self.store.check_password(username, password))
class _BaseTestCase(unittest.TestCase): def setUp(self): #self.basedir = os.path.realpath(tempfile.mkdtemp()) self.env = EnvironmentStub(enable=['trac.*', 'acct_mgr.*']) self.env.config.set('account-manager', 'password_store', 'SessionStore') self.store = SessionStore(self.env) #self.env.path = os.path.join(self.basedir, 'trac-tempenv') #os.mkdir(self.env.path) def test_get_users(self): db = self.env.get_db_cnx() cursor = db.cursor() cursor.executemany( "INSERT INTO session_attribute " "(sid,authenticated,name,value) " "VALUES (%s,1,'password',%s)", [('a', 'a'), ('b', 'b'), ('c', 'c')]) self.assertEqual(set(['a', 'b', 'c']), set(self.store.get_users())) def test_has_user(self): db = self.env.get_db_cnx() cursor = db.cursor() cursor.execute( "INSERT INTO session_attribute " "(sid,authenticated,name,value) " "VALUES (%s,1,'password',%s)", ('bar', 'bar')) self.assertFalse(self.store.has_user('foo')) self.assertTrue(self.store.has_user('bar')) def test_create_user(self): self.assertFalse(self.store.has_user('foo')) self.store.set_password('foo', 'password') self.assertTrue(self.store.has_user('foo')) def test_update_password(self): self.store.set_password('foo', 'pass1') self.assertFalse(self.store.check_password('foo', 'pass2')) self.store.set_password('foo', 'pass2') self.assertTrue(self.store.check_password('foo', 'pass2')) self.store.set_password('foo', 'pass3', 'pass2') self.assertTrue(self.store.check_password('foo', 'pass3')) def test_delete_user(self): self.store.set_password('foo', 'password') self.assertTrue(self.store.has_user('foo')) self.assertTrue(self.store.delete_user('foo')) self.assertFalse(self.store.has_user('foo')) def test_delete_nonexistant_user(self): self.assertFalse(self.store.has_user('foo')) self.assertFalse(self.store.delete_user('foo')) def test_unicode_username_and_password(self): username = u'\u4e60' password = u'\u4e61' self.store.set_password(username, password) self.assertTrue(self.store.check_password(username, password))
class RegistrationModuleTestCase(_BaseTestCase): def setUp(self): _BaseTestCase.setUp(self) self.env = EnvironmentStub(enable=[ 'trac.*', 'acct_mgr.api.*', 'acct_mgr.db.*', 'acct_mgr.register.*', 'acct_mgr.pwhash.HtDigestHashMethod' ]) self.env.path = tempfile.mkdtemp() self.reg_template = 'register.html' self.req.method = 'POST' self.env.config.set('account-manager', 'password_store', 'SessionStore') self.acctmgr = AccountManager(self.env) self.check = BasicCheck(self.env) self.rmod = RegistrationModule(self.env) self.store = SessionStore(self.env) def test_checks(self): # Default configuration: All default checks enabled. response = self.rmod.process_request(self.req) self.assertEqual(response[0], self.reg_template) # Custom configuration: Do basic username checks only. self.req.args['username'] = '******' self.req.args['email'] = '*****@*****.**' self.env.config.set('account-manager', 'register_check', 'BasicCheck') response = self.rmod.process_request(self.req) self.assertEqual(response[0], self.reg_template) # Custom configuration: No check at all, if you insist. self.env.config.set('account-manager', 'register_check', '') self.assertFalse(self.acctmgr._register_check) response = self.rmod.process_request(self.req) self.assertEqual(response[0], self.reg_template) def test_mandatory_email_registration(self): user = '******' passwd = 'test' # A more complete mock of a request object is required for this test. req = Mock(authname='anonymous', method='POST', args={ 'action': 'create', 'username': user, 'name': 'Tester', 'password': passwd, 'password_confirm': passwd }, chrome=dict(notices=[], warnings=[]), href=self.env.abs_href, perm=MockPerm(), redirect=lambda x: None ) # Fail to register the user. self.rmod.process_request(req) self.assertTrue('email address' in str(req.chrome['warnings'])) self.assertEqual(list(self.store.get_users()), []) def test_optional_email_registration(self): user = '******' passwd = 'test' def redirect_noop(href): """Log relevant information for checking registration result.""" #print req.chrome['notices'] return # A more complete mock of a request object is required for this test. req = Mock(authname='anonymous', method='POST', args={ 'action': 'create', 'username': user, 'name': 'Tester', 'password': passwd, 'password_confirm': passwd }, chrome=dict(notices=[], warnings=[]), href=self.env.abs_href, perm=MockPerm(), redirect=redirect_noop ) self.env.config.set('account-manager', 'verify_email', False) # Successfully register the user. # Note: This would have raised an AttributeError without graceful # request checking for 'email'. self.rmod.process_request(req) # DEVEL: Check registration success more directly. self.assertEqual(req.chrome['warnings'], []) self.assertEqual([user], list(self.store.get_users())) self.assertTrue(self.store.check_password(user, passwd))
class _BaseTestCase(unittest.TestCase): def setUp(self): self.env = EnvironmentStub(enable=['trac.*', 'acct_mgr.*']) self.env.config.set('account-manager', 'password_store', 'SessionStore') self.store = SessionStore(self.env) def test_get_users(self): with self.env.db_transaction as db: db.executemany( """ INSERT INTO session_attribute (sid,authenticated,name,value) VALUES (%s,1,'password',%s) """, [('a', 'a'), ('b', 'b'), ('c', 'c')]) self.assertEqual(set(['a', 'b', 'c']), set(self.store.get_users())) def test_has_user(self): self.env.db_transaction( """ INSERT INTO session_attribute (sid,authenticated,name,value) VALUES (%s,'1','password',%s) """, ('bar', 'bar')) self.assertFalse(self.store.has_user('foo')) self.assertTrue(self.store.has_user('bar')) def test_create_user(self): self.assertFalse(self.store.has_user('foo')) self.store.set_password('foo', 'password') self.assertTrue(self.store.has_user('foo')) def test_overwrite(self): self.assertTrue(self.store.set_password('foo', 'pass1')) self.assertFalse( self.store.set_password('foo', 'pass2', overwrite=False)) self.assertTrue(self.store.check_password('foo', 'pass1')) self.assertTrue(self.store.set_password('bar', 'pass', overwrite=False)) def test_update_password(self): self.store.set_password('foo', 'pass1') self.assertFalse(self.store.check_password('foo', 'pass2')) self.store.set_password('foo', 'pass2') self.assertTrue(self.store.check_password('foo', 'pass2')) self.store.set_password('foo', 'pass3', 'pass2') self.assertTrue(self.store.check_password('foo', 'pass3')) def test_delete_user(self): self.store.set_password('foo', 'password') self.assertTrue(self.store.has_user('foo')) self.assertTrue(self.store.delete_user('foo')) self.assertFalse(self.store.has_user('foo')) def test_delete_nonexistant_user(self): self.assertFalse(self.store.has_user('foo')) self.assertFalse(self.store.delete_user('foo')) def test_unicode_username_and_password(self): username = u'\u4e60' password = u'\u4e61' self.store.set_password(username, password) self.assertTrue(self.store.check_password(username, password))
class RegistrationModuleTestCase(_BaseTestCase): def setUp(self): _BaseTestCase.setUp(self) self.env = EnvironmentStub(enable=[ 'trac.*', 'acct_mgr.api.*', 'acct_mgr.db.*', 'acct_mgr.register.*', 'acct_mgr.pwhash.HtDigestHashMethod' ]) self.env.path = tempfile.mkdtemp() self.reg_template = 'register.html' self.req.method = 'POST' self.env.config.set('account-manager', 'password_store', 'SessionStore') self.acctmgr = AccountManager(self.env) self.check = BasicCheck(self.env) self.rmod = RegistrationModule(self.env) self.store = SessionStore(self.env) def test_checks(self): # Default configuration: All default checks enabled. response = self.rmod.process_request(self.req) self.assertEqual(response[0], self.reg_template) # Custom configuration: Do basic username checks only. self.req.args['username'] = '******' self.req.args['email'] = '*****@*****.**' self.env.config.set('account-manager', 'register_check', 'BasicCheck') response = self.rmod.process_request(self.req) self.assertEqual(response[0], self.reg_template) # Custom configuration: No check at all, if you insist. self.env.config.set('account-manager', 'register_check', '') self.assertFalse(self.acctmgr.register_checks) response = self.rmod.process_request(self.req) self.assertEqual(response[0], self.reg_template) def test_mandatory_email_registration(self): user = '******' passwd = 'test' # A more complete mock of a request object is required for this test. req = Mock(authname='anonymous', method='POST', args={ 'action': 'create', 'username': user, 'name': 'Tester', 'password': passwd, 'password_confirm': passwd }, chrome=dict(notices=[], warnings=[]), href=self.env.abs_href, path_info='/register', perm=MockPerm(), redirect=lambda x: None) # Fail to register the user. self.rmod.process_request(req) self.assertTrue('email address' in str(req.chrome['warnings'])) self.assertEqual(list(self.store.get_users()), []) def test_optional_email_registration(self): user = '******' passwd = 'test' def redirect_noop(href): """Log relevant information for checking registration result.""" # print req.chrome['notices'] return # A more complete mock of a request object is required for this test. req = Mock(authname='anonymous', method='POST', args={ 'action': 'create', 'username': user, 'name': 'Tester', 'password': passwd, 'password_confirm': passwd }, chrome=dict(notices=[], warnings=[]), href=self.env.abs_href, path_info='/register', perm=MockPerm(), redirect=redirect_noop) self.env.config.set('account-manager', 'verify_email', False) # Successfully register the user. # Note: This would have raised an AttributeError without graceful # request checking for 'email'. self.rmod.process_request(req) # DEVEL: Check registration success more directly. self.assertEqual(req.chrome['warnings'], []) self.assertEqual([user], list(self.store.get_users())) self.assertTrue(self.store.check_password(user, passwd))
class _BaseTestCase(unittest.TestCase): def setUp(self): self.env = EnvironmentStub(enable=['trac.*', 'acct_mgr.*']) self.env.config.set('account-manager', 'password_store', 'SessionStore') self.store = SessionStore(self.env) def test_get_users(self): with self.env.db_transaction as db: db.executemany(""" INSERT INTO session_attribute (sid,authenticated,name,value) VALUES (%s,1,'password',%s) """, [('a', 'a'), ('b', 'b'), ('c', 'c')]) self.assertEqual(set(['a', 'b', 'c']), set(self.store.get_users())) def test_has_user(self): self.env.db_transaction(""" INSERT INTO session_attribute (sid,authenticated,name,value) VALUES (%s,'1','password',%s) """, ('bar', 'bar')) self.assertFalse(self.store.has_user('foo')) self.assertTrue(self.store.has_user('bar')) def test_create_user(self): self.assertFalse(self.store.has_user('foo')) self.store.set_password('foo', 'password') self.assertTrue(self.store.has_user('foo')) def test_overwrite(self): self.assertTrue(self.store.set_password('foo', 'pass1')) self.assertFalse(self.store.set_password('foo', 'pass2', overwrite=False)) self.assertTrue(self.store.check_password('foo', 'pass1')) self.assertTrue(self.store.set_password('bar', 'pass', overwrite=False)) def test_update_password(self): self.store.set_password('foo', 'pass1') self.assertFalse(self.store.check_password('foo', 'pass2')) self.store.set_password('foo', 'pass2') self.assertTrue(self.store.check_password('foo', 'pass2')) self.store.set_password('foo', 'pass3', 'pass2') self.assertTrue(self.store.check_password('foo', 'pass3')) def test_delete_user(self): self.store.set_password('foo', 'password') self.assertTrue(self.store.has_user('foo')) self.assertTrue(self.store.delete_user('foo')) self.assertFalse(self.store.has_user('foo')) def test_delete_nonexistant_user(self): self.assertFalse(self.store.has_user('foo')) self.assertFalse(self.store.delete_user('foo')) def test_unicode_username_and_password(self): username = u'\u4e60' password = u'\u4e61' self.store.set_password(username, password) self.assertTrue(self.store.check_password(username, password))