1
0
mirror of https://github.com/pocketbase/pocketbase.git synced 2025-03-19 22:19:23 +02:00
pocketbase/tools/auth/base_provider_test.go

270 lines
5.5 KiB
Go
Raw Normal View History

2022-07-07 00:19:05 +03:00
package auth
import (
"bytes"
2023-03-01 23:29:45 +02:00
"context"
"encoding/json"
2022-07-07 00:19:05 +03:00
"testing"
"golang.org/x/oauth2"
)
2023-03-01 23:29:45 +02:00
func TestContext(t *testing.T) {
2024-09-29 19:23:19 +03:00
b := BaseProvider{}
2023-03-01 23:29:45 +02:00
before := b.Scopes()
if before != nil {
t.Errorf("Expected nil context, got %v", before)
}
b.SetContext(context.Background())
after := b.Scopes()
if after != nil {
t.Error("Expected non-nil context")
}
}
func TestDisplayName(t *testing.T) {
2024-09-29 19:23:19 +03:00
b := BaseProvider{}
before := b.DisplayName()
if before != "" {
t.Fatalf("Expected displayName to be empty, got %v", before)
}
b.SetDisplayName("test")
after := b.DisplayName()
if after != "test" {
t.Fatalf("Expected displayName to be 'test', got %v", after)
}
}
func TestPKCE(t *testing.T) {
2024-09-29 19:23:19 +03:00
b := BaseProvider{}
before := b.PKCE()
if before != false {
t.Fatalf("Expected pkce to be %v, got %v", false, before)
}
b.SetPKCE(true)
after := b.PKCE()
if after != true {
t.Fatalf("Expected pkce to be %v, got %v", true, after)
}
}
2022-07-07 00:19:05 +03:00
func TestScopes(t *testing.T) {
2024-09-29 19:23:19 +03:00
b := BaseProvider{}
2022-07-07 00:19:05 +03:00
before := b.Scopes()
if len(before) != 0 {
t.Fatalf("Expected 0 scopes, got %v", before)
2022-07-07 00:19:05 +03:00
}
b.SetScopes([]string{"test1", "test2"})
after := b.Scopes()
if len(after) != 2 {
t.Fatalf("Expected 2 scopes, got %v", after)
2022-07-07 00:19:05 +03:00
}
}
func TestClientId(t *testing.T) {
2024-09-29 19:23:19 +03:00
b := BaseProvider{}
2022-07-07 00:19:05 +03:00
before := b.ClientId()
if before != "" {
t.Fatalf("Expected clientId to be empty, got %v", before)
2022-07-07 00:19:05 +03:00
}
b.SetClientId("test")
after := b.ClientId()
if after != "test" {
t.Fatalf("Expected clientId to be 'test', got %v", after)
2022-07-07 00:19:05 +03:00
}
}
func TestClientSecret(t *testing.T) {
2024-09-29 19:23:19 +03:00
b := BaseProvider{}
2022-07-07 00:19:05 +03:00
before := b.ClientSecret()
if before != "" {
t.Fatalf("Expected clientSecret to be empty, got %v", before)
2022-07-07 00:19:05 +03:00
}
b.SetClientSecret("test")
after := b.ClientSecret()
if after != "test" {
t.Fatalf("Expected clientSecret to be 'test', got %v", after)
2022-07-07 00:19:05 +03:00
}
}
2024-09-29 19:23:19 +03:00
func TestRedirectURL(t *testing.T) {
b := BaseProvider{}
2022-07-07 00:19:05 +03:00
2024-09-29 19:23:19 +03:00
before := b.RedirectURL()
2022-07-07 00:19:05 +03:00
if before != "" {
2024-09-29 19:23:19 +03:00
t.Fatalf("Expected RedirectURL to be empty, got %v", before)
2022-07-07 00:19:05 +03:00
}
2024-09-29 19:23:19 +03:00
b.SetRedirectURL("test")
2022-07-07 00:19:05 +03:00
2024-09-29 19:23:19 +03:00
after := b.RedirectURL()
2022-07-07 00:19:05 +03:00
if after != "test" {
2024-09-29 19:23:19 +03:00
t.Fatalf("Expected RedirectURL to be 'test', got %v", after)
2022-07-07 00:19:05 +03:00
}
}
2024-09-29 19:23:19 +03:00
func TestAuthURL(t *testing.T) {
b := BaseProvider{}
2022-07-07 00:19:05 +03:00
2024-09-29 19:23:19 +03:00
before := b.AuthURL()
2022-07-07 00:19:05 +03:00
if before != "" {
2024-09-29 19:23:19 +03:00
t.Fatalf("Expected authURL to be empty, got %v", before)
2022-07-07 00:19:05 +03:00
}
2024-09-29 19:23:19 +03:00
b.SetAuthURL("test")
2022-07-07 00:19:05 +03:00
2024-09-29 19:23:19 +03:00
after := b.AuthURL()
2022-07-07 00:19:05 +03:00
if after != "test" {
2024-09-29 19:23:19 +03:00
t.Fatalf("Expected authURL to be 'test', got %v", after)
2022-07-07 00:19:05 +03:00
}
}
2024-09-29 19:23:19 +03:00
func TestTokenURL(t *testing.T) {
b := BaseProvider{}
2022-07-07 00:19:05 +03:00
2024-09-29 19:23:19 +03:00
before := b.TokenURL()
2022-07-07 00:19:05 +03:00
if before != "" {
2024-09-29 19:23:19 +03:00
t.Fatalf("Expected tokenURL to be empty, got %v", before)
2022-07-07 00:19:05 +03:00
}
2024-09-29 19:23:19 +03:00
b.SetTokenURL("test")
2022-07-07 00:19:05 +03:00
2024-09-29 19:23:19 +03:00
after := b.TokenURL()
2022-07-07 00:19:05 +03:00
if after != "test" {
2024-09-29 19:23:19 +03:00
t.Fatalf("Expected tokenURL to be 'test', got %v", after)
2022-07-07 00:19:05 +03:00
}
}
2024-09-29 19:23:19 +03:00
func TestUserInfoURL(t *testing.T) {
b := BaseProvider{}
2022-07-07 00:19:05 +03:00
2024-09-29 19:23:19 +03:00
before := b.UserInfoURL()
2022-07-07 00:19:05 +03:00
if before != "" {
2024-09-29 19:23:19 +03:00
t.Fatalf("Expected userInfoURL to be empty, got %v", before)
2022-07-07 00:19:05 +03:00
}
2024-09-29 19:23:19 +03:00
b.SetUserInfoURL("test")
2022-07-07 00:19:05 +03:00
2024-09-29 19:23:19 +03:00
after := b.UserInfoURL()
2022-07-07 00:19:05 +03:00
if after != "test" {
2024-09-29 19:23:19 +03:00
t.Fatalf("Expected userInfoURL to be 'test', got %v", after)
2022-07-07 00:19:05 +03:00
}
}
func TestExtra(t *testing.T) {
b := BaseProvider{}
before := b.Extra()
if before != nil {
t.Fatalf("Expected extra to be empty, got %v", before)
}
extra := map[string]any{"a": 1, "b": 2}
b.SetExtra(extra)
after := b.Extra()
rawExtra, err := json.Marshal(extra)
if err != nil {
t.Fatal(err)
}
rawAfter, err := json.Marshal(after)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(rawExtra, rawAfter) {
t.Fatalf("Expected extra to be\n%s\ngot\n%s", rawExtra, rawAfter)
}
// ensure that it was shallow copied
after["b"] = 3
if d := b.Extra(); d["b"] != 2 {
t.Fatalf("Expected extra to remain unchanged, got\n%v", d)
}
}
2024-09-29 19:23:19 +03:00
func TestBuildAuthURL(t *testing.T) {
b := BaseProvider{
authURL: "authURL_test",
tokenURL: "tokenURL_test",
redirectURL: "redirectURL_test",
2022-07-07 00:19:05 +03:00
clientId: "clientId_test",
clientSecret: "clientSecret_test",
scopes: []string{"test_scope"},
}
2024-09-29 19:23:19 +03:00
expected := "authURL_test?access_type=offline&client_id=clientId_test&prompt=consent&redirect_uri=redirectURL_test&response_type=code&scope=test_scope&state=state_test"
result := b.BuildAuthURL("state_test", oauth2.AccessTypeOffline, oauth2.ApprovalForce)
2022-07-07 00:19:05 +03:00
if result != expected {
t.Errorf("Expected auth url %q, got %q", expected, result)
}
}
func TestClient(t *testing.T) {
2024-09-29 19:23:19 +03:00
b := BaseProvider{}
2022-07-07 00:19:05 +03:00
result := b.Client(&oauth2.Token{})
if result == nil {
t.Error("Expected *http.Client instance, got nil")
}
}
func TestOauth2Config(t *testing.T) {
2024-09-29 19:23:19 +03:00
b := BaseProvider{
authURL: "authURL_test",
tokenURL: "tokenURL_test",
redirectURL: "redirectURL_test",
2022-07-07 00:19:05 +03:00
clientId: "clientId_test",
clientSecret: "clientSecret_test",
scopes: []string{"test"},
}
result := b.oauth2Config()
2024-09-29 19:23:19 +03:00
if result.RedirectURL != b.RedirectURL() {
t.Errorf("Expected redirectURL %s, got %s", b.RedirectURL(), result.RedirectURL)
2022-07-07 00:19:05 +03:00
}
if result.ClientID != b.ClientId() {
t.Errorf("Expected clientId %s, got %s", b.ClientId(), result.ClientID)
}
if result.ClientSecret != b.ClientSecret() {
t.Errorf("Expected clientSecret %s, got %s", b.ClientSecret(), result.ClientSecret)
}
2024-09-29 19:23:19 +03:00
if result.Endpoint.AuthURL != b.AuthURL() {
t.Errorf("Expected authURL %s, got %s", b.AuthURL(), result.Endpoint.AuthURL)
2022-07-07 00:19:05 +03:00
}
2024-09-29 19:23:19 +03:00
if result.Endpoint.TokenURL != b.TokenURL() {
t.Errorf("Expected authURL %s, got %s", b.TokenURL(), result.Endpoint.TokenURL)
2022-07-07 00:19:05 +03:00
}
if len(result.Scopes) != len(b.Scopes()) || result.Scopes[0] != b.Scopes()[0] {
t.Errorf("Expected scopes %s, got %s", b.Scopes(), result.Scopes)
}
}