2022-07-07 00:19:05 +03:00
|
|
|
package auth
|
|
|
|
|
|
|
|
import (
|
2024-10-12 10:16:01 +03:00
|
|
|
"bytes"
|
2023-03-01 23:29:45 +02:00
|
|
|
"context"
|
2024-10-12 10:16:01 +03:00
|
|
|
"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")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-11-29 20:19:54 +02:00
|
|
|
func TestDisplayName(t *testing.T) {
|
2024-09-29 19:23:19 +03:00
|
|
|
b := BaseProvider{}
|
2023-11-29 20:19:54 +02:00
|
|
|
|
|
|
|
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{}
|
2023-11-29 20:19:54 +02:00
|
|
|
|
|
|
|
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 {
|
2023-11-29 20:19:54 +02:00
|
|
|
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 {
|
2023-11-29 20:19:54 +02:00
|
|
|
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 != "" {
|
2023-11-29 20:19:54 +02:00
|
|
|
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" {
|
2023-11-29 20:19:54 +02:00
|
|
|
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 != "" {
|
2023-11-29 20:19:54 +02:00
|
|
|
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" {
|
2023-11-29 20:19:54 +02:00
|
|
|
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
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-10-12 10:16:01 +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)
|
|
|
|
}
|
|
|
|
}
|