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 954fcbe16f6270e0df024df1023e5310c2cade60
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Tue Mar 10 14:25:25 2026 -0500

    hibernate 7:  added DatabaseChangeLogBuilderSpec
---
 .../liquibase/DatabaseChangeLogBuilderSpec.groovy  | 172 +++++++++++++++++++++
 1 file changed, 172 insertions(+)

diff --git 
a/grails-data-hibernate7/dbmigration/src/test/groovy/org/grails/plugins/databasemigration/liquibase/DatabaseChangeLogBuilderSpec.groovy
 
b/grails-data-hibernate7/dbmigration/src/test/groovy/org/grails/plugins/databasemigration/liquibase/DatabaseChangeLogBuilderSpec.groovy
new file mode 100644
index 0000000000..06939b6938
--- /dev/null
+++ 
b/grails-data-hibernate7/dbmigration/src/test/groovy/org/grails/plugins/databasemigration/liquibase/DatabaseChangeLogBuilderSpec.groovy
@@ -0,0 +1,172 @@
+/*
+ *  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 liquibase.parser.core.ParsedNode
+import org.grails.plugins.databasemigration.DatabaseMigrationException
+import org.springframework.context.ApplicationContext
+import spock.lang.Specification
+
+import static 
org.grails.plugins.databasemigration.PluginConstants.DATA_SOURCE_NAME_KEY
+
+class DatabaseChangeLogBuilderSpec extends Specification {
+
+    DatabaseChangeLogBuilder builder
+    ApplicationContext applicationContext = Mock()
+
+    def setup() {
+        builder = new DatabaseChangeLogBuilder()
+        builder.applicationContext = applicationContext
+        builder.dataSourceName = "testDataSource"
+    }
+
+    def "builds simple nodes with attributes and values"() {
+        when:
+        ParsedNode root = (ParsedNode) builder.databaseChangeLog {
+            changeSet(author: "test", id: "1") {
+                createTable(tableName: "test_table") {
+                    column(name: "id", type: "int")
+                }
+            }
+        }
+
+        then:
+        root.name == "databaseChangeLog"
+        
+        def changeSet = root.getChild(null, "changeSet")
+        changeSet != null
+        changeSet.getChildValue(null, "author") == "test"
+        changeSet.getChildValue(null, "id") == "1"
+
+        def createTable = changeSet.getChild(null, "createTable")
+        createTable != null
+        createTable.getChildValue(null, "tableName") == "test_table"
+
+        def column = createTable.getChild(null, "column")
+        column != null
+        column.getChildValue(null, "name") == "id"
+        column.getChildValue(null, "type") == "int"
+    }
+
+    def "builds grailsChange node with special properties"() {
+        given:
+        Closure initClosure = { "init" }
+        Closure validateClosure = { "validate" }
+        Closure changeClosure = { "change" }
+        Closure rollbackClosure = { "rollback" }
+
+        when:
+        ParsedNode root = (ParsedNode) builder.databaseChangeLog {
+            changeSet(author: "test", id: "1") {
+                grailsChange {
+                    init initClosure
+                    validate validateClosure
+                    change changeClosure
+                    rollback rollbackClosure
+                    confirm "test confirmation"
+                    checksum "test checksum"
+                }
+            }
+        }
+
+        then:
+        def changeSet = root.getChild(null, "changeSet")
+        def grailsChange = changeSet.getChild(null, "grailsChange")
+        grailsChange != null
+        grailsChange.getChildValue(null, "applicationContext") == 
applicationContext
+        grailsChange.getChildValue(null, DATA_SOURCE_NAME_KEY) == 
"testDataSource"
+
+        grailsChange.getChildValue(null, "init") == initClosure
+        grailsChange.getChildValue(null, "validate") == validateClosure
+        grailsChange.getChildValue(null, "change") == changeClosure
+        grailsChange.getChildValue(null, "rollback") == rollbackClosure
+        grailsChange.getChildValue(null, "confirm") == "test confirmation"
+        grailsChange.getChildValue(null, "checksum") == "test checksum"
+    }
+
+    def "builds grailsPrecondition node"() {
+        given:
+        Closure checkClosure = { true }
+
+        when:
+        ParsedNode root = (ParsedNode) builder.databaseChangeLog {
+            preConditions {
+                grailsPrecondition {
+                    check checkClosure
+                }
+            }
+        }
+
+        then:
+        def preConditions = root.children[0]
+        def grailsPrecondition = preConditions.children[0]
+        grailsPrecondition.name == "grailsPrecondition"
+        grailsPrecondition.getChildValue(null, "applicationContext") == 
applicationContext
+        grailsPrecondition.getChildValue(null, DATA_SOURCE_NAME_KEY) == 
"testDataSource"
+        grailsPrecondition.getChildValue(null, "check") == checkClosure
+    }
+
+    def "throws DatabaseMigrationException for unknown methods in 
grailsChange"() {
+        when:
+        builder.databaseChangeLog {
+            grailsChange {
+                unknownMethod()
+            }
+        }
+
+        then:
+        thrown(DatabaseMigrationException)
+    }
+
+    def "throws DatabaseMigrationException for unknown methods in 
grailsPrecondition"() {
+        when:
+        builder.databaseChangeLog {
+            grailsPrecondition {
+                unknownMethod()
+            }
+        }
+
+        then:
+        thrown(DatabaseMigrationException)
+    }
+
+    def "handles nodes with values"() {
+        when:
+        ParsedNode root = (ParsedNode) builder.databaseChangeLog {
+            someNode "someValue"
+        }
+
+        then:
+        root.children[0].name == "someNode"
+        root.children[0].value == "someValue"
+    }
+
+    def "handles nodes with attributes and values"() {
+        when:
+        ParsedNode root = (ParsedNode) builder.databaseChangeLog {
+            someNode(attr: "val", "nodeValue")
+        }
+
+        then:
+        def node = root.children[0]
+        node.name == "someNode"
+        node.value == "nodeValue"
+        node.getChildValue(null, "attr") == "val"
+    }
+}

Reply via email to