diff -r 745e8426a348 -r 5cf0b529afca test/db_test_base.py --- a/test/db_test_base.py Fri May 20 19:29:16 2016 +0300 +++ b/test/db_test_base.py Fri Jun 03 18:14:08 2016 +0300 @@ -22,7 +22,7 @@ import pytest from roundup.hyperdb import String, Password, Link, Multilink, Date, \ - Interval, DatabaseError, Boolean, Number, Node + Interval, DatabaseError, Boolean, Number, Node, Integer from roundup.mailer import Mailer from roundup import date, password, init, instance, configuration, \ roundupdb, i18n @@ -82,7 +82,7 @@ priority.setkey("name") user = module.Class(db, "user", username=String(), password=Password(), assignable=Boolean(), age=Number(), roles=String(), address=String(), - supervisor=Link('user'),realname=String()) + rating=Integer(), supervisor=Link('user'),realname=String()) user.setkey("username") file = module.FileClass(db, "file", name=String(), type=String(), comment=String(indexme="yes"), fooz=Password()) @@ -534,6 +534,25 @@ self.db.user.set(nid, age=None) self.assertEqual(self.db.user.get(nid, "age"), None) + # Integer + def testIntegerChange(self): + nid = self.db.user.create(username='foo', rating=100) + self.assertEqual(100, self.db.user.get(nid, 'rating')) + self.db.user.set(nid, rating=300) + self.assertNotEqual(self.db.user.get(nid, 'rating'), 100) + self.db.user.set(nid, rating=-1) + self.assertEqual(self.db.user.get(nid, 'rating'), -1) + self.db.user.set(nid, rating=0) + self.assertEqual(self.db.user.get(nid, 'rating'), 0) + + nid = self.db.user.create(username='bar', rating=0) + self.assertEqual(self.db.user.get(nid, 'rating'), 0) + + def testIntegerUnset(self): + nid = self.db.user.create(username='foo', rating=1) + self.db.user.set(nid, rating=None) + self.assertEqual(self.db.user.get(nid, "rating"), None) + # Password def testPasswordChange(self): x = password.Password('x') diff -r 745e8426a348 -r 5cf0b529afca test/test_cgi.py --- a/test/test_cgi.py Fri May 20 19:29:16 2016 +0300 +++ b/test/test_cgi.py Fri Jun 03 18:14:08 2016 +0300 @@ -99,9 +99,10 @@ test = self.instance.backend.Class(self.db, "test", string=hyperdb.String(), number=hyperdb.Number(), - boolean=hyperdb.Boolean(), link=hyperdb.Link('test'), - multilink=hyperdb.Multilink('test'), date=hyperdb.Date(), - messages=hyperdb.Multilink('msg'), interval=hyperdb.Interval()) + intval=hyperdb.Integer(), boolean=hyperdb.Boolean(), + link=hyperdb.Link('test'), multilink=hyperdb.Multilink('test'), + date=hyperdb.Date(), messages=hyperdb.Multilink('msg'), + interval=hyperdb.Interval()) # compile the labels re classes = '|'.join(self.db.classes.keys()) @@ -588,6 +589,62 @@ self.fail('number "no" raised "required missing"') # + # Integer + # + def testEmptyInteger(self): + self.assertEqual(self.parseForm({'intval': ''}), + ({('test', None): {}}, [])) + self.assertEqual(self.parseForm({'intval': ' '}), + ({('test', None): {}}, [])) + self.assertRaises(FormError, self.parseForm, {'intval': ['', '']}) + + def testInvalidInteger(self): + self.assertRaises(FormError, self.parseForm, {'intval': 'hi, mum!'}) + + def testSetInteger(self): + self.assertEqual(self.parseForm({'intval': '1'}), + ({('test', None): {'intval': 1}}, [])) + self.assertEqual(self.parseForm({'intval': '0'}), + ({('test', None): {'intval': 0}}, [])) + self.assertEqual(self.parseForm({'intval': '\n0\n'}), + ({('test', None): {'intval': 0}}, [])) + + def testSetIntegerReplaceOne(self): + nodeid = self.db.test.create(intval=1) + self.assertEqual(self.parseForm({'intval': '1'}, 'test', nodeid), + ({('test', nodeid): {}}, [])) + self.assertEqual(self.parseForm({'intval': '0'}, 'test', nodeid), + ({('test', nodeid): {'intval': 0}}, [])) + + def testSetIntegerReplaceZero(self): + nodeid = self.db.test.create(intval=0) + self.assertEqual(self.parseForm({'intval': '0'}, 'test', nodeid), + ({('test', nodeid): {}}, [])) + + def testSetIntegerReplaceNone(self): + nodeid = self.db.test.create() + self.assertEqual(self.parseForm({'intval': '0'}, 'test', nodeid), + ({('test', nodeid): {'intval': 0}}, [])) + self.assertEqual(self.parseForm({'intval': '1'}, 'test', nodeid), + ({('test', nodeid): {'intval': 1}}, [])) + + def testEmptyIntegerSet(self): + nodeid = self.db.test.create(intval=0) + self.assertEqual(self.parseForm({'intval': ''}, 'test', nodeid), + ({('test', nodeid): {'intval': None}}, [])) + nodeid = self.db.test.create(intval=1) + self.assertEqual(self.parseForm({'intval': ' '}, 'test', nodeid), + ({('test', nodeid): {'intval': None}}, [])) + + def testRequiredInteger(self): + self.assertRaises(FormError, self.parseForm, {'intval': '', + ':required': 'intval'}) + try: + self.parseForm({'intval': '0', ':required': 'intval'}) + except FormError: + self.fail('intval "no" raised "required missing"') + + # # Date # def testEmptyDate(self): diff -r 745e8426a348 -r 5cf0b529afca test/test_hyperdbvals.py --- a/test/test_hyperdbvals.py Fri May 20 19:29:16 2016 +0300 +++ b/test/test_hyperdbvals.py Fri Jun 03 18:14:08 2016 +0300 @@ -18,6 +18,7 @@ return { 'string': hyperdb.String(), 'number': hyperdb.Number(), + 'integer': hyperdb.Integer(), 'boolean': hyperdb.Boolean(), 'password': hyperdb.Password(), 'date': hyperdb.Date(), @@ -63,8 +64,12 @@ self.assertEqual(self._test('string', ' a string '), 'a string') def testNumber(self): self.assertEqual(self._test('password', ''), None) - self.assertEqual(self._test('number', ' 10 '), 10) + self.assertEqual(self._test('number', ' 1 '), 1) self.assertEqual(self._test('number', ' 1.5 '), 1.5) + def testInteger(self): + self.assertEqual(self._test('password', ''), None) + self.assertEqual(self._test('integer', ' 100 '), 100) + self.assertEqual(self._test('integer', ' -100 '), -100) def testBoolean(self): self.assertEqual(self._test('password', ''), None) for true in 'yes true on 1'.split(): diff -r 745e8426a348 -r 5cf0b529afca test/test_templating.py --- a/test/test_templating.py Fri May 20 19:29:16 2016 +0300 +++ b/test/test_templating.py Fri Jun 03 18:14:08 2016 +0300 @@ -263,6 +263,11 @@ def __int__(self): def __float__(self): +class IntegerHTMLProperty(HTMLProperty): + def plain(self): + def field(self, size = 30): + def __int__(self): + class BooleanHTMLProperty(HTMLProperty): def plain(self): def field(self):