-
Notifications
You must be signed in to change notification settings - Fork 54
/
mysql_test.py
95 lines (69 loc) · 4.05 KB
/
mysql_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from test import *
from mysql import *
from pmock import *
import os
import unittest
class MySQLTest(unittest.TestCase):
def setUp(self):
f = open("test.conf", "w")
f.write("HOST = 'localhost'\nUSERNAME = 'root'\nPASSWORD = ''\nDATABASE = 'migration_test'")
f.close()
def tearDown(self):
os.remove("test.conf")
def __create_init_expectations(self, mysql_driver_mock, db_mock, cursor_mock):
mysql_driver_mock.expects(at_least_once()).method("connect").will(return_value(db_mock))
db_mock.expects(once()).method("query")
db_mock.expects(once()).method("close")
db_mock.expects(once()).method("query")
db_mock.expects(once()).method("close")
db_mock.expects(at_least_once()).method("cursor").will(return_value(cursor_mock))
cursor_mock.expects(once()).method("execute")
cursor_mock.expects(once()).method("fetchone").will(return_value("0"))
db_mock.expects(once()).method("close")
def test_it_should_create_database_and_version_table_on_init_if_not_exists(self):
mysql_driver_mock = Mock()
db_mock = Mock()
cursor_mock = Mock()
mysql_driver_mock.expects(at_least_once()).method("connect").will(return_value(db_mock))
db_mock.expects(at_least_once()).method("close")
db_mock.expects(once()).method("query").query(eq("create database if not exists migration_test;"))
db_mock.expects(once()).method("query").query(eq("create table if not exists __db_version__ ( version varchar(20) NOT NULL default \"0\" );"))
db_mock.expects(once()).method("cursor").will(return_value(cursor_mock))
cursor_mock.expects(once()).method("execute").execute(eq("select count(*) from __db_version__;"))
cursor_mock.expects(once()).method("fetchone").will(return_value("0"))
db_mock.expects(once()).method("query").query(eq("insert into __db_version__ values (\"0\");"))
mysql = MySQL("test.conf", mysql_driver_mock)
def test_it_should_execute_migration_up_and_remove_from_schema_version(self):
mysql_driver_mock = Mock()
db_mock = Mock()
cursor_mock = Mock()
self.__create_init_expectations(mysql_driver_mock, db_mock, cursor_mock)
db_mock.expects(once()).method("query").query(eq("create table spam();"))
db_mock.expects(once()).method("close")
db_mock.expects(once()).method("query").query(eq("insert into __db_version__ (version) values (\"20090212112104\");"))
db_mock.expects(once()).method("close")
mysql = MySQL("test.conf", mysql_driver_mock)
mysql.change("create table spam();", "20090212112104")
def test_it_should_execute_migration_down_and_update_schema_version(self):
mysql_driver_mock = Mock()
db_mock = Mock()
cursor_mock = Mock()
self.__create_init_expectations(mysql_driver_mock, db_mock, cursor_mock)
db_mock.expects(once()).method("query").query(eq("create table spam();"))
db_mock.expects(once()).method("close")
db_mock.expects(once()).method("query").query(eq("delete from __db_version__ where version > \"20090212112104\";"))
db_mock.expects(once()).method("close")
mysql = MySQL("test.conf", mysql_driver_mock)
mysql.change("create table spam();", "20090212112104", False)
def test_it_should_get_current_schema_version(self):
mysql_driver_mock = Mock()
db_mock = Mock()
cursor_mock = Mock()
self.__create_init_expectations(mysql_driver_mock, db_mock, cursor_mock)
cursor_mock.expects(once()).method("execute").execute(eq("select version from __db_version__ order by version desc limit 0,1;"))
cursor_mock.expects(once()).method("fetchone").will(return_value("0"))
db_mock.expects(once()).method("close")
mysql = MySQL("test.conf", mysql_driver_mock)
self.assertEquals("0", mysql.get_current_schema_version())
if __name__ == "__main__":
unittest.main()