5 from sqlalchemy.engine import create_engine
6 from sqlalchemy.orm import sessionmaker
10 class TestMwDb(unittest.TestCase):
13 cls.engine = create_engine('mysql://philipp@localhost:3306/philipp_winterrodeln_wiki?charset=utf8&use_unicode=1')
14 cls.Session = sessionmaker(bind=cls.engine)
17 self.metadata = sqlalchemy.MetaData()
18 self.session = self.Session()
21 self.session.rollback()
23 def test_page_table(self):
24 Page = wrpylib.mwdb.page_table(self.metadata)
25 page = self.session.query(Page).filter(Page.c.page_id==1321).first()
26 self.assertEqual(page.page_id, 1321)
27 self.assertEqual(type(page.page_title), str)
28 self.assertEqual(type(page.page_restrictions), bytes)
29 self.assertEqual(type(page.page_touched), str)
31 def test_revision_table(self):
32 Revision = wrpylib.mwdb.revision_table(self.metadata)
33 revision = self.session.query(Revision).filter(Revision.c.rev_id == 666).first()
34 self.assertEqual(revision.rev_id, 666)
35 self.assertEqual(type(revision.rev_comment), str)
36 self.assertEqual(type(revision.rev_user_text), str)
37 self.assertEqual(type(revision.rev_timestamp), str)
39 def test_text_table(self):
40 Text = wrpylib.mwdb.text_table(self.metadata)
41 text = self.session.query(Text).filter(Text.c.old_id == 51).first()
42 self.assertEqual(text.old_id, 51)
43 self.assertEqual(type(text.old_text), str)
44 self.assertEqual(type(text.old_flags), str)
45 self.assertEqual(text.old_flags, 'utf-8')
48 def test_user_table(self):
49 User = wrpylib.mwdb.user_table(self.metadata)
50 user = self.session.query(User).filter(User.c.user_id == 1).first()
51 self.assertEqual(user.user_id, 1)
52 self.assertEqual(type(user.user_name), str)
53 self.assertEqual(type(user.user_real_name), str)
54 self.assertEqual(type(user.user_email), str)
55 self.assertEqual(user.user_name, 'Philipp')
58 def test_categorylinks_table(self):
59 Categorylinks = wrpylib.mwdb.categorylinks_table(self.metadata)
60 categorylinks = self.session.query(Categorylinks).filter(Categorylinks.c.cl_from == 609).first()
61 self.assertEqual(categorylinks.cl_from, 609)
62 self.assertEqual(type(categorylinks.cl_to), str)
63 self.assertEqual(type(categorylinks.cl_sortkey), str)
64 self.assertEqual(categorylinks.cl_sortkey, 'ALT BÄRNBAD')
67 class TestMySqlPython(unittest.TestCase):
68 """Note: Many of those tests failed in MySQL_python version 1.2.3 and earlier
69 because byte strings are returned instead of unicode for columns having
70 a _bin collation, see https://sourceforge.net/p/mysql-python/bugs/289/
71 This has been fixed in MySQL_python version 1.2.4."""
74 cls.db = MySQLdb.connect(db='philipp_winterrodeln_wiki', charset='utf8', use_unicode=True)
77 self.cursor = self.db.cursor()
79 def exec_sql(self, sql):
80 self.cursor.execute(sql)
81 row = self.cursor.fetchone()
84 def test_datatype_page(self):
85 result = self.exec_sql('select page_title, page_restrictions, page_touched from page where page_id = 1321')
86 assert type(result[0]) == str # varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
87 assert type(result[1]) == bytes # tinyblob NOT NULL
88 assert type(result[2]) == bytes # binary(14) NOT NULL
90 def test_datatype_revision(self):
91 result = self.exec_sql('select rev_comment, rev_user_text, rev_timestamp from revision where rev_id = 7586')
92 assert type(result[0]) == bytes # tinyblob NOT NULL
93 assert type(result[1]) == str # varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
94 assert type(result[2]) == bytes # binary(14) NOT NULL
96 def test_datatypes_text(self):
97 result = self.exec_sql('select old_text, old_flags from text where old_id = 7438')
98 assert type(result[0]) == bytes # mediumblob NOT NULL
99 assert type(result[1]) == bytes # tinyblob NOT NULL
101 def test_datatype_user(self):
102 result = self.exec_sql('select user_name, user_real_name, user_email from user where user_id = 1')
103 assert type(result[0]) == str # varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
104 assert type(result[1]) == str # varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
105 assert type(result[2]) == str # tinytext NOT NULL
106 assert result[0] == 'Philipp'
108 def test_datatype_categorylinks(self):
109 result = self.exec_sql('select cl_to, cl_sortkey from categorylinks where cl_from = 609')
110 assert type(result[0]) == str # varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
111 assert type(result[1]) == bytes # varbinary(230) NOT NULL