memos/store/demo_seed_test.go

53 lines
1.7 KiB
Go

package store_test
import (
"context"
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
"golang.org/x/crypto/bcrypt"
"github.com/usememos/memos/internal/profile"
"github.com/usememos/memos/store"
"github.com/usememos/memos/store/db/sqlite"
)
func TestDemoSeedRequiresIdentityProviderSignIn(t *testing.T) {
ctx := context.Background()
p := &profile.Profile{
Demo: true,
Data: t.TempDir(),
Driver: "sqlite",
DSN: filepath.Join(t.TempDir(), "demo.db"),
}
driver, err := sqlite.NewDB(p)
require.NoError(t, err)
stores := store.New(driver, p)
t.Cleanup(func() {
require.NoError(t, stores.Close())
})
require.NoError(t, stores.Migrate(ctx))
generalSetting, err := stores.GetInstanceGeneralSetting(ctx)
require.NoError(t, err)
require.True(t, generalSetting.DisallowPasswordAuth)
require.False(t, generalSetting.DisallowUserRegistration, "SSO first-login provisioning must remain enabled")
demoUsername := "demo"
demoUser, err := stores.GetUser(ctx, &store.FindUser{Username: &demoUsername})
require.NoError(t, err)
require.NotNil(t, demoUser)
require.Equal(t, store.RoleAdmin, demoUser.Role)
require.Error(t, bcrypt.CompareHashAndPassword([]byte(demoUser.PasswordHash), []byte("demo")))
demoCost, err := bcrypt.Cost([]byte(demoUser.PasswordHash))
require.NoError(t, err)
require.GreaterOrEqual(t, demoCost, 12)
aliceUsername := "alice"
aliceUser, err := stores.GetUser(ctx, &store.FindUser{Username: &aliceUsername})
require.NoError(t, err)
require.NotNil(t, aliceUser)
require.Error(t, bcrypt.CompareHashAndPassword([]byte(aliceUser.PasswordHash), []byte("demo")))
require.NotEqual(t, demoUser.PasswordHash, aliceUser.PasswordHash)
}