Files
photoview/api/test_utils/test_db_manager.go
2025-06-26 22:19:09 +02:00

66 lines
1.1 KiB
Go

package test_utils
import (
"fmt"
"github.com/photoview/photoview/api/database"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
type TestDBManager struct {
DB *gorm.DB
}
func (dbm *TestDBManager) SetupAndReset() error {
if dbm.DB == nil {
if err := dbm.setup(); err != nil {
return fmt.Errorf("setup db error: %w", err)
}
}
return dbm.reset()
}
func (dbm *TestDBManager) Close() error {
if dbm.DB == nil {
return nil
}
sqlDB, err := dbm.DB.DB()
if err != nil {
return fmt.Errorf("get db instance when closing test database error: %w", err)
}
sqlDB.Close()
dbm.DB = nil
return nil
}
func (dbm *TestDBManager) setup() error {
config := gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
}
db, err := database.ConfigureDatabase(&config)
if err != nil {
return fmt.Errorf("configure test database error: %w", err)
}
dbm.DB = db
return nil
}
func (dbm *TestDBManager) reset() error {
if err := database.ClearDatabase(dbm.DB); err != nil {
return fmt.Errorf("clean database error: %w", err)
}
if err := database.MigrateDatabase(dbm.DB); err != nil {
return fmt.Errorf("migrate database error: %w", err)
}
return nil
}