Files
tamabox/internal/route/session_options_test.go
T

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)
}
})
}
}