X-Git-Url: https://git.toastfreeware.priv.at/philipp/winterrodeln/wrpylib.git/blobdiff_plain/127657cd05292295af50ebd8476cc7efb7e87f54..2c3d5d243a37469f970b57d37f5226697a844b0a:/tests/test_mwdb.py diff --git a/tests/test_mwdb.py b/tests/test_mwdb.py index 94d40b1..3e94135 100644 --- a/tests/test_mwdb.py +++ b/tests/test_mwdb.py @@ -1,5 +1,6 @@ #!/usr/bin/python3.4 import unittest +import MySQLdb import sqlalchemy from sqlalchemy.engine import create_engine from sqlalchemy.orm import sessionmaker @@ -9,7 +10,7 @@ import wrpylib.mwdb class TestMwDb(unittest.TestCase): @classmethod def setUpClass(cls): - cls.engine = create_engine('mysql://philipp@localhost:3306/philipp_winterrodeln_wiki?charset=utf8&use_unicode=1') + cls.engine = create_engine('mysql://philipp@localhost:3306/philipp_winterrodeln_wiki?charset=utf8mb4') cls.Session = sessionmaker(bind=cls.engine) def setUp(self): @@ -61,3 +62,50 @@ class TestMwDb(unittest.TestCase): self.assertEqual(type(categorylinks.cl_to), str) self.assertEqual(type(categorylinks.cl_sortkey), str) self.assertEqual(categorylinks.cl_sortkey, 'ALT BÄRNBAD') + + +class TestMySqlPython(unittest.TestCase): + """Note: Many of those tests failed in MySQL_python version 1.2.3 and earlier + because byte strings are returned instead of unicode for columns having + a _bin collation, see https://sourceforge.net/p/mysql-python/bugs/289/ + This has been fixed in MySQL_python version 1.2.4.""" + @classmethod + def setUpClass(cls): + cls.db = MySQLdb.connect(db='philipp_winterrodeln_wiki', charset='utf8mb4') + + def setUp(self): + self.cursor = self.db.cursor() + + def exec_sql(self, sql): + self.cursor.execute(sql) + row = self.cursor.fetchone() + return row + + def test_datatype_page(self): + result = self.exec_sql('select page_title, page_restrictions, page_touched from page where page_id = 1321') + self.assertEqual(type(result[0]), str) # varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL + self.assertEqual(type(result[1]), bytes) # tinyblob NOT NULL + self.assertEqual(type(result[2]), bytes) # binary(14) NOT NULL + + def test_datatype_revision(self): + result = self.exec_sql('select rev_comment, rev_user_text, rev_timestamp from revision where rev_id = 7586') + self.assertEqual(type(result[0]), bytes) # tinyblob NOT NULL + self.assertEqual(type(result[1]), str) # varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL + self.assertEqual(type(result[2]), bytes) # binary(14) NOT NULL + + def test_datatypes_text(self): + result = self.exec_sql('select old_text, old_flags from text where old_id = 7438') + self.assertEqual(type(result[0]), bytes) # mediumblob NOT NULL + self.assertEqual(type(result[1]), bytes) # tinyblob NOT NULL + + def test_datatype_user(self): + result = self.exec_sql('select user_name, user_real_name, user_email from user where user_id = 1') + self.assertEqual(type(result[0]), str) # varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL + self.assertEqual(type(result[1]), str) # varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL + self.assertEqual(type(result[2]), str) # tinytext NOT NULL + assert result[0] == 'Philipp' + + def test_datatype_categorylinks(self): + result = self.exec_sql('select cl_to, cl_sortkey from categorylinks where cl_from = 609') + self.assertEqual(type(result[0]), str) # varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL + self.assertEqual(type(result[1]), bytes) # varbinary(230) NOT NULL