mirror of
https://github.com/steveiliop56/tinyauth.git
synced 2026-05-25 21:50:16 +00:00
117 lines
2.8 KiB
Go
117 lines
2.8 KiB
Go
package bootstrap
|
|
|
|
import (
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/tinyauthapp/tinyauth/internal/model"
|
|
)
|
|
|
|
func TestSetupStore_UnknownDriver(t *testing.T) {
|
|
tests := []struct {
|
|
driver string
|
|
wantErr string
|
|
}{
|
|
{
|
|
driver: "mysql",
|
|
wantErr: `unknown database driver "mysql": valid values are sqlite, postgres, memory`,
|
|
},
|
|
{
|
|
driver: "redis",
|
|
wantErr: `unknown database driver "redis": valid values are sqlite, postgres, memory`,
|
|
},
|
|
{
|
|
driver: "baddriver",
|
|
wantErr: `unknown database driver "baddriver": valid values are sqlite, postgres, memory`,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run("driver_"+tt.driver, func(t *testing.T) {
|
|
app := NewBootstrapApp(model.Config{
|
|
Database: model.DatabaseConfig{
|
|
Driver: tt.driver,
|
|
},
|
|
})
|
|
store, err := app.SetupStore()
|
|
assert.Nil(t, store)
|
|
require.Error(t, err)
|
|
assert.Equal(t, tt.wantErr, err.Error())
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestSetupStore_Memory(t *testing.T) {
|
|
app := NewBootstrapApp(model.Config{
|
|
Database: model.DatabaseConfig{
|
|
Driver: "memory",
|
|
},
|
|
})
|
|
store, err := app.SetupStore()
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, store)
|
|
}
|
|
|
|
func TestSetupStore_SQLite_ExplicitDriver(t *testing.T) {
|
|
dir := t.TempDir()
|
|
dbPath := filepath.Join(dir, "test.db")
|
|
|
|
app := NewBootstrapApp(model.Config{
|
|
Database: model.DatabaseConfig{
|
|
Driver: "sqlite",
|
|
Path: dbPath,
|
|
},
|
|
})
|
|
store, err := app.SetupStore()
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, store)
|
|
}
|
|
|
|
func TestSetupStore_SQLite_DefaultDriver(t *testing.T) {
|
|
dir := t.TempDir()
|
|
dbPath := filepath.Join(dir, "default.db")
|
|
|
|
app := NewBootstrapApp(model.Config{
|
|
Database: model.DatabaseConfig{
|
|
Driver: "",
|
|
Path: dbPath,
|
|
},
|
|
})
|
|
store, err := app.SetupStore()
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, store)
|
|
}
|
|
|
|
func TestSetupStore_Postgres_InvalidURL(t *testing.T) {
|
|
app := NewBootstrapApp(model.Config{
|
|
Database: model.DatabaseConfig{
|
|
Driver: "postgres",
|
|
Path: "not-a-valid-postgres-url",
|
|
},
|
|
})
|
|
store, err := app.SetupStore()
|
|
// sql.Open does not fail on a bad URL for pgx — it only fails on first use.
|
|
// The error should come from pgxmigrate.WithInstance when the DB is actually
|
|
// pinged / connected, so we expect either success-with-error or an error here.
|
|
// What matters is that the postgres case is reached (i.e., no "unknown driver" error).
|
|
if err != nil {
|
|
assert.False(t, strings.Contains(err.Error(), "unknown database driver"))
|
|
assert.Nil(t, store)
|
|
}
|
|
}
|
|
|
|
func TestSetupStore_ErrorMessageIncludesPostgres(t *testing.T) {
|
|
app := NewBootstrapApp(model.Config{
|
|
Database: model.DatabaseConfig{
|
|
Driver: "oracle",
|
|
},
|
|
})
|
|
_, err := app.SetupStore()
|
|
require.Error(t, err)
|
|
assert.Contains(t, err.Error(), "postgres")
|
|
assert.Contains(t, err.Error(), "sqlite")
|
|
assert.Contains(t, err.Error(), "memory")
|
|
} |