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")
예제 #2
0
class CLITests(unittest.TestCase):

    def setUp(self):
        self.migration_repository = MigrationRepository()
        self.migration_repository.clear()
        self.runner = CliRunner()

    def tearDown(self):
        self.migration_repository.clear()

    def test_cli(self):
        result = self.runner.invoke(cli, ["--help"])
        self.assertEqual(result.exit_code, 0)

    def test_cli_setup(self):
        result = self.runner.invoke(cli, ["setup"])
        self.assertEqual(result.exit_code, 0)
        self.assertTrue(CLIStrings.DB_MIGRATION_REPOSITORY_CREATED == result.output.rstrip(), "output incorrect")

    def test_cli_setup_after_already_setup(self):
        result = self.runner.invoke(cli, ["setup"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), CLIStrings.DB_MIGRATION_REPOSITORY_CREATED, "output incorrect")
        result = self.runner.invoke(cli, ["setup"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), CLIStrings.DB_MIGRATION_REPOSITORY_ALREADY_CREATED, "output incorrect")

    def test_cli_clear_after_setup(self):
        result = self.runner.invoke(cli, ["setup"])
        self.assertEqual(result.exit_code, 0)
        result = self.runner.invoke(cli, ["clear"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), CLIStrings.DB_MIGRATION_REPOSITORY_CLEARED, "output incorrect")

    def test_cli_clear_after_already_cleared(self):
        result = self.runner.invoke(cli, ["setup"])
        self.assertEqual(result.exit_code, 0)
        result = self.runner.invoke(cli, ["clear"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), CLIStrings.DB_MIGRATION_REPOSITORY_CLEARED, "output incorrect")

    def test_cli_database_command_when_not_setup(self):
        result = self.runner.invoke(cli, ["db", "provision", "DATABASE"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), CLIStrings.DB_MIGRATION_REPOSITORY_MUST_BE_SETUP)

    def test_cli_clear_when_not_setup(self):
        result = self.runner.invoke(cli, ["clear"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), CLIStrings.DB_MIGRATION_REPOSITORY_DOESNT_EXIST_AT_DIRECTORY)

    def test_cli_new_when_not_setup(self):
        result = self.runner.invoke(cli, ["new", "table", "test"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), CLIStrings.DB_MIGRATION_REPOSITORY_MUST_BE_SETUP)
예제 #3
0
 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")
     self.runner = CliRunner()
