Merge pull request #1257 from BuhtigithuB/improve-tools-tests
Improve tools tests
This commit is contained in:
+168
-80
@@ -29,57 +29,6 @@ from gluon.http import HTTP
|
|||||||
python_version = sys.version[:3]
|
python_version = sys.version[:3]
|
||||||
IS_IMAP = "imap" in DEFAULT_URI
|
IS_IMAP = "imap" in DEFAULT_URI
|
||||||
|
|
||||||
@unittest.skipIf(IS_IMAP, "TODO: Imap raises 'Connection refused'")
|
|
||||||
class TestAuth(unittest.TestCase):
|
|
||||||
|
|
||||||
def testRun(self):
|
|
||||||
# setup
|
|
||||||
request = Request(env={})
|
|
||||||
request.application = 'a'
|
|
||||||
request.controller = 'c'
|
|
||||||
request.function = 'f'
|
|
||||||
request.folder = 'applications/admin'
|
|
||||||
response = Response()
|
|
||||||
session = Session()
|
|
||||||
T = translator('', 'en')
|
|
||||||
session.connect(request, response)
|
|
||||||
from gluon.globals import current
|
|
||||||
current.request = request
|
|
||||||
current.response = response
|
|
||||||
current.session = session
|
|
||||||
current.T = T
|
|
||||||
db = DAL(DEFAULT_URI, check_reserved=['all'])
|
|
||||||
auth = Auth(db)
|
|
||||||
auth.define_tables(username=True, signature=False)
|
|
||||||
self.assertTrue('auth_user' in db)
|
|
||||||
self.assertTrue('auth_group' in db)
|
|
||||||
self.assertTrue('auth_membership' in db)
|
|
||||||
self.assertTrue('auth_permission' in db)
|
|
||||||
self.assertTrue('auth_event' in db)
|
|
||||||
db.define_table('t0', Field('tt'), auth.signature)
|
|
||||||
auth.enable_record_versioning(db)
|
|
||||||
self.assertTrue('t0_archive' in db)
|
|
||||||
for f in ['login', 'register', 'retrieve_password',
|
|
||||||
'retrieve_username']:
|
|
||||||
html_form = getattr(auth, f)().xml()
|
|
||||||
self.assertTrue('name="_formkey"' in html_form)
|
|
||||||
|
|
||||||
for f in ['logout', 'verify_email', 'reset_password',
|
|
||||||
'change_password', 'profile', 'groups']:
|
|
||||||
self.assertRaisesRegexp(HTTP, "303*", getattr(auth, f))
|
|
||||||
|
|
||||||
self.assertRaisesRegexp(HTTP, "401*", auth.impersonate)
|
|
||||||
|
|
||||||
try:
|
|
||||||
for t in ['t0_archive', 't0', 'auth_cas', 'auth_event',
|
|
||||||
'auth_membership', 'auth_permission', 'auth_group',
|
|
||||||
'auth_user']:
|
|
||||||
db[t].drop()
|
|
||||||
except SyntaxError as e:
|
|
||||||
# GAE doesn't support drop
|
|
||||||
pass
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
class TestMail(unittest.TestCase):
|
class TestMail(unittest.TestCase):
|
||||||
"""
|
"""
|
||||||
@@ -102,7 +51,7 @@ class TestMail(unittest.TestCase):
|
|||||||
users = {}
|
users = {}
|
||||||
|
|
||||||
def __init__(self, address, port, **kwargs):
|
def __init__(self, address, port, **kwargs):
|
||||||
self.address=address
|
self.address = address
|
||||||
self.port = port
|
self.port = port
|
||||||
self.has_quit = False
|
self.has_quit = False
|
||||||
self.tls = False
|
self.tls = False
|
||||||
@@ -110,14 +59,14 @@ class TestMail(unittest.TestCase):
|
|||||||
def login(self, username, password):
|
def login(self, username, password):
|
||||||
if username not in self.users or self.users[username] != password:
|
if username not in self.users or self.users[username] != password:
|
||||||
raise smtplib.SMTPAuthenticationError
|
raise smtplib.SMTPAuthenticationError
|
||||||
self.username=username
|
self.username = username
|
||||||
self.password=password
|
self.password = password
|
||||||
|
|
||||||
def sendmail(self, sender, to, payload):
|
def sendmail(self, sender, to, payload):
|
||||||
self.inbox.append(TestMail.Message(sender, to, payload))
|
self.inbox.append(TestMail.Message(sender, to, payload))
|
||||||
|
|
||||||
def quit(self):
|
def quit(self):
|
||||||
self.has_quit=True
|
self.has_quit = True
|
||||||
|
|
||||||
def ehlo(self, hostname=None):
|
def ehlo(self, hostname=None):
|
||||||
pass
|
pass
|
||||||
@@ -125,7 +74,6 @@ class TestMail(unittest.TestCase):
|
|||||||
def starttls(self):
|
def starttls(self):
|
||||||
self.tls = True
|
self.tls = True
|
||||||
|
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.original_SMTP = smtplib.SMTP
|
self.original_SMTP = smtplib.SMTP
|
||||||
self.original_SMTP_SSL = smtplib.SMTP_SSL
|
self.original_SMTP_SSL = smtplib.SMTP_SSL
|
||||||
@@ -141,10 +89,10 @@ class TestMail(unittest.TestCase):
|
|||||||
mail.settings.server = 'smtp.example.com:25'
|
mail.settings.server = 'smtp.example.com:25'
|
||||||
mail.settings.sender = 'you@example.com'
|
mail.settings.sender = 'you@example.com'
|
||||||
self.assertTrue(mail.send(to=['somebody@example.com'],
|
self.assertTrue(mail.send(to=['somebody@example.com'],
|
||||||
subject='hello',
|
subject='hello',
|
||||||
# If reply_to is omitted, then mail.settings.sender is used
|
# If reply_to is omitted, then mail.settings.sender is used
|
||||||
reply_to='us@example.com',
|
reply_to='us@example.com',
|
||||||
message='world'))
|
message='world'))
|
||||||
message = TestMail.DummySMTP.inbox.pop()
|
message = TestMail.DummySMTP.inbox.pop()
|
||||||
self.assertEqual(message.sender, mail.settings.sender)
|
self.assertEqual(message.sender, mail.settings.sender)
|
||||||
self.assertEqual(message.to, ['somebody@example.com'])
|
self.assertEqual(message.to, ['somebody@example.com'])
|
||||||
@@ -158,10 +106,10 @@ class TestMail(unittest.TestCase):
|
|||||||
mail.settings.sender = 'you@example.com'
|
mail.settings.sender = 'you@example.com'
|
||||||
mail.settings.login = 'username:password'
|
mail.settings.login = 'username:password'
|
||||||
self.assertFalse(mail.send(to=['somebody@example.com'],
|
self.assertFalse(mail.send(to=['somebody@example.com'],
|
||||||
subject='hello',
|
subject='hello',
|
||||||
# If reply_to is omitted, then mail.settings.sender is used
|
# If reply_to is omitted, then mail.settings.sender is used
|
||||||
reply_to='us@example.com',
|
reply_to='us@example.com',
|
||||||
message='world'))
|
message='world'))
|
||||||
|
|
||||||
def test_login(self):
|
def test_login(self):
|
||||||
TestMail.DummySMTP.users['username'] = 'password'
|
TestMail.DummySMTP.users['username'] = 'password'
|
||||||
@@ -170,10 +118,10 @@ class TestMail(unittest.TestCase):
|
|||||||
mail.settings.sender = 'you@example.com'
|
mail.settings.sender = 'you@example.com'
|
||||||
mail.settings.login = 'username:password'
|
mail.settings.login = 'username:password'
|
||||||
self.assertTrue(mail.send(to=['somebody@example.com'],
|
self.assertTrue(mail.send(to=['somebody@example.com'],
|
||||||
subject='hello',
|
subject='hello',
|
||||||
# If reply_to is omitted, then mail.settings.sender is used
|
# If reply_to is omitted, then mail.settings.sender is used
|
||||||
reply_to='us@example.com',
|
reply_to='us@example.com',
|
||||||
message='world'))
|
message='world'))
|
||||||
del TestMail.DummySMTP.users['username']
|
del TestMail.DummySMTP.users['username']
|
||||||
TestMail.DummySMTP.inbox.pop()
|
TestMail.DummySMTP.inbox.pop()
|
||||||
|
|
||||||
@@ -182,10 +130,10 @@ class TestMail(unittest.TestCase):
|
|||||||
mail.settings.server = 'smtp.example.com:25'
|
mail.settings.server = 'smtp.example.com:25'
|
||||||
mail.settings.sender = 'you@example.com'
|
mail.settings.sender = 'you@example.com'
|
||||||
self.assertTrue(mail.send(to=['somebody@example.com'],
|
self.assertTrue(mail.send(to=['somebody@example.com'],
|
||||||
subject='hello',
|
subject='hello',
|
||||||
# If reply_to is omitted, then mail.settings.sender is used
|
# If reply_to is omitted, then mail.settings.sender is used
|
||||||
reply_to='us@example.com',
|
reply_to='us@example.com',
|
||||||
message='<html><head></head><body></body></html>'))
|
message='<html><head></head><body></body></html>'))
|
||||||
message = TestMail.DummySMTP.inbox.pop()
|
message = TestMail.DummySMTP.inbox.pop()
|
||||||
self.assertTrue('Content-Type: text/html' in message.payload)
|
self.assertTrue('Content-Type: text/html' in message.payload)
|
||||||
|
|
||||||
@@ -195,10 +143,10 @@ class TestMail(unittest.TestCase):
|
|||||||
mail.settings.sender = 'you@example.com'
|
mail.settings.sender = 'you@example.com'
|
||||||
mail.settings.ssl = True
|
mail.settings.ssl = True
|
||||||
self.assertTrue(mail.send(to=['somebody@example.com'],
|
self.assertTrue(mail.send(to=['somebody@example.com'],
|
||||||
subject='hello',
|
subject='hello',
|
||||||
# If reply_to is omitted, then mail.settings.sender is used
|
# If reply_to is omitted, then mail.settings.sender is used
|
||||||
reply_to='us@example.com',
|
reply_to='us@example.com',
|
||||||
message='world'))
|
message='world'))
|
||||||
TestMail.DummySMTP.inbox.pop()
|
TestMail.DummySMTP.inbox.pop()
|
||||||
|
|
||||||
def test_tls(self):
|
def test_tls(self):
|
||||||
@@ -207,16 +155,156 @@ class TestMail(unittest.TestCase):
|
|||||||
mail.settings.sender = 'you@example.com'
|
mail.settings.sender = 'you@example.com'
|
||||||
mail.settings.tls = True
|
mail.settings.tls = True
|
||||||
self.assertTrue(mail.send(to=['somebody@example.com'],
|
self.assertTrue(mail.send(to=['somebody@example.com'],
|
||||||
subject='hello',
|
subject='hello',
|
||||||
# If reply_to is omitted, then mail.settings.sender is used
|
# If reply_to is omitted, then mail.settings.sender is used
|
||||||
reply_to='us@example.com',
|
reply_to='us@example.com',
|
||||||
message='world'))
|
message='world'))
|
||||||
TestMail.DummySMTP.inbox.pop()
|
TestMail.DummySMTP.inbox.pop()
|
||||||
|
|
||||||
|
|
||||||
|
# TODO class TestRecaptcha(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
|
# TODO class TestRecaptcha2(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: class TestAuthJWT(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
|
@unittest.skipIf(IS_IMAP, "TODO: Imap raises 'Connection refused'")
|
||||||
|
class TestAuth(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
request = Request(env={})
|
||||||
|
request.application = 'a'
|
||||||
|
request.controller = 'c'
|
||||||
|
request.function = 'f'
|
||||||
|
request.folder = 'applications/admin'
|
||||||
|
response = Response()
|
||||||
|
session = Session()
|
||||||
|
T = translator('', 'en')
|
||||||
|
session.connect(request, response)
|
||||||
|
from gluon.globals import current
|
||||||
|
current.request = request
|
||||||
|
current.response = response
|
||||||
|
current.session = session
|
||||||
|
current.T = T
|
||||||
|
self.db = DAL(DEFAULT_URI, check_reserved=['all'])
|
||||||
|
self.auth = Auth(self.db)
|
||||||
|
self.auth.define_tables(username=True, signature=False)
|
||||||
|
self.db.define_table('t0', Field('tt'), self.auth.signature)
|
||||||
|
self.auth.enable_record_versioning(self.db)
|
||||||
|
# Create a user
|
||||||
|
self.db.auth_user.insert(first_name='Bart',
|
||||||
|
last_name='Simpson',
|
||||||
|
username='user1',
|
||||||
|
email='user1@test.com',
|
||||||
|
password='password_123',
|
||||||
|
registration_key=None,
|
||||||
|
registration_id=None)
|
||||||
|
|
||||||
|
self.db.commit()
|
||||||
|
|
||||||
|
def test_assert_setup(self):
|
||||||
|
self.assertEqual(self.db(self.db.auth_user.username == 'user1').select().first()['id'], 1)
|
||||||
|
self.assertTrue('auth_user' in self.db)
|
||||||
|
self.assertTrue('auth_group' in self.db)
|
||||||
|
self.assertTrue('auth_membership' in self.db)
|
||||||
|
self.assertTrue('auth_permission' in self.db)
|
||||||
|
self.assertTrue('auth_event' in self.db)
|
||||||
|
|
||||||
|
def test_enable_record_versioning(self):
|
||||||
|
self.assertTrue('t0_archive' in self.db)
|
||||||
|
|
||||||
|
def test_basic_blank_forms(self):
|
||||||
|
for f in ['login', 'register', 'retrieve_password',
|
||||||
|
'retrieve_username']:
|
||||||
|
html_form = getattr(self.auth, f)().xml()
|
||||||
|
self.assertTrue('name="_formkey"' in html_form)
|
||||||
|
|
||||||
|
for f in ['logout', 'verify_email', 'reset_password',
|
||||||
|
'change_password', 'profile', 'groups']:
|
||||||
|
self.assertRaisesRegexp(HTTP, "303*", getattr(self.auth, f))
|
||||||
|
|
||||||
|
self.assertRaisesRegexp(HTTP, "401*", self.auth.impersonate)
|
||||||
|
|
||||||
|
try:
|
||||||
|
for t in ['t0_archive', 't0', 'auth_cas', 'auth_event',
|
||||||
|
'auth_membership', 'auth_permission', 'auth_group',
|
||||||
|
'auth_user']:
|
||||||
|
self.db[t].drop()
|
||||||
|
except SyntaxError as e:
|
||||||
|
# GAE doesn't support drop
|
||||||
|
pass
|
||||||
|
return
|
||||||
|
|
||||||
|
def test_get_or_create_user(self):
|
||||||
|
self.db.auth_user.insert(email='user1@test.com', password='password_123')
|
||||||
|
self.db.commit()
|
||||||
|
# True case
|
||||||
|
self.assertEqual(self.auth.get_or_create_user({'email': 'user1@test.com',
|
||||||
|
'username': 'user1'})['username'], 'user1')
|
||||||
|
# user2 doesn't exist yet and get created
|
||||||
|
self.assertEqual(self.auth.get_or_create_user({'email': 'user2@test.com',
|
||||||
|
'username': 'user2'})['username'], 'user2')
|
||||||
|
# user3 for corner case
|
||||||
|
self.assertEqual(self.auth.get_or_create_user({'first_name': 'Omer',
|
||||||
|
'last_name': 'Simpson',
|
||||||
|
'email': 'user3@test.com',
|
||||||
|
'registration_id': 'user3',
|
||||||
|
'username': 'user3'})['username'], 'user3')
|
||||||
|
# False case
|
||||||
|
self.assertEqual(self.auth.get_or_create_user({'email': ''}), None)
|
||||||
|
self.db.auth_user.truncate()
|
||||||
|
self.db.commit()
|
||||||
|
|
||||||
|
def test_login_bare(self):
|
||||||
|
# The following test case should succeed but failed as I never received the user record but False
|
||||||
|
# TODO: Make this test pass
|
||||||
|
# self.assertEqual(self.auth.login_bare(username='user1', password='password_123')['username'], 'user1')
|
||||||
|
# Failing login because bad_password
|
||||||
|
self.assertEqual(self.auth.login_bare(username='user1', password='bad_password'), False)
|
||||||
|
|
||||||
|
def test_register_bare(self):
|
||||||
|
# corner case empty register call register_bare without args
|
||||||
|
self.assertRaises(ValueError, self.auth.register_bare)
|
||||||
|
# failing register_bare user already exist
|
||||||
|
self.assertEqual(self.auth.register_bare(username='user1', password='wrong_password'), False)
|
||||||
|
# successful register_bare
|
||||||
|
self.assertEqual(self.auth.register_bare(username='user2',
|
||||||
|
email='user2@test.com',
|
||||||
|
password='password_123')['username'], 'user2')
|
||||||
|
# raise ValueError
|
||||||
|
self.assertRaises(ValueError, self.auth.register_bare,
|
||||||
|
**dict(wrong_field_name='user3', password='password_123'))
|
||||||
|
# raise ValueError wrong email
|
||||||
|
self.assertRaises(ValueError, self.auth.register_bare,
|
||||||
|
**dict(email='user4@', password='password_123'))
|
||||||
|
self.db.auth_user.truncate()
|
||||||
|
self.db.commit()
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: class TestCrud(unittest.TestCase):
|
||||||
|
# It deprecated so far from a priority
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: class TestService(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: class TestPluginManager(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: class TestExpose(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: class TestWiki(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: class TestConfig(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: class TestToolsFunctions(unittest.TestCase):
|
||||||
|
# For all the tools.py functions
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|||||||
+2
-3
@@ -2575,7 +2575,7 @@ class Auth(object):
|
|||||||
update_keys[key] = keys[key]
|
update_keys[key] = keys[key]
|
||||||
user.update_record(**update_keys)
|
user.update_record(**update_keys)
|
||||||
elif checks:
|
elif checks:
|
||||||
if not 'first_name' in keys and 'first_name' in table_user.fields:
|
if 'first_name' not in keys and 'first_name' in table_user.fields:
|
||||||
guess = keys.get('email', 'anonymous').split('@')[0]
|
guess = keys.get('email', 'anonymous').split('@')[0]
|
||||||
keys['first_name'] = keys.get('username', guess)
|
keys['first_name'] = keys.get('username', guess)
|
||||||
vars = table_user._filter_fields(keys)
|
vars = table_user._filter_fields(keys)
|
||||||
@@ -2698,8 +2698,7 @@ class Auth(object):
|
|||||||
fields[settings.passfield] = \
|
fields[settings.passfield] = \
|
||||||
settings.table_user[settings.passfield].validate(fields[settings.passfield])[0]
|
settings.table_user[settings.passfield].validate(fields[settings.passfield])[0]
|
||||||
if not fields.get(settings.userfield):
|
if not fields.get(settings.userfield):
|
||||||
raise ValueError('register_bare: ' +
|
raise ValueError('register_bare: userfield not provided or invalid')
|
||||||
'userfield not provided or invalid')
|
|
||||||
user = self.get_or_create_user(fields, login=False, get=False,
|
user = self.get_or_create_user(fields, login=False, get=False,
|
||||||
update_fields=self.settings.update_fields)
|
update_fields=self.settings.update_fields)
|
||||||
if not user:
|
if not user:
|
||||||
|
|||||||
Reference in New Issue
Block a user