Skip to content

Commit

Permalink
convertings some tests to use mox
Browse files Browse the repository at this point in the history
  • Loading branch information
andrews committed Sep 16, 2009
1 parent 59567bd commit 2455521
Show file tree
Hide file tree
Showing 5 changed files with 220 additions and 103 deletions.
2 changes: 1 addition & 1 deletion src/mysql.py
Expand Up @@ -24,7 +24,7 @@ def __init__(self, config=None, mysql_driver=MySQLdb):
def __mysql_connect(self, connect_using_db_name=True):
try:
conn = self.__mysql_driver.connect(host=self.__mysql_host, user=self.__mysql_user, passwd=self.__mysql_passwd)

# this should be configured in the config file, not hardcoded
conn.set_character_set('utf8')

Expand Down
1 change: 0 additions & 1 deletion tests/core_test.py
Expand Up @@ -2,7 +2,6 @@
from test import *
from config import *
from core import *
from pmock import *
import codecs
import os
import stubs
Expand Down
3 changes: 1 addition & 2 deletions tests/helpers_test.py
@@ -1,6 +1,5 @@
from test import *
from helpers import *
from pmock import *
import unittest

class ListsTest(unittest.TestCase):
Expand Down Expand Up @@ -34,4 +33,4 @@ def test_it_should_count_chars_in_a_string(self):
def test_it_should_raise_exception_when_char_to_match_is_not_valid(self):
self.assertRaises(Exception, Utils.how_many, 'whatever', 'what')
self.assertRaises(Exception, Utils.how_many, 'whatever', None)
self.assertRaises(Exception, Utils.how_many, 'whatever', '')
self.assertRaises(Exception, Utils.how_many, 'whatever', '')
179 changes: 129 additions & 50 deletions tests/main_test.py
@@ -1,6 +1,6 @@
from test import *
from main import *
from pmock import *
from mox import Mox
import unittest

class MainTest(unittest.TestCase):
Expand All @@ -22,33 +22,53 @@ def migrate(self):
assert False, "it should not try to migrate database!"

config_mock = {"new_migration":"some_new_migration"}
mysql_mock = Mock()
db_migrate_mock = Mock()

mox = Mox()
mysql_mock = mox.CreateMockAnything()
db_migrate_mock = mox.CreateMockAnything()

mox.ReplayAll()

main = MainMock(config=config_mock, mysql=mysql_mock, db_migrate=db_migrate_mock)
main.execute()


mox.VerifyAll()

def test_it_should_migrate_db_if_create_migration_option_is_not_activated_by_user(self):
class MainMock(Main):
def create_migration(self):
assert False, "it should not try to migrate database!"
def migrate(self):
assert True

mysql_mock = Mock()
db_migrate_mock = Mock()

mox = Mox()
mysql_mock = mox.CreateMockAnything()
db_migrate_mock = mox.CreateMockAnything()

mox.ReplayAll()

main = MainMock(config={}, mysql=mysql_mock, db_migrate=db_migrate_mock)
main.execute()

mox.VerifyAll()

def test_it_should_create_new_migration(self):
import core
core.Migration = Mock()
from time import strftime

mox = Mox()
core.Migration = mox.CreateMockAnything()
core.Migration.TEMPLATE = ""
core.Migration.expects(once()).method("is_file_name_valid").will(return_value(True))
core.Migration.expects(once()).method("create").with(eq("some_new_migration"))
core.Migration.MIGRATION_FILES_EXTENSION = ''
core.Migration.is_file_name_valid('%s_some_new_migration' % strftime("%Y%m%d%H%M%S")).AndReturn(True)
core.Migration.create("some_new_migration")

config_mock = {"new_migration":"some_new_migration"}
mysql_mock = Mock()
db_migrate_mock = Mock()
mysql_mock = mox.CreateMockAnything()
db_migrate_mock = mox.CreateMockAnything()

mox.ReplayAll()

main = Main(config=config_mock, mysql=mysql_mock, db_migrate=db_migrate_mock)
main.execute()

