114 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			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 | ||
|  | } |