예제 #4
0
 def repository(self):
     return MigrationRepository(
         directory=self.directory
     ) if self.directory else MigrationRepository()
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())
 def setUp(self):
     self.migration_repository = MigrationRepository()
 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")
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"])
 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 setUp(self):
     self.migration_repository = MigrationRepository()
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())
예제 #13
0
class CLIDatabaseTests(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")
        self.runner = CliRunner()

    def tearDown(self):
        if self.database_manager.is_database_provisioned():
            self.database_manager.reset()
            self.database_manager.deprovision_database()
        self.migration_repository.clear()

    def test_cli_provision_database(self):
        result = self.runner.invoke(cli, ["db", "provision", "DATABASE"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), CLIStrings.DB_DATABASE_PROVISIONED_SUCCESSFULLY)
        self.assertTrue(self.database_manager.is_database_provisioned())

    def test_cli_deprovision_database(self):
        result = self.runner.invoke(cli, ["db", "provision", "DATABASE"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), CLIStrings.DB_DATABASE_PROVISIONED_SUCCESSFULLY)
        self.assertTrue(self.database_manager.is_database_provisioned())

        result = self.runner.invoke(cli, ["db", "deprovision", "DATABASE"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), CLIStrings.DB_DATABASE_DEPROVISIONED_SUCCESSFULLY)
        self.assertFalse(self.database_manager.is_database_provisioned())

    def test_cli_provision_when_already_provisioned(self):
        result = self.runner.invoke(cli, ["db", "provision", "DATABASE"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), CLIStrings.DB_DATABASE_PROVISIONED_SUCCESSFULLY)
        self.assertTrue(self.database_manager.is_database_provisioned())

        result = self.runner.invoke(cli, ["db", "provision", "DATABASE"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), CLIStrings.DB_DATABASE_IS_ALREADY_PROVISIONED)
        self.assertTrue(self.database_manager.is_database_provisioned())

    def test_cli_deprovision_when_not_provisioned(self):
        result = self.runner.invoke(cli, ["db", "deprovision", "DATABASE"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), CLIStrings.DB_DATABASE_IS_NOT_PROVISIONED)
        self.assertFalse(self.database_manager.is_database_provisioned())

    def test_cli_version_non_migrated(self):
        result = self.runner.invoke(cli, ["db", "provision", "DATABASE"])
        self.assertEqual(result.exit_code, 0)

        result = self.runner.invoke(cli, ["db", "version", "DATABASE"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), CLIStrings.DB_DATABASE_NOT_MIGRATED_YET)

    def test_cli_version_migrated(self):
        result = self.runner.invoke(cli, ["db", "provision", "DATABASE"])
        self.assertEqual(result.exit_code, 0)

        self.runner.invoke(cli, ["new", "table", "test"])
        self.runner.invoke(cli, ["db", "migrate", "DATABASE"])

        result = self.runner.invoke(cli, ["db", "version", "DATABASE"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), "{0}: {1}".format(CLIStrings.DB_DATABASE_VERSION, 0))

    def test_cli_list_tables(self):
        result = self.runner.invoke(cli, ["db", "provision", "DATABASE"])
        self.assertEqual(result.exit_code, 0)

        result = self.runner.invoke(cli, ["db", "tables", "DATABASE"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), "\nTABLES\n--------\nversion_migration\n--------")

    def test_cli_list_procedures(self):
        result = self.runner.invoke(cli, ["db", "procedures", "DATABASE"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(result.output.rstrip(), "\nPROCEDURES\n--------\n--------")

    def test_cli_upgrade(self):
        result = self.runner.invoke(cli, ["db", "provision", "DATABASE"])
        self.assertEqual(result.exit_code, 0)

        self.runner.invoke(cli, ["new", "table", "test"])
        self.runner.invoke(cli, ["db", "upgrade", "DATABASE"])

        self.assertEqual(result.exit_code, 0)
        self.assertEqual(self.database_manager.current_database_migration_version(), 0)

    def test_cli_downgrade(self):
        result = self.runner.invoke(cli, ["db", "provision", "DATABASE"])
        self.assertEqual(result.exit_code, 0)

        self.runner.invoke(cli, ["new", "table", "test"])
        self.runner.invoke(cli, ["db", "upgrade", "DATABASE"])

        self.assertEqual(result.exit_code, 0)
        self.assertEqual(self.database_manager.current_database_migration_version(), 0)

        result = self.runner.invoke(cli, ["db", "downgrade", "DATABASE"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(self.database_manager.current_database_migration_version(), None)

    def test_cli_migrate(self):
        result = self.runner.invoke(cli, ["db", "provision", "DATABASE"])
        self.assertEqual(result.exit_code, 0)

        self.runner.invoke(cli, ["new", "table", "test"])
        self.runner.invoke(cli, ["db", "upgrade", "DATABASE"])

        self.assertEqual(result.exit_code, 0)
        self.assertEqual(self.database_manager.current_database_migration_version(), 0)

    def test_cli_reset(self):
        result = self.runner.invoke(cli, ["db", "provision", "DATABASE"])
        self.assertEqual(result.exit_code, 0)

        self.runner.invoke(cli, ["new", "table", "test"])
        self.runner.invoke(cli, ["db", "migrate", "DATABASE"])

        self.assertEqual(result.exit_code, 0)
        self.assertEqual(self.database_manager.current_database_migration_version(), 0)

        result = self.runner.invoke(cli, ["db", "reset", "DATABASE"])
        self.assertEqual(result.exit_code, 0)
        self.assertEqual(self.database_manager.current_database_migration_version(), None)
예제 #14
0
 def setUp(self):
     self.migration_repository = MigrationRepository()
     self.migration_repository.clear()
     self.runner = CliRunner()