Expand All @@ -61,11 +81,18 @@ def execute_migrations(self, current_version, destination_version, is_migration_
assert destination_version == "20090810170301"
assert is_migration_up

mysql_mock = Mock()
mysql_mock.expects(once()).method("get_current_schema_version").will(return_value("20090810170300"))
db_migrate_mock = Mock()
mox = Mox()
mysql_mock = mox.CreateMockAnything()
mysql_mock.get_current_schema_version().AndReturn("20090810170300")

db_migrate_mock = mox.CreateMockAnything()

mox.ReplayAll()

main = MainMock(config={}, mysql=mysql_mock, db_migrate=db_migrate_mock)
main.execute()

mox.VerifyAll()

def test_it_should_migrate_database_with_migration_is_down(self):
class MainMock(Main):
Expand All @@ -76,37 +103,65 @@ def execute_migrations(self, current_version, destination_version, is_migration_
assert destination_version == "20080810170300"
assert not is_migration_up

mysql_mock = Mock()
mysql_mock.expects(once()).method("get_current_schema_version").will(return_value("20090810170300"))
db_migrate_mock = Mock()
mox = Mox()
mysql_mock = mox.CreateMockAnything()
mysql_mock.get_current_schema_version().AndReturn("20090810170300")

db_migrate_mock = mox.CreateMockAnything()

mox.ReplayAll()

main = MainMock(config={}, mysql=mysql_mock, db_migrate=db_migrate_mock)
main.execute()

mox.VerifyAll()

def test_it_should_get_destination_version_when_user_informs_a_specific_version(self):
config_mock = {"schema_version":"20090810170300"}
mysql_mock = Mock()
db_migrate_mock = Mock()
db_migrate_mock.expects(once()).method("check_if_version_exists").with(eq("20090810170300")).will(return_value(True))

mox = Mox()
mysql_mock = mox.CreateMockAnything()
db_migrate_mock = mox.CreateMockAnything()
db_migrate_mock.check_if_version_exists("20090810170300").AndReturn(True)

mox.ReplayAll()

main = Main(config=config_mock, mysql=mysql_mock, db_migrate=db_migrate_mock)
destination_version = main.get_destination_version()
assert destination_version == "20090810170300"

mox.VerifyAll()

def test_it_should_get_destination_version_when_user_does_not_inform_a_specific_version(self):
mysql_mock = Mock()
db_migrate_mock = Mock()
db_migrate_mock.expects(once()).method("latest_version_available").will(return_value("20090810170300"))
db_migrate_mock.expects(once()).method("check_if_version_exists").with(eq("20090810170300")).will(return_value(True))

mox = Mox()
mysql_mock = mox.CreateMockAnything()

db_migrate_mock = mox.CreateMockAnything()
db_migrate_mock.latest_version_available().AndReturn("20090810170300")
db_migrate_mock.check_if_version_exists("20090810170300").AndReturn(True)

mox.ReplayAll()

main = Main(config={}, mysql=mysql_mock, db_migrate=db_migrate_mock)
destination_version = main.get_destination_version()
assert destination_version == "20090810170300"

mox.VerifyAll()

def test_it_should_raise_exception_when_get_destination_version_and_version_does_not_exist(self):
mysql_mock = Mock()
db_migrate_mock = Mock()
db_migrate_mock.expects(once()).method("latest_version_available").will(return_value("20090810170300"))
db_migrate_mock.expects(once()).method("check_if_version_exists").with(eq("20090810170300")).will(return_value(False))
mox = Mox()
mysql_mock = mox.CreateMockAnything()
db_migrate_mock = mox.CreateMockAnything()
db_migrate_mock.latest_version_available().AndReturn("20090810170300")
db_migrate_mock.check_if_version_exists("20090810170300").AndReturn(False)

mox.ReplayAll()

main = Main(config={}, mysql=mysql_mock, db_migrate=db_migrate_mock)
self.assertRaises(Exception, main.get_destination_version)

mox.VerifyAll()

def test_it_should_get_all_migration_files_that_must_be_executed_considering_database_version_when_migrating_up(self):
database_versions = self.database_versions
Expand All @@ -117,11 +172,14 @@ def test_it_should_get_all_migration_files_that_must_be_executed_considering_dat
migration_files_versions.append("20090212120005")

# mocking stuff
mysql_mock = Mock()
mysql_mock.expects(once()).method("get_all_schema_versions").will(return_value(database_versions))
mox = Mox()
mysql_mock = mox.CreateMockAnything()
mysql_mock.get_all_schema_versions().AndReturn(database_versions)

db_migrate_mock = Mock()
db_migrate_mock.expects(once()).method("get_all_migration_versions").will(return_value(migration_files_versions))
db_migrate_mock = mox.CreateMockAnything()
db_migrate_mock.get_all_migration_versions().AndReturn(migration_files_versions)

mox.ReplayAll()

main = Main(mysql=mysql_mock, db_migrate=db_migrate_mock)

Expand All @@ -132,6 +190,8 @@ def test_it_should_get_all_migration_files_that_must_be_executed_considering_dat
self.assertEquals(migrations_to_be_executed[0], "20090211120005")
self.assertEquals(migrations_to_be_executed[1], "20090211120006")
self.assertEquals(migrations_to_be_executed[2], "20090212120005")

mox.VerifyAll()

def test_it_should_get_all_migration_files_that_must_be_executed_considering_database_version_when_migrating_up_and_current_destination_versions_are_the_same(self):
database_versions = self.database_versions
Expand All @@ -141,11 +201,14 @@ def test_it_should_get_all_migration_files_that_must_be_executed_considering_dat
migration_files_versions.append("20090211120006")

# mocking stuff
mysql_mock = Mock()
mysql_mock.expects(once()).method("get_all_schema_versions").will(return_value(database_versions))
mox = Mox()
mysql_mock = mox.CreateMockAnything()
mysql_mock.get_all_schema_versions().AndReturn(database_versions)

db_migrate_mock = Mock()
db_migrate_mock.expects(once()).method("get_all_migration_versions").will(return_value(migration_files_versions))
db_migrate_mock = mox.CreateMockAnything()
db_migrate_mock.get_all_migration_versions().AndReturn(migration_files_versions)

mox.ReplayAll()

main = Main(mysql=mysql_mock, db_migrate=db_migrate_mock)

Expand All @@ -155,6 +218,8 @@ def test_it_should_get_all_migration_files_that_must_be_executed_considering_dat
self.assertEquals(len(migrations_to_be_executed), 2)
self.assertEquals(migrations_to_be_executed[0], "20090211120005")
self.assertEquals(migrations_to_be_executed[1], "20090211120006")

mox.VerifyAll()

def test_it_should_get_all_migration_files_that_must_be_executed_considering_database_version_when_migrating_up_and_current_destination_versions_are_the_same_and_migration_versions_are_higher_than_database_versions(self):
database_versions = self.database_versions
Expand All @@ -164,29 +229,37 @@ def test_it_should_get_all_migration_files_that_must_be_executed_considering_dat
migration_files_versions.append("20090212120002")

# mocking stuff
mysql_mock = Mock()
mysql_mock.expects(once()).method("get_all_schema_versions").will(return_value(database_versions))
mox = Mox()
mysql_mock = mox.CreateMockAnything()
mysql_mock.get_all_schema_versions().AndReturn(database_versions)

db_migrate_mock = Mock()
db_migrate_mock.expects(once()).method("get_all_migration_versions").will(return_value(migration_files_versions))
db_migrate_mock = mox.CreateMockAnything()
db_migrate_mock.get_all_migration_versions().AndReturn(migration_files_versions)

mox.ReplayAll()

main = Main(mysql=mysql_mock, db_migrate=db_migrate_mock)

# execute stuff
migrations_to_be_executed = main.get_migration_files_to_be_executed("20090212120000", "20090212120000")

self.assertEquals(len(migrations_to_be_executed), 0)

mox.VerifyAll()

def test_it_should_get_all_migration_files_that_must_be_executed_considering_database_version_when_migrating_down(self):
database_versions = self.database_versions
migration_files_versions = self.database_versions[:] #copy

# mocking stuff
mysql_mock = Mock()
mysql_mock.expects(once()).method("get_all_schema_versions").will(return_value(database_versions))
mox = Mox()
mysql_mock = mox.CreateMockAnything()
mysql_mock.get_all_schema_versions().AndReturn(database_versions)

db_migrate_mock = Mock()
db_migrate_mock.expects(once()).method("get_all_migration_versions").will(return_value(migration_files_versions))
db_migrate_mock = mox.CreateMockAnything()
db_migrate_mock.get_all_migration_versions().AndReturn(migration_files_versions)

mox.ReplayAll()

main = Main(mysql=mysql_mock, db_migrate=db_migrate_mock)

Expand All @@ -198,17 +271,21 @@ def test_it_should_get_all_migration_files_that_must_be_executed_considering_dat
self.assertEquals(migrations_to_be_executed[1], "20090211120003")
self.assertEquals(migrations_to_be_executed[2], "20090211120002")

mox.VerifyAll()

def test_it_should_show_an_error_message_if_tries_to_migrate_down_and_migration_file_does_not_exists(self):
database_versions = self.database_versions
migration_files_versions = [] #empty

# mocking stuff
mysql_mock = Mock()
mysql_mock.expects(once()).method("get_all_schema_versions").will(return_value(database_versions))

db_migrate_mock = Mock()
db_migrate_mock.expects(once()).method("get_all_migration_versions").will(return_value(migration_files_versions))
mox = Mox()
mysql_mock = mox.CreateMockAnything()
mysql_mock.get_all_schema_versions().AndReturn(database_versions)

db_migrate_mock = mox.CreateMockAnything()
db_migrate_mock.get_all_migration_versions().AndReturn(migration_files_versions)

mox.ReplayAll()
main = Main(mysql=mysql_mock, db_migrate=db_migrate_mock)

# execute stuff
Expand All @@ -217,6 +294,8 @@ def test_it_should_show_an_error_message_if_tries_to_migrate_down_and_migration_
self.fail("it should not pass here")
except:
pass

mox.VerifyAll()

if __name__ == "__main__":
unittest.main()

0 comments on commit 2455521

Please sign in to comment.