From 98d33bddedc3cc83d4f504caef60ad7507ab4511 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonel=20C=C3=A2mara?= Date: Mon, 14 Mar 2016 23:59:08 +0000 Subject: [PATCH] Tests for IS_IN_DB, IS_NOT_IN_DB, IS_URL (also tests IS_HTTP_URL IS_GENERIC_URL) --- gluon/tests/test_validators.py | 51 +++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/gluon/tests/test_validators.py b/gluon/tests/test_validators.py index 64255a7b..a84467ab 100644 --- a/gluon/tests/test_validators.py +++ b/gluon/tests/test_validators.py @@ -180,9 +180,38 @@ class TestValidators(unittest.TestCase): rtn = IS_IN_SET([('id1','first label'), ('id2','second label')])('id1') # Redundant way self.assertEqual(rtn, ('id1', None)) - # TODO: def test_IS_IN_DB(self): + def test_IS_IN_DB(self): + from gluon.dal import DAL, Field + db = DAL('sqlite:memory') + db.define_table('person', Field('name')) + george_id = db.person.insert(name='george') + costanza_id = db.person.insert(name='costanza') + rtn = IS_IN_DB(db, 'person.id', '%(name)s')(george_id) + self.assertEqual(rtn, (george_id, None)) + rtn = IS_IN_DB(db, 'person.id', '%(name)s', error_message='oops')(george_id+costanza_id) + self.assertEqual(rtn, (george_id+costanza_id, 'oops')) + rtn = IS_IN_DB(db, db.person.id, '%(name)s')(george_id) + self.assertEqual(rtn, (george_id, None)) + rtn = IS_IN_DB(db, db.person.id, '%(name)s', error_message='oops')(george_id+costanza_id) + self.assertEqual(rtn, (george_id+costanza_id, 'oops')) + rtn = IS_IN_DB(db, 'person.id', '%(name)s', multiple=True)([george_id,costanza_id]) + self.assertEqual(rtn, ([george_id,costanza_id], None)) + rtn = IS_IN_DB(db, 'person.id', '%(name)s', multiple=True, delimiter=',')('%d,%d' % (george_id, costanza_id)) + self.assertEqual(rtn, ( ('%d,%d' % (george_id, costanza_id)).split(','), None)) + rtn = IS_IN_DB(db, db.person.id, '%(name)s', error_message='oops').options(zero=False) + self.assertEqual(sorted(rtn), [('%d' % george_id, 'george'), ('%d' % costanza_id, 'costanza')]) + db.person.drop() - # TODO: def test_IS_NOT_IN_DB(self): + def test_IS_NOT_IN_DB(self): + from gluon.dal import DAL, Field + db = DAL('sqlite:memory') + db.define_table('person', Field('name')) + db.person.insert(name='george') + rtn = IS_NOT_IN_DB(db, 'person.name', error_message='oops')('george') + self.assertEqual(rtn, ('george', 'oops')) + rtn = IS_NOT_IN_DB(db, 'person.name')('jerry') + self.assertEqual(rtn, ('jerry', None)) + db.person.drop() def test_IS_INT_IN_RANGE(self): rtn = IS_INT_IN_RANGE(1,5)('4') @@ -400,11 +429,19 @@ class TestValidators(unittest.TestCase): rtn = IS_LIST_OF_EMAILS()(';'.join(emails)) self.assertEqual(rtn, ('localguy@localhost;_Yosemite.Sam@example.com;a', 'Invalid emails: a')) - # TODO: def test_IS_GENERIC_URL(self): - - # TODO: def test_IS_HTTP_URL(self): - - # TODO: def test_IS_URL(self): + def test_IS_URL(self): + rtn = IS_URL()('http://example.com') + self.assertEqual(rtn, ('http://example.com', None)) + rtn = IS_URL(error_message='oops')('http://example,com') + self.assertEqual(rtn, ('http://example,com', 'oops')) + rtn = IS_URL(error_message='oops')('http://www.example.com:8800/a/b/c/d/e/f/g/h') + self.assertEqual(rtn, ('http://www.example.com:8800/a/b/c/d/e/f/g/h', None)) + rtn = IS_URL(error_message='oops', prepend_scheme='http')('example.com') + self.assertEqual(rtn, ('http://example.com', None)) + rtn = IS_URL()('http://example.com?q=george&p=22') + self.assertEqual(rtn, ('http://example.com?q=george&p=22', None)) + rtn = IS_URL(mode='generic', prepend_scheme=None)('example.com') + self.assertEqual(rtn, ('example.com', None)) def test_IS_TIME(self): rtn = IS_TIME()('21:30')