mirror of
https://github.com/truewhile/MeBox.git
synced 2026-10-06 05:16:38 +08:00
优化,现有bug处理
This commit is contained in:
@@ -1,13 +1,24 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/glebarez/sqlite"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/logger"
|
||||
|
||||
"github.com/truewhile/MeBox/internal/model"
|
||||
)
|
||||
|
||||
// newServiceTestDB opens an in-memory DB for service tests.
|
||||
//
|
||||
// The full model set is always migrated, on top of any explicitly requested
|
||||
// models. Service code probes tables that a given test may not care about
|
||||
// (settings for adult visibility, play_profiles for playback, media for library
|
||||
// counts); with a partial schema those probes fail with "no such table" and the
|
||||
// default GORM logger floods the test output, burying real failures. Migrating
|
||||
// everything keeps fixtures faithful to production and the output quiet.
|
||||
func newServiceTestDB(t *testing.T, models ...any) *gorm.DB {
|
||||
t.Helper()
|
||||
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{Logger: logger.Default.LogMode(logger.Silent)})
|
||||
@@ -17,10 +28,21 @@ func newServiceTestDB(t *testing.T, models ...any) *gorm.DB {
|
||||
if sqlDB, err := db.DB(); err == nil {
|
||||
t.Cleanup(func() { _ = sqlDB.Close() })
|
||||
}
|
||||
if len(models) > 0 {
|
||||
if err := db.AutoMigrate(models...); err != nil {
|
||||
t.Fatal(err)
|
||||
toMigrate := model.AllModels()
|
||||
seen := make(map[string]struct{}, len(toMigrate)+len(models))
|
||||
for _, m := range toMigrate {
|
||||
seen[reflect.TypeOf(m).String()] = struct{}{}
|
||||
}
|
||||
for _, m := range models {
|
||||
key := reflect.TypeOf(m).String()
|
||||
if _, ok := seen[key]; ok {
|
||||
continue
|
||||
}
|
||||
seen[key] = struct{}{}
|
||||
toMigrate = append(toMigrate, m)
|
||||
}
|
||||
if err := db.AutoMigrate(toMigrate...); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return db
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user