46 lines
944 B
Go
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)
|
|
}
|
|
}
|