package tests import ( "fmt" "testing" "nex/backend/internal/config" "github.com/stretchr/testify/assert" "gorm.io/driver/sqlite" "gorm.io/gorm" ) // SetupTestDB initializes a temporary SQLite database with auto-migration. func SetupTestDB(t *testing.T) *gorm.DB { t.Helper() dir := t.TempDir() dsn := dir + "/test.db" db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{}) assert.NoError(t, err, "failed to open test database") err = db.AutoMigrate(&config.Provider{}, &config.Model{}, &config.UsageStats{}) assert.NoError(t, err, "failed to auto-migrate test database") return db } // CleanupTestDB closes the database and removes the temp database file. func CleanupTestDB(t *testing.T, db *gorm.DB) { t.Helper() sqlDB, err := db.DB() assert.NoError(t, err, "failed to get underlying sql.DB") err = sqlDB.Close() assert.NoError(t, err, "failed to close test database") } // CreateTestProvider creates a test provider and returns it. func CreateTestProvider(t *testing.T, db *gorm.DB, id string) config.Provider { t.Helper() provider := config.Provider{ ID: id, Name: fmt.Sprintf("test-provider-%s", id), APIKey: fmt.Sprintf("test-api-key-%s", id), BaseURL: fmt.Sprintf("https://api.test-%s.com", id), Enabled: true, } err := db.Create(&provider).Error assert.NoError(t, err, "failed to create test provider") return provider } // CreateTestModel creates a test model and returns it. func CreateTestModel(t *testing.T, db *gorm.DB, id string, providerID string, modelName string) config.Model { t.Helper() model := config.Model{ ID: id, ProviderID: providerID, ModelName: modelName, Enabled: true, } err := db.Create(&model).Error assert.NoError(t, err, "failed to create test model") return model }