class DatabaseManagerTests(unittest.TestCase): def setUp(self): self.migration_repository = MigrationRepository() self.migration_repository.clear() self.migration_repository.create_repository() self.database_manager = DatabaseManager(migration_repository=self.migration_repository, environment="DATABASE") def tearDown(self): if self.database_manager.is_database_provisioned(): self.database_manager.reset() self.database_manager.deprovision_database() self.migration_repository.clear() # Database Provisioning Tests def test_provision_database(self): self.database_manager.provision_database() self.assertTrue(self.database_manager.is_database_provisioned()) def test_provision_database_failure_after_already_provisioned(self): self.database_manager.provision_database() self.assertTrue(self.database_manager.is_database_provisioned()) self.assertFalse(self.database_manager.provision_database()) def test_deprovision_database(self): self.database_manager.provision_database() self.database_manager.deprovision_database() self.assertFalse(self.database_manager.is_database_provisioned()) def test_deprovision_database_when_not_provisioned(self): self.assertFalse(self.database_manager.is_database_provisioned()) self.database_manager.deprovision_database() self.assertFalse(self.database_manager.is_database_provisioned()) # Database Versioning Tests def test_current_database_migration_version(self): self.database_manager.provision_database() self.migration_repository.create_new_table_migration("users") self.database_manager.upgrade() self.assertEqual(self.database_manager.current_database_migration_version(), 0) def test_current_database_migration_version_when_no_migrations(self): self.database_manager.provision_database() self.assertIsNone(self.database_manager.current_database_migration_version()) # Database Lists Tests def test_list_migrations(self): self.migration_repository.create_new_table_migration("test") self.assertEqual(len(self.database_manager.list_migrations()), 1) def test_list_procedures(self): # TODO: Redo the create_new_procedure_migration to accept a content field # TODO: so that i can run the migration without an error. pass def test_list_procedures_on_unprovisioned_database(self): self.assertEqual(len(self.database_manager.list_procedures()), 0) def test_list_tables(self): self.database_manager.provision_database() self.assertEqual(len(self.database_manager.list_tables()), 1) def test_list_tables_on_unprovisioned_database(self): self.assertEqual(len(self.database_manager.list_tables()), 0) # Database Migration Tests def test_migrate_runs_multiple_migrations(self): self.database_manager.provision_database() self.migration_repository.create_new_table_migration("test_1") self.migration_repository.create_new_table_migration("test_2") self.assertEqual(self.migration_repository.current_migration_count(), 2) self.assertEqual(len(self.database_manager.list_tables()), 1) self.database_manager.migrate() self.assertEqual(len(self.database_manager.list_tables()), 3) def test_migrate_runs_on_new_migrations(self): self.database_manager.provision_database() self.migration_repository.create_new_table_migration("test_1") self.database_manager.upgrade() self.assertEqual(len(self.database_manager.list_tables()), 2) self.migration_repository.create_new_table_migration("test_2") self.database_manager.migrate() self.assertEqual(len(self.database_manager.list_tables()), 3) def test_upgrade_runs_only_one_migration(self): self.database_manager.provision_database() self.migration_repository.create_new_table_migration("test_1") self.migration_repository.create_new_table_migration("test_2") self.assertEqual(self.migration_repository.current_migration_count(), 2) self.assertEqual(len(self.database_manager.list_tables()), 1) self.database_manager.upgrade() self.assertEqual(len(self.database_manager.list_tables()), 2) def test_upgrade_runs_only_the_next_migration(self): self.database_manager.provision_database() self.migration_repository.create_new_table_migration("test_1") self.migration_repository.create_new_table_migration("test_2") self.assertEqual(self.migration_repository.current_migration_count(), 2) self.assertEqual(len(self.database_manager.list_tables()), 1) self.database_manager.upgrade() self.assertEqual(len(self.database_manager.list_tables()), 2) self.database_manager.upgrade() self.assertEqual(len(self.database_manager.list_tables()), 3) # Database Reset Tests def test_reset_runs_multiple_migrations(self): self.database_manager.provision_database() self.migration_repository.create_new_table_migration("test_1") self.migration_repository.create_new_table_migration("test_2") self.assertEqual(self.migration_repository.current_migration_count(), 2) self.assertEqual(len(self.database_manager.list_tables()), 1) self.database_manager.migrate() self.assertEqual(len(self.database_manager.list_tables()), 3) self.database_manager.reset() self.assertEqual(len(self.database_manager.list_tables()), 1) def test_reset_runs_on_remaining_migrations(self): self.database_manager.provision_database() self.migration_repository.create_new_table_migration("test_1") self.migration_repository.create_new_table_migration("test_2") self.assertEqual(self.migration_repository.current_migration_count(), 2) self.assertEqual(len(self.database_manager.list_tables()), 1) self.database_manager.migrate() self.assertEqual(len(self.database_manager.list_tables()), 3) self.database_manager.downgrade() self.assertEqual(len(self.database_manager.list_tables()), 2) self.database_manager.reset() self.assertEqual(len(self.database_manager.list_tables()), 1) def test_downgrade_runs_only_one_migration(self): self.database_manager.provision_database() self.migration_repository.create_new_table_migration("test_1") self.migration_repository.create_new_table_migration("test_2") self.assertEqual(self.migration_repository.current_migration_count(), 2) self.assertEqual(len(self.database_manager.list_tables()), 1) self.database_manager.migrate() self.assertEqual(len(self.database_manager.list_tables()), 3) self.database_manager.downgrade() self.assertEqual(len(self.database_manager.list_tables()), 2) def test_downgrade_runs_only_when_there_is_a_current_version(self): self.database_manager.provision_database() self.assertFalse(self.database_manager.downgrade())
class MigrationRepositoryTests(unittest.TestCase): def setUp(self): self.migration_repository = MigrationRepository() def tearDown(self): self.migration_repository.clear() def test_migration_repository_create(self): self.migration_repository.create_repository() assert (self.migration_repository.is_repository_setup() == True) def test_migration_repository_create_fail(self): self.migration_repository.create_repository() assert (self.migration_repository.create_repository() == False) def test_migration_repository_clear_after_already_cleared(self): assert (self.migration_repository.clear() == False) def test_migration_repository_is_setup(self): assert (self.migration_repository.is_repository_setup() == False) self.migration_repository.create_repository() assert (self.migration_repository.is_repository_setup() == True) def test_table_creation_migration(self): self.migration_repository.create_repository() self.migration_repository.create_new_table_migration("test") assert (self.migration_repository.current_migration_count() == 1) assert (self.migration_repository.current_migrations_list() == [ "V00__create_table_test.sql" ]) def test_table_alteration_migration(self): self.migration_repository.create_repository() self.migration_repository.create_new_table_alteration_migration("test") assert (self.migration_repository.current_migration_count() == 1) assert (self.migration_repository.current_migrations_list() == [ "V00__alter_table_test.sql" ]) def test_procedure_creation_migration(self): self.migration_repository.create_repository() self.migration_repository.create_new_procedure_migration("test") assert (self.migration_repository.current_migration_count() == 1) assert (self.migration_repository.current_migrations_list() == [ "V00__create_sp_test.sql" ]) def test_migration_count(self): self.migration_repository.create_repository() self.migration_repository.create_new_table_migration("test") assert (self.migration_repository.current_migration_count() == 1) assert (self.migration_repository.current_downgrade_count() == 1) def test_migration_list(self): self.migration_repository.create_repository() self.migration_repository.create_new_table_migration("test") assert (self.migration_repository.current_migrations_list() == [ "V00__create_table_test.sql" ]) def test_create_migration_double_digit_indexes(self): self.migration_repository.create_repository() for i in range(0, 11): self.migration_repository.create_new_table_migration( "test_{0}".format(i)) assert (find_migration_index("V10__create_table_test_1.sql") == "10") def test_path_for_directory_at_root_directory_with_custom_directory(self): custom_migration_repository = MigrationRepository(directory="custom") assert (custom_migration_repository. path_for_directory_at_root_directory("foo") == "custom/foo") def test_database_config_when_environment_is_none(self): assert (self.migration_repository.database_config() is None) def test_database_config_with_invalid_environment(self): self.migration_repository.create_repository() self.failUnlessRaises(InvalidEnvironmentError, self.migration_repository.database_config, environment="INVALID") def test_database_config_with_invalid_database_fields(self): self.migration_repository.create_repository() self.failUnlessRaises(InvalidDatabaseFieldError, self.migration_repository.database_config, environment="DATABASE", database_fields=["invalid"])
class MigrationRepositoryTests(unittest.TestCase): def setUp(self): self.migration_repository = MigrationRepository() def tearDown(self): self.migration_repository.clear() def test_migration_repository_create(self): self.migration_repository.create_repository() assert(self.migration_repository.is_repository_setup() == True) def test_migration_repository_create_fail(self): self.migration_repository.create_repository() assert(self.migration_repository.create_repository() == False) def test_migration_repository_clear_after_already_cleared(self): assert(self.migration_repository.clear() == False) def test_migration_repository_is_setup(self): assert(self.migration_repository.is_repository_setup() == False) self.migration_repository.create_repository() assert(self.migration_repository.is_repository_setup() == True) def test_table_creation_migration(self): self.migration_repository.create_repository() self.migration_repository.create_new_table_migration("test") assert(self.migration_repository.current_migration_count() == 1) assert(self.migration_repository.current_migrations_list() == ["V00__create_table_test.sql"]) def test_table_alteration_migration(self): self.migration_repository.create_repository() self.migration_repository.create_new_table_alteration_migration("test") assert(self.migration_repository.current_migration_count() == 1) assert(self.migration_repository.current_migrations_list() == ["V00__alter_table_test.sql"]) def test_procedure_creation_migration(self): self.migration_repository.create_repository() self.migration_repository.create_new_procedure_migration("test") assert(self.migration_repository.current_migration_count() == 1) assert(self.migration_repository.current_migrations_list() == ["V00__create_sp_test.sql"]) def test_migration_count(self): self.migration_repository.create_repository() self.migration_repository.create_new_table_migration("test") assert(self.migration_repository.current_migration_count() == 1) assert(self.migration_repository.current_downgrade_count() == 1) def test_migration_list(self): self.migration_repository.create_repository() self.migration_repository.create_new_table_migration("test") assert(self.migration_repository.current_migrations_list() == ["V00__create_table_test.sql"]) def test_create_migration_double_digit_indexes(self): self.migration_repository.create_repository() for i in range(0, 11): self.migration_repository.create_new_table_migration("test_{0}".format(i)) assert(find_migration_index("V10__create_table_test_1.sql") == "10") def test_path_for_directory_at_root_directory_with_custom_directory(self): custom_migration_repository = MigrationRepository(directory="custom") assert(custom_migration_repository.path_for_directory_at_root_directory("foo") == "custom/foo") def test_database_config_when_environment_is_none(self): assert(self.migration_repository.database_config() is None) def test_database_config_with_invalid_environment(self): self.migration_repository.create_repository() self.failUnlessRaises(InvalidEnvironmentError, self.migration_repository.database_config, environment="INVALID") def test_database_config_with_invalid_database_fields(self): self.migration_repository.create_repository() self.failUnlessRaises(InvalidDatabaseFieldError, self.migration_repository.database_config, environment="DATABASE", database_fields=["invalid"])
class DatabaseManagerTests(unittest.TestCase): def setUp(self): self.migration_repository = MigrationRepository() self.migration_repository.clear() self.migration_repository.create_repository() self.database_manager = DatabaseManager( migration_repository=self.migration_repository, environment="DATABASE") def tearDown(self): if self.database_manager.is_database_provisioned(): self.database_manager.reset() self.database_manager.deprovision_database() self.migration_repository.clear() # Database Provisioning Tests def test_provision_database(self): self.database_manager.provision_database() self.assertTrue(self.database_manager.is_database_provisioned()) def test_provision_database_failure_after_already_provisioned(self): self.database_manager.provision_database() self.assertTrue(self.database_manager.is_database_provisioned()) self.assertFalse(self.database_manager.provision_database()) def test_deprovision_database(self): self.database_manager.provision_database() self.database_manager.deprovision_database() self.assertFalse(self.database_manager.is_database_provisioned()) def test_deprovision_database_when_not_provisioned(self): self.assertFalse(self.database_manager.is_database_provisioned()) self.database_manager.deprovision_database() self.assertFalse(self.database_manager.is_database_provisioned()) # Database Versioning Tests def test_current_database_migration_version(self): self.database_manager.provision_database() self.migration_repository.create_new_table_migration("users") self.database_manager.upgrade() self.assertEqual( self.database_manager.current_database_migration_version(), 0) def test_current_database_migration_version_when_no_migrations(self): self.database_manager.provision_database() self.assertIsNone( self.database_manager.current_database_migration_version()) # Database Lists Tests def test_list_migrations(self): self.migration_repository.create_new_table_migration("test") self.assertEqual(len(self.database_manager.list_migrations()), 1) def test_list_procedures(self): # TODO: Redo the create_new_procedure_migration to accept a content field # TODO: so that i can run the migration without an error. pass def test_list_procedures_on_unprovisioned_database(self): self.assertEqual(len(self.database_manager.list_procedures()), 0) def test_list_tables(self): self.database_manager.provision_database() self.assertEqual(len(self.database_manager.list_tables()), 1) def test_list_tables_on_unprovisioned_database(self): self.assertEqual(len(self.database_manager.list_tables()), 0) # Database Migration Tests def test_migrate_runs_multiple_migrations(self): self.database_manager.provision_database() self.migration_repository.create_new_table_migration("test_1") self.migration_repository.create_new_table_migration("test_2") self.assertEqual(self.migration_repository.current_migration_count(), 2) self.assertEqual(len(self.database_manager.list_tables()), 1) self.database_manager.migrate() self.assertEqual(len(self.database_manager.list_tables()), 3) def test_migrate_runs_on_new_migrations(self): self.database_manager.provision_database() self.migration_repository.create_new_table_migration("test_1") self.database_manager.upgrade() self.assertEqual(len(self.database_manager.list_tables()), 2) self.migration_repository.create_new_table_migration("test_2") self.database_manager.migrate() self.assertEqual(len(self.database_manager.list_tables()), 3) def test_upgrade_runs_only_one_migration(self): self.database_manager.provision_database() self.migration_repository.create_new_table_migration("test_1") self.migration_repository.create_new_table_migration("test_2") self.assertEqual(self.migration_repository.current_migration_count(), 2) self.assertEqual(len(self.database_manager.list_tables()), 1) self.database_manager.upgrade() self.assertEqual(len(self.database_manager.list_tables()), 2) def test_upgrade_runs_only_the_next_migration(self): self.database_manager.provision_database() self.migration_repository.create_new_table_migration("test_1") self.migration_repository.create_new_table_migration("test_2") self.assertEqual(self.migration_repository.current_migration_count(), 2) self.assertEqual(len(self.database_manager.list_tables()), 1) self.database_manager.upgrade() self.assertEqual(len(self.database_manager.list_tables()), 2) self.database_manager.upgrade() self.assertEqual(len(self.database_manager.list_tables()), 3) # Database Reset Tests def test_reset_runs_multiple_migrations(self): self.database_manager.provision_database() self.migration_repository.create_new_table_migration("test_1") self.migration_repository.create_new_table_migration("test_2") self.assertEqual(self.migration_repository.current_migration_count(), 2) self.assertEqual(len(self.database_manager.list_tables()), 1) self.database_manager.migrate() self.assertEqual(len(self.database_manager.list_tables()), 3) self.database_manager.reset() self.assertEqual(len(self.database_manager.list_tables()), 1) def test_reset_runs_on_remaining_migrations(self): self.database_manager.provision_database() self.migration_repository.create_new_table_migration("test_1") self.migration_repository.create_new_table_migration("test_2") self.assertEqual(self.migration_repository.current_migration_count(), 2) self.assertEqual(len(self.database_manager.list_tables()), 1) self.database_manager.migrate() self.assertEqual(len(self.database_manager.list_tables()), 3) self.database_manager.downgrade() self.assertEqual(len(self.database_manager.list_tables()), 2) self.database_manager.reset() self.assertEqual(len(self.database_manager.list_tables()), 1) def test_downgrade_runs_only_one_migration(self): self.database_manager.provision_database() self.migration_repository.create_new_table_migration("test_1") self.migration_repository.create_new_table_migration("test_2") self.assertEqual(self.migration_repository.current_migration_count(), 2) self.assertEqual(len(self.database_manager.list_tables()), 1) self.database_manager.migrate() self.assertEqual(len(self.database_manager.list_tables()), 3) self.database_manager.downgrade() self.assertEqual(len(self.database_manager.list_tables()), 2) def test_downgrade_runs_only_when_there_is_a_current_version(self): self.database_manager.provision_database() self.assertFalse(self.database_manager.downgrade())