mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-10-10 19:36:36 +08:00
e5ce0501a2
- Add file upload support for logo and favicon with automatic PNG conversion - Add backend validation for brand asset data URLs (app_logo, app_favicon) - Change vite_config.value column type from varchar(200) to text for PostgreSQL - Add schema migration v3 for vite_config.value column type conversion - Update frontend to use file picker instead of manual URL input - Add early favicon application in index.html to prevent flash
178 lines
4.5 KiB
Go
178 lines
4.5 KiB
Go
package repo
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
gsqlite "github.com/glebarez/sqlite"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/logger"
|
|
)
|
|
|
|
func TestMigrateSchemaRunsPostgresIDRepairEvenAtCurrentVersion(t *testing.T) {
|
|
db, err := gorm.Open(gsqlite.Open(":memory:"), &gorm.Config{
|
|
Logger: logger.Default.LogMode(logger.Silent),
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("open sqlite: %v", err)
|
|
}
|
|
t.Cleanup(func() {
|
|
sqlDB, _ := db.DB()
|
|
if sqlDB != nil {
|
|
_ = sqlDB.Close()
|
|
}
|
|
})
|
|
|
|
if err := db.Exec(`CREATE TABLE schema_version (version INTEGER NOT NULL DEFAULT 0)`).Error; err != nil {
|
|
t.Fatalf("create schema_version: %v", err)
|
|
}
|
|
if err := db.Exec(`INSERT INTO schema_version(version) VALUES(?)`, currentSchemaVersion).Error; err != nil {
|
|
t.Fatalf("seed schema_version: %v", err)
|
|
}
|
|
|
|
called := 0
|
|
original := ensurePostgresIDDefaultsFn
|
|
ensurePostgresIDDefaultsFn = func(db *gorm.DB) error {
|
|
called++
|
|
return nil
|
|
}
|
|
t.Cleanup(func() {
|
|
ensurePostgresIDDefaultsFn = original
|
|
})
|
|
|
|
if err := migrateSchema(db); err != nil {
|
|
t.Fatalf("migrateSchema: %v", err)
|
|
}
|
|
if called != 1 {
|
|
t.Fatalf("expected postgres id repair to run once, got %d", called)
|
|
}
|
|
}
|
|
|
|
func TestMigrateSchemaReturnsPostgresIDRepairError(t *testing.T) {
|
|
db, err := gorm.Open(gsqlite.Open(":memory:"), &gorm.Config{
|
|
Logger: logger.Default.LogMode(logger.Silent),
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("open sqlite: %v", err)
|
|
}
|
|
t.Cleanup(func() {
|
|
sqlDB, _ := db.DB()
|
|
if sqlDB != nil {
|
|
_ = sqlDB.Close()
|
|
}
|
|
})
|
|
|
|
if err := db.Exec(`CREATE TABLE schema_version (version INTEGER NOT NULL DEFAULT 0)`).Error; err != nil {
|
|
t.Fatalf("create schema_version: %v", err)
|
|
}
|
|
if err := db.Exec(`INSERT INTO schema_version(version) VALUES(?)`, currentSchemaVersion).Error; err != nil {
|
|
t.Fatalf("seed schema_version: %v", err)
|
|
}
|
|
|
|
wantErr := errors.New("repair failed")
|
|
original := ensurePostgresIDDefaultsFn
|
|
ensurePostgresIDDefaultsFn = func(db *gorm.DB) error {
|
|
return wantErr
|
|
}
|
|
t.Cleanup(func() {
|
|
ensurePostgresIDDefaultsFn = original
|
|
})
|
|
|
|
err = migrateSchema(db)
|
|
if !errors.Is(err, wantErr) {
|
|
t.Fatalf("expected error %v, got %v", wantErr, err)
|
|
}
|
|
}
|
|
|
|
func TestMigrateSchemaRunsViteConfigValueMigrationForLegacySchema(t *testing.T) {
|
|
db, err := gorm.Open(gsqlite.Open(":memory:"), &gorm.Config{
|
|
Logger: logger.Default.LogMode(logger.Silent),
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("open sqlite: %v", err)
|
|
}
|
|
t.Cleanup(func() {
|
|
sqlDB, _ := db.DB()
|
|
if sqlDB != nil {
|
|
_ = sqlDB.Close()
|
|
}
|
|
})
|
|
|
|
if err := db.Exec(`CREATE TABLE schema_version (version INTEGER NOT NULL DEFAULT 0)`).Error; err != nil {
|
|
t.Fatalf("create schema_version: %v", err)
|
|
}
|
|
if err := db.Exec(`INSERT INTO schema_version(version) VALUES(?)`, 2).Error; err != nil {
|
|
t.Fatalf("seed schema_version: %v", err)
|
|
}
|
|
|
|
originalIDRepair := ensurePostgresIDDefaultsFn
|
|
ensurePostgresIDDefaultsFn = func(db *gorm.DB) error {
|
|
return nil
|
|
}
|
|
t.Cleanup(func() {
|
|
ensurePostgresIDDefaultsFn = originalIDRepair
|
|
})
|
|
|
|
called := 0
|
|
originalMigrate := migrateViteConfigValueColumnTypeFn
|
|
migrateViteConfigValueColumnTypeFn = func(db *gorm.DB) error {
|
|
called++
|
|
return nil
|
|
}
|
|
t.Cleanup(func() {
|
|
migrateViteConfigValueColumnTypeFn = originalMigrate
|
|
})
|
|
|
|
if err := migrateSchema(db); err != nil {
|
|
t.Fatalf("migrateSchema: %v", err)
|
|
}
|
|
|
|
if called != 1 {
|
|
t.Fatalf("expected vite_config migration to run once, got %d", called)
|
|
}
|
|
}
|
|
|
|
func TestMigrateSchemaReturnsViteConfigMigrationError(t *testing.T) {
|
|
db, err := gorm.Open(gsqlite.Open(":memory:"), &gorm.Config{
|
|
Logger: logger.Default.LogMode(logger.Silent),
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("open sqlite: %v", err)
|
|
}
|
|
t.Cleanup(func() {
|
|
sqlDB, _ := db.DB()
|
|
if sqlDB != nil {
|
|
_ = sqlDB.Close()
|
|
}
|
|
})
|
|
|
|
if err := db.Exec(`CREATE TABLE schema_version (version INTEGER NOT NULL DEFAULT 0)`).Error; err != nil {
|
|
t.Fatalf("create schema_version: %v", err)
|
|
}
|
|
if err := db.Exec(`INSERT INTO schema_version(version) VALUES(?)`, 2).Error; err != nil {
|
|
t.Fatalf("seed schema_version: %v", err)
|
|
}
|
|
|
|
originalIDRepair := ensurePostgresIDDefaultsFn
|
|
ensurePostgresIDDefaultsFn = func(db *gorm.DB) error {
|
|
return nil
|
|
}
|
|
t.Cleanup(func() {
|
|
ensurePostgresIDDefaultsFn = originalIDRepair
|
|
})
|
|
|
|
wantErr := errors.New("vite config migration failed")
|
|
originalMigrate := migrateViteConfigValueColumnTypeFn
|
|
migrateViteConfigValueColumnTypeFn = func(db *gorm.DB) error {
|
|
return wantErr
|
|
}
|
|
t.Cleanup(func() {
|
|
migrateViteConfigValueColumnTypeFn = originalMigrate
|
|
})
|
|
|
|
err = migrateSchema(db)
|
|
if !errors.Is(err, wantErr) {
|
|
t.Fatalf("expected error %v, got %v", wantErr, err)
|
|
}
|
|
}
|