package model import ( "testing" "github.com/glebarez/sqlite" "gorm.io/gorm" ) // 默认板块只在空库播种:站长改名/删除板块后重启不得复活默认板块(0.2.1 事故回归) func TestSeedDefaultBoardsOnlyWhenEmpty(t *testing.T) { db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{}) if err != nil { t.Fatalf("open sqlite: %v", err) } if err := db.AutoMigrate(&Board{}); err != nil { t.Fatalf("migrate: %v", err) } // 空库首启:播种 4 个默认板块 seedDefaultBoards(db) var n int64 db.Model(&Board{}).Count(&n) if n != 4 { t.Fatalf("空库应播种 4 个默认板块,实际 %d", n) } // 站长改名后重启:不再复活默认板块 if err := db.Model(&Board{}).Where("name = ?", "综合讨论").Update("name", "新综合").Error; err != nil { t.Fatalf("rename: %v", err) } seedDefaultBoards(db) db.Model(&Board{}).Count(&n) if n != 4 { t.Fatalf("改名后重启不应重复播种,实际 %d 个板块", n) } var revived int64 db.Model(&Board{}).Where("name = ?", "综合讨论").Count(&revived) if revived != 0 { t.Fatal("默认板块「综合讨论」被复活") } }