import traceback import unittest from geniusql.test import test try: import _mysql except ImportError: def run(): import warnings warnings.warn("The _mysql module could not be imported. " "The test for MySQL will not be run.") else: opts = {"host": "localhost", "db": "geniusql_test", "user": "geniusql_test", "passwd": "geniusql_test", } db = test.DBConfig('mysql', opts) setUp = db.setUp tearDown = db.tearDown class DBTypesTest(unittest.TestCase): def test_ENUM(self): values = ['General', 'Colonel', 'Major', 'Captain'] self.schema.db.execute_ddl( "CREATE TABLE `soldier` (`id` MEDIUMINT AUTO_INCREMENT, " "`name` VARBINARY(255), `rank` ENUM(%s), " "PRIMARY KEY (`id`)) CHARACTER SET utf8;" % ', '.join(["'%s'" % v for v in values])) self.schema.discover('soldier') table = self.schema['soldier'] self.assertEqual(table['rank'].dbtype.bytes, 1) self.assertEqual(table['rank'].dbtype.enum_values, # Strange but true... [v.upper() for v in values]) id = table.insert(name='George S. Patton', rank='Colonel')['id'] self.assertEqual(table.select(id=id)['rank'], 'Colonel') table.save(id=id, rank='General') self.assertEqual(table.select(id=id)['rank'], 'General') self.assertRaises(_mysql.DataError, table.save, id=id, rank='Generalissimo') def test_autoincrement(self): self.schema.db.execute_ddl( "CREATE TABLE `Address` (`id` int(11) NOT NULL auto_increment, " "`Userid` int(11) default NULL, " "`StreetAddress` varchar(255) default NULL, " "`StreetAddress2` varchar(255) default NULL, " "`City` varchar(100) default NULL, " "`State` varchar(100) default NULL, " "`Countryid` int(11) default NULL, " "`PostalCode` varchar(10) default NULL, " "PRIMARY KEY (`id`), " "KEY `Userid` (`Userid`), " "KEY `Countryid` (`Countryid`) " ") ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;") self.schema.discover('Address') table = self.schema['Address'] for key in table: self.assertEqual(table[key].autoincrement, key == 'id') db.register_db_test_class(DBTypesTest)