mirror of
https://github.com/pocketbase/pocketbase.git
synced 2024-12-01 11:01:04 +02:00
190 lines
4.4 KiB
Go
190 lines
4.4 KiB
Go
package daos_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/pocketbase/pocketbase/models"
|
|
"github.com/pocketbase/pocketbase/tests"
|
|
)
|
|
|
|
func TestExternalAuthQuery(t *testing.T) {
|
|
app, _ := tests.NewTestApp()
|
|
defer app.Cleanup()
|
|
|
|
expected := "SELECT {{_externalAuths}}.* FROM `_externalAuths`"
|
|
|
|
sql := app.Dao().ExternalAuthQuery().Build().SQL()
|
|
if sql != expected {
|
|
t.Errorf("Expected sql %s, got %s", expected, sql)
|
|
}
|
|
}
|
|
|
|
func TestFindAllExternalAuthsByRecord(t *testing.T) {
|
|
app, _ := tests.NewTestApp()
|
|
defer app.Cleanup()
|
|
|
|
scenarios := []struct {
|
|
userId string
|
|
expectedCount int
|
|
}{
|
|
{"oap640cot4yru2s", 0},
|
|
{"4q1xlclmfloku33", 2},
|
|
}
|
|
|
|
for i, s := range scenarios {
|
|
record, err := app.Dao().FindRecordById("users", s.userId)
|
|
if err != nil {
|
|
t.Errorf("(%d) Unexpected record fetch error %v", i, err)
|
|
continue
|
|
}
|
|
|
|
auths, err := app.Dao().FindAllExternalAuthsByRecord(record)
|
|
if err != nil {
|
|
t.Errorf("(%d) Unexpected auths fetch error %v", i, err)
|
|
continue
|
|
}
|
|
|
|
if len(auths) != s.expectedCount {
|
|
t.Errorf("(%d) Expected %d auths, got %d", i, s.expectedCount, len(auths))
|
|
}
|
|
|
|
for _, auth := range auths {
|
|
if auth.RecordId != record.Id {
|
|
t.Errorf("(%d) Expected all auths to be linked to record id %s, got %v", i, record.Id, auth)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestFindExternalAuthByProvider(t *testing.T) {
|
|
app, _ := tests.NewTestApp()
|
|
defer app.Cleanup()
|
|
|
|
scenarios := []struct {
|
|
provider string
|
|
providerId string
|
|
expectedId string
|
|
}{
|
|
{"", "", ""},
|
|
{"github", "", ""},
|
|
{"github", "id1", ""},
|
|
{"github", "id2", ""},
|
|
{"google", "test123", "clmflokuq1xl341"},
|
|
{"gitlab", "test123", "dlmflokuq1xl342"},
|
|
}
|
|
|
|
for i, s := range scenarios {
|
|
auth, err := app.Dao().FindExternalAuthByProvider(s.provider, s.providerId)
|
|
|
|
hasErr := err != nil
|
|
expectErr := s.expectedId == ""
|
|
if hasErr != expectErr {
|
|
t.Errorf("(%d) Expected hasErr %v, got %v", i, expectErr, err)
|
|
continue
|
|
}
|
|
|
|
if auth != nil && auth.Id != s.expectedId {
|
|
t.Errorf("(%d) Expected external auth with ID %s, got \n%v", i, s.expectedId, auth)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestFindExternalAuthByRecordAndProvider(t *testing.T) {
|
|
app, _ := tests.NewTestApp()
|
|
defer app.Cleanup()
|
|
|
|
scenarios := []struct {
|
|
userId string
|
|
provider string
|
|
expectedId string
|
|
}{
|
|
{"bgs820n361vj1qd", "google", ""},
|
|
{"4q1xlclmfloku33", "google", "clmflokuq1xl341"},
|
|
{"4q1xlclmfloku33", "gitlab", "dlmflokuq1xl342"},
|
|
}
|
|
|
|
for i, s := range scenarios {
|
|
record, err := app.Dao().FindRecordById("users", s.userId)
|
|
if err != nil {
|
|
t.Errorf("(%d) Unexpected record fetch error %v", i, err)
|
|
continue
|
|
}
|
|
|
|
auth, err := app.Dao().FindExternalAuthByRecordAndProvider(record, s.provider)
|
|
|
|
hasErr := err != nil
|
|
expectErr := s.expectedId == ""
|
|
if hasErr != expectErr {
|
|
t.Errorf("(%d) Expected hasErr %v, got %v", i, expectErr, err)
|
|
continue
|
|
}
|
|
|
|
if auth != nil && auth.Id != s.expectedId {
|
|
t.Errorf("(%d) Expected external auth with ID %s, got \n%v", i, s.expectedId, auth)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSaveExternalAuth(t *testing.T) {
|
|
app, _ := tests.NewTestApp()
|
|
defer app.Cleanup()
|
|
|
|
// save with empty provider data
|
|
emptyAuth := &models.ExternalAuth{}
|
|
if err := app.Dao().SaveExternalAuth(emptyAuth); err == nil {
|
|
t.Fatal("Expected error, got nil")
|
|
}
|
|
|
|
auth := &models.ExternalAuth{
|
|
RecordId: "o1y0dd0spd786md",
|
|
CollectionId: "v851q4r790rhknl",
|
|
Provider: "test",
|
|
ProviderId: "test_id",
|
|
}
|
|
|
|
if err := app.Dao().SaveExternalAuth(auth); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// check if it was really saved
|
|
foundAuth, err := app.Dao().FindExternalAuthByProvider("test", "test_id")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if auth.Id != foundAuth.Id {
|
|
t.Fatalf("Expected ExternalAuth with id %s, got \n%v", auth.Id, foundAuth)
|
|
}
|
|
}
|
|
|
|
func TestDeleteExternalAuth(t *testing.T) {
|
|
app, _ := tests.NewTestApp()
|
|
defer app.Cleanup()
|
|
|
|
record, err := app.Dao().FindRecordById("users", "4q1xlclmfloku33")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
auths, err := app.Dao().FindAllExternalAuthsByRecord(record)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
for _, auth := range auths {
|
|
if err := app.Dao().DeleteExternalAuth(auth); err != nil {
|
|
t.Fatalf("Failed to delete the ExternalAuth relation, got \n%v", err)
|
|
}
|
|
}
|
|
|
|
// check if the relations were really deleted
|
|
newAuths, err := app.Dao().FindAllExternalAuthsByRecord(record)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if len(newAuths) != 0 {
|
|
t.Fatalf("Expected all record %s ExternalAuth relations to be deleted, got \n%v", record.Id, newAuths)
|
|
}
|
|
}
|