package route import ( "testing" "github.com/flamego/session/mysql" sessionRedis "github.com/flamego/session/redis" "github.com/stretchr/testify/require" "github.com/tamakyi/TamaBox/internal/conf" ) func TestSessionOptionsSelectStorageByDatabaseAndRedis(t *testing.T) { oldDatabase, oldRedis, oldExternalURL := conf.Database, conf.Redis, conf.App.ExternalURL t.Cleanup(func() { conf.Database, conf.Redis, conf.App.ExternalURL = oldDatabase, oldRedis, oldExternalURL }) conf.Database.DSN = "test-database-dsn" conf.App.ExternalURL = "https://example.test" for _, tt := range []struct { name string databaseType string redisAddr string configType interface{} }{ {name: "postgres without redis uses memory", databaseType: "postgres"}, {name: "postgres with redis uses redis", databaseType: "postgres", redisAddr: "127.0.0.1:6379", configType: sessionRedis.Config{}}, {name: "mysql without redis uses mysql", databaseType: "mysql", configType: mysql.Config{}}, {name: "mysql with redis uses redis", databaseType: "mysql", redisAddr: "127.0.0.1:6379", configType: sessionRedis.Config{}}, {name: "legacy empty database type uses mysql", configType: mysql.Config{}}, } { t.Run(tt.name, func(t *testing.T) { conf.Database.Type = tt.databaseType conf.Redis.Addr = tt.redisAddr conf.Redis.Password = "test-only-password" opts := sessionOptions() if tt.configType == nil { require.Nil(t, opts.Config) return } require.IsType(t, tt.configType, opts.Config) switch cfg := opts.Config.(type) { case mysql.Config: require.Equal(t, conf.Database.DSN, cfg.DSN) case sessionRedis.Config: require.Equal(t, tt.redisAddr, cfg.Options.Addr) require.Equal(t, 1, cfg.Options.DB) } }) } }