This is an automated email from the ASF dual-hosted git repository. borinquenkid pushed a commit to branch 8.0.x-hibernate7-dev in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 0bae47b226c3ee5d7890c4db43b03331b576685a Author: Walter Duque de Estrada <[email protected]> AuthorDate: Tue Mar 10 20:09:57 2026 -0500 hibernate 7 GrailsLiquibaseSpec --- .../hibernate/database/JpaPersistenceDatabase.java | 2 +- .../connection/HibernateConnectionMetadata.java | 2 +- .../DatabaseMigrationGrailsPluginSpec.groovy | 7 +- .../liquibase/GrailsLiquibaseSpec.groovy | 84 ++++++++++++++++++++++ 4 files changed, 91 insertions(+), 4 deletions(-) diff --git a/grails-data-hibernate7/dbmigration/src/main/java/liquibase/ext/hibernate/database/JpaPersistenceDatabase.java b/grails-data-hibernate7/dbmigration/src/main/java/liquibase/ext/hibernate/database/JpaPersistenceDatabase.java index 3f62528b70..510b0a8fa0 100644 --- a/grails-data-hibernate7/dbmigration/src/main/java/liquibase/ext/hibernate/database/JpaPersistenceDatabase.java +++ b/grails-data-hibernate7/dbmigration/src/main/java/liquibase/ext/hibernate/database/JpaPersistenceDatabase.java @@ -53,7 +53,7 @@ public class JpaPersistenceDatabase extends HibernateEjb3Database { internalPersistenceUnitManager.setPersistenceXmlLocation(path); internalPersistenceUnitManager.preparePersistenceUnitInfos(); - PersistenceUnitInfo persistenceUnitInfo = Optional.ofNullable(internalPersistenceUnitManager.obtainDefaultPersistenceUnitInfo()) + PersistenceUnitInfo persistenceUnitInfo = Optional.of(internalPersistenceUnitManager.obtainDefaultPersistenceUnitInfo()) .orElseThrow(() -> new IllegalStateException("No persistence unit info found for path: " + path)); return (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder( diff --git a/grails-data-hibernate7/dbmigration/src/main/java/liquibase/ext/hibernate/database/connection/HibernateConnectionMetadata.java b/grails-data-hibernate7/dbmigration/src/main/java/liquibase/ext/hibernate/database/connection/HibernateConnectionMetadata.java index 969627c9a5..007be46d49 100644 --- a/grails-data-hibernate7/dbmigration/src/main/java/liquibase/ext/hibernate/database/connection/HibernateConnectionMetadata.java +++ b/grails-data-hibernate7/dbmigration/src/main/java/liquibase/ext/hibernate/database/connection/HibernateConnectionMetadata.java @@ -10,7 +10,7 @@ import org.hibernate.Version; */ public class HibernateConnectionMetadata implements DatabaseMetaData { - private String url; + private final String url; public HibernateConnectionMetadata(String url) { this.url = url; diff --git a/grails-data-hibernate7/dbmigration/src/test/groovy/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPluginSpec.groovy b/grails-data-hibernate7/dbmigration/src/test/groovy/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPluginSpec.groovy index 656965b30c..83045cd637 100644 --- a/grails-data-hibernate7/dbmigration/src/test/groovy/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPluginSpec.groovy +++ b/grails-data-hibernate7/dbmigration/src/test/groovy/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPluginSpec.groovy @@ -18,6 +18,9 @@ */ package org.grails.plugins.databasemigration +import org.springframework.transaction.TransactionDefinition +import org.springframework.transaction.TransactionStatus + import grails.core.GrailsApplication import grails.spring.BeanBuilder import liquibase.parser.ChangeLogParserFactory @@ -150,8 +153,8 @@ class DatabaseMigrationGrailsPluginSpec extends Specification { applicationContext.getBean('grailsLiquibaseFactory', GrailsLiquibase) >> grailsLiquibase // Mock PlatformTransactionManager and TransactionStatus - org.springframework.transaction.TransactionStatus transactionStatus = Mock(org.springframework.transaction.TransactionStatus) - transactionManager.getTransaction(_ as org.springframework.transaction.TransactionDefinition) >> transactionStatus + TransactionStatus transactionStatus = Mock(TransactionStatus) + transactionManager.getTransaction(_ as TransactionDefinition) >> transactionStatus // DatabaseMigrationTransactionManager uses applicationContext.getBean(beanName, PlatformTransactionManager) // Ensure ALL calls to getBean with any string and PlatformTransactionManager are handled diff --git a/grails-data-hibernate7/dbmigration/src/test/groovy/org/grails/plugins/databasemigration/liquibase/GrailsLiquibaseSpec.groovy b/grails-data-hibernate7/dbmigration/src/test/groovy/org/grails/plugins/databasemigration/liquibase/GrailsLiquibaseSpec.groovy new file mode 100644 index 0000000000..e138e112d1 --- /dev/null +++ b/grails-data-hibernate7/dbmigration/src/test/groovy/org/grails/plugins/databasemigration/liquibase/GrailsLiquibaseSpec.groovy @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 + * + * https://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 org.grails.plugins.databasemigration.liquibase + +import java.sql.Connection + +import liquibase.Contexts +import liquibase.LabelExpression +import liquibase.Liquibase +import liquibase.database.Database +import liquibase.resource.ResourceAccessor + +import org.springframework.context.ApplicationContext +import spock.lang.Specification + +class GrailsLiquibaseSpec extends Specification { + + ApplicationContext applicationContext = Mock() + GrailsLiquibase grailsLiquibase + + def setup() { + grailsLiquibase = new GrailsLiquibase(applicationContext) + } + + def "performUpdate invokes callbacks if they exist"() { + given: + Liquibase liquibase = Mock() + Database database = Mock() + liquibase.database >> database + + def callbacks = Mock(TestCallbacks) + + applicationContext.containsBean('migrationCallbacks') >> true + applicationContext.getBean('migrationCallbacks') >> callbacks + + grailsLiquibase.changeLog = "test.xml" + + when: + grailsLiquibase.performUpdate(liquibase) + + then: + 1 * callbacks.beforeStartMigration(database) + 1 * callbacks.onStartMigration(database, liquibase, "test.xml") + 1 * liquibase.update(_ as Contexts, _ as LabelExpression) + 1 * callbacks.afterMigrations(database) + } + + def "performUpdate proceeds normally if no callbacks"() { + given: + Liquibase liquibase = Mock() + Database database = Mock() + liquibase.database >> database + + applicationContext.containsBean('migrationCallbacks') >> false + + when: + grailsLiquibase.performUpdate(liquibase) + + then: + 1 * liquibase.update(_ as Contexts, _ as LabelExpression) + } + + interface TestCallbacks { + void beforeStartMigration(Database db) + void onStartMigration(Database db, Liquibase liq, String log) + void afterMigrations(Database db) + } +}
