53 lines
1.7 KiB
Go
53 lines
1.7 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|
|
}
|