gorm/tests/submodel_test.go
2025-08-20 12:51:17 +08:00

46 lines
944 B
Go

package tests_test
import (
"testing"
"gorm.io/gorm"
)
type Man struct {
ID int
Age int
Name string
Detail string
}
// Panic-safe BeforeUpdate hook that checks for Changed("age")
func (m *Man) BeforeUpdate(tx *gorm.DB) (err error) {
if !tx.Statement.Changed("age") {
return nil
}
return nil
}
func TestSubModel(t *testing.T) {
man := Man{Age: 18, Name: "random-name"}
if err := DB.Create(&man).Error; err != nil {
t.Fatalf("unexpected error: %v", err)
}
if err := DB.Model(&man).Where("id = ?", man.ID).Updates(struct {
Age int
}{Age: 20}).Error; err != nil {
t.Fatalf("unexpected error: %v", err)
}
var result = struct{
ID int
Age int
}{}
if err := DB.Model(&man).Where("id = ?", man.ID).Find(&result).Error; err != nil {
t.Fatalf("unexpected error: %v", err)
}
if result.ID != man.ID || result.Age != 20 {
t.Fatalf("expected ID %d and Age 20, got ID %d and age", result.ID, result.Age)
}
}