All Downloads are FREE. Search and download functionalities are using the official Maven repository.

migratedb.v1.integrationtest.util.dsl.internal.ThenStepImpl.kt Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2022-2024 The MigrateDB contributors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package migratedb.v1.integrationtest.util.dsl.internal

import migratedb.v1.core.api.configuration.FluentConfiguration
import migratedb.v1.core.api.internal.schemahistory.AppliedMigration
import migratedb.v1.core.internal.jdbc.JdbcConnectionFactoryImpl
import migratedb.v1.integrationtest.util.base.work
import migratedb.v1.integrationtest.util.dsl.Dsl
import org.springframework.jdbc.core.JdbcTemplate

class ThenStepImpl(given: G, databaseContext: DatabaseContext) : Dsl.ThenStep,
    AbstractAfterGiven(given, databaseContext) {
    override fun withConnection(block: (JdbcTemplate) -> Unit) {
        databaseContext.database.supportsChangingCurrentSchema()
        databaseContext.databaseInstance
            .newAdminConnection(databaseContext.namespace)
            .work(schema = databaseContext.schemaName, action = block)
    }

    override fun schemaHistory(table: String?, block: (List) -> Unit) {
        val configuration = FluentConfiguration().apply {
            table?.let(::table)
            databaseContext.schemaName?.let { schemas(it.toString()) }
        }

        JdbcConnectionFactoryImpl(
            databaseContext.adminDataSource::getConnection,
            configuration
        ).use { connectionFactory ->
            // Do not re-use database from givenInfo because its connection might not observe the effects of previously
            // committed transactions.
            databaseContext.database.databaseType.createDatabase(
                configuration,
                connectionFactory
            ).use {
                val schemaHistory = DatabaseImpl.getSchemaHistory(configuration, databaseContext.database)
                block(schemaHistory.allAppliedMigrations())
            }
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy