1
0
mirror of https://github.com/pocketbase/pocketbase.git synced 2025-02-05 10:45:09 +02:00
pocketbase/core/db_test.go
2024-09-29 21:09:46 +03:00

114 lines
2.4 KiB
Go

package core_test
import (
"context"
"errors"
"testing"
"github.com/pocketbase/dbx"
"github.com/pocketbase/pocketbase/core"
"github.com/pocketbase/pocketbase/tests"
)
func TestGenerateDefaultRandomId(t *testing.T) {
t.Parallel()
id1 := core.GenerateDefaultRandomId()
id2 := core.GenerateDefaultRandomId()
if id1 == id2 {
t.Fatalf("Expected id1 and id2 to differ, got %q", id1)
}
if l := len(id1); l != 15 {
t.Fatalf("Expected id1 length %d, got %d", 15, l)
}
if l := len(id2); l != 15 {
t.Fatalf("Expected id2 length %d, got %d", 15, l)
}
}
func TestModelQuery(t *testing.T) {
t.Parallel()
app, _ := tests.NewTestApp()
defer app.Cleanup()
modelsQuery := app.ModelQuery(&core.Collection{})
logsModelQuery := app.AuxModelQuery(&core.Collection{})
if app.DB() == modelsQuery.Info().Builder {
t.Fatalf("ModelQuery() is not using app.DB()")
}
if app.AuxDB() == logsModelQuery.Info().Builder {
t.Fatalf("AuxModelQuery() is not using app.AuxDB()")
}
expectedSQL := "SELECT {{_collections}}.* FROM `_collections`"
for i, q := range []*dbx.SelectQuery{modelsQuery, logsModelQuery} {
sql := q.Build().SQL()
if sql != expectedSQL {
t.Fatalf("[%d] Expected select\n%s\ngot\n%s", i, expectedSQL, sql)
}
}
}
func TestValidate(t *testing.T) {
t.Parallel()
app, _ := tests.NewTestApp()
defer app.Cleanup()
u := &mockSuperusers{}
testErr := errors.New("test")
app.OnModelValidate().BindFunc(func(e *core.ModelEvent) error {
return testErr
})
err := app.Validate(u)
if err != testErr {
t.Fatalf("Expected error %v, got %v", testErr, err)
}
}
func TestValidateWithContext(t *testing.T) {
t.Parallel()
app, _ := tests.NewTestApp()
defer app.Cleanup()
u := &mockSuperusers{}
testErr := errors.New("test")
app.OnModelValidate().BindFunc(func(e *core.ModelEvent) error {
if v := e.Context.Value("test"); v != 123 {
t.Fatalf("Expected 'test' context value %#v, got %#v", 123, v)
}
return testErr
})
//nolint:staticcheck
ctx := context.WithValue(context.Background(), "test", 123)
err := app.ValidateWithContext(ctx, u)
if err != testErr {
t.Fatalf("Expected error %v, got %v", testErr, err)
}
}
// -------------------------------------------------------------------
type mockSuperusers struct {
core.BaseModel
Email string `db:"email"`
}
func (m *mockSuperusers) TableName() string {
return core.CollectionNameSuperusers
}