mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-16 07:16:38 +00:00
138 lines
4.7 KiB
Go
138 lines
4.7 KiB
Go
package idp
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/netbirdio/netbird/management/server/telemetry"
|
|
)
|
|
|
|
func TestNewPocketIdManager(t *testing.T) {
|
|
type test struct {
|
|
name string
|
|
inputConfig PocketIdClientConfig
|
|
assertErrFunc require.ErrorAssertionFunc
|
|
assertErrFuncMessage string
|
|
}
|
|
|
|
defaultTestConfig := PocketIdClientConfig{
|
|
APIToken: "api_token",
|
|
ManagementEndpoint: "http://localhost",
|
|
}
|
|
|
|
tests := []test{
|
|
{
|
|
name: "Good Configuration",
|
|
inputConfig: defaultTestConfig,
|
|
assertErrFunc: require.NoError,
|
|
assertErrFuncMessage: "shouldn't return error",
|
|
},
|
|
{
|
|
name: "Missing ManagementEndpoint",
|
|
inputConfig: PocketIdClientConfig{
|
|
APIToken: defaultTestConfig.APIToken,
|
|
ManagementEndpoint: "",
|
|
},
|
|
assertErrFunc: require.Error,
|
|
assertErrFuncMessage: "should return error when field empty",
|
|
},
|
|
{
|
|
name: "Missing APIToken",
|
|
inputConfig: PocketIdClientConfig{
|
|
APIToken: "",
|
|
ManagementEndpoint: defaultTestConfig.ManagementEndpoint,
|
|
},
|
|
assertErrFunc: require.Error,
|
|
assertErrFuncMessage: "should return error when field empty",
|
|
},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
_, err := NewPocketIdManager(tc.inputConfig, &telemetry.MockAppMetrics{})
|
|
tc.assertErrFunc(t, err, tc.assertErrFuncMessage)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestPocketID_GetUserDataByID(t *testing.T) {
|
|
client := &mockHTTPClient{code: 200, resBody: `{"id":"u1","email":"user1@example.com","displayName":"User One"}`}
|
|
|
|
mgr, err := NewPocketIdManager(PocketIdClientConfig{APIToken: "tok", ManagementEndpoint: "http://localhost"}, nil)
|
|
require.NoError(t, err)
|
|
mgr.httpClient = client
|
|
|
|
md := AppMetadata{WTAccountID: "acc1"}
|
|
got, err := mgr.GetUserDataByID(context.Background(), "u1", md)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "u1", got.ID)
|
|
assert.Equal(t, "user1@example.com", got.Email)
|
|
assert.Equal(t, "User One", got.Name)
|
|
assert.Equal(t, "acc1", got.AppMetadata.WTAccountID)
|
|
}
|
|
|
|
func TestPocketID_GetAccount_WithPagination(t *testing.T) {
|
|
// Single page response with two users
|
|
client := &mockHTTPClient{code: 200, resBody: `{"data":[{"id":"u1","email":"e1","displayName":"n1"},{"id":"u2","email":"e2","displayName":"n2"}],"pagination":{"currentPage":1,"itemsPerPage":100,"totalItems":2,"totalPages":1}}`}
|
|
|
|
mgr, err := NewPocketIdManager(PocketIdClientConfig{APIToken: "tok", ManagementEndpoint: "http://localhost"}, nil)
|
|
require.NoError(t, err)
|
|
mgr.httpClient = client
|
|
|
|
users, err := mgr.GetAccount(context.Background(), "accX")
|
|
require.NoError(t, err)
|
|
require.Len(t, users, 2)
|
|
assert.Equal(t, "u1", users[0].ID)
|
|
assert.Equal(t, "accX", users[0].AppMetadata.WTAccountID)
|
|
assert.Equal(t, "u2", users[1].ID)
|
|
}
|
|
|
|
func TestPocketID_GetAllAccounts_WithPagination(t *testing.T) {
|
|
client := &mockHTTPClient{code: 200, resBody: `{"data":[{"id":"u1","email":"e1","displayName":"n1"},{"id":"u2","email":"e2","displayName":"n2"}],"pagination":{"currentPage":1,"itemsPerPage":100,"totalItems":2,"totalPages":1}}`}
|
|
|
|
mgr, err := NewPocketIdManager(PocketIdClientConfig{APIToken: "tok", ManagementEndpoint: "http://localhost"}, nil)
|
|
require.NoError(t, err)
|
|
mgr.httpClient = client
|
|
|
|
accounts, err := mgr.GetAllAccounts(context.Background())
|
|
require.NoError(t, err)
|
|
require.Len(t, accounts[UnsetAccountID], 2)
|
|
}
|
|
|
|
func TestPocketID_CreateUser(t *testing.T) {
|
|
client := &mockHTTPClient{code: 201, resBody: `{"id":"newid","email":"new@example.com","displayName":"New User"}`}
|
|
|
|
mgr, err := NewPocketIdManager(PocketIdClientConfig{APIToken: "tok", ManagementEndpoint: "http://localhost"}, nil)
|
|
require.NoError(t, err)
|
|
mgr.httpClient = client
|
|
|
|
ud, err := mgr.CreateUser(context.Background(), "new@example.com", "New User", "acc1", "inviter@example.com")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "newid", ud.ID)
|
|
assert.Equal(t, "new@example.com", ud.Email)
|
|
assert.Equal(t, "New User", ud.Name)
|
|
assert.Equal(t, "acc1", ud.AppMetadata.WTAccountID)
|
|
if assert.NotNil(t, ud.AppMetadata.WTPendingInvite) {
|
|
assert.True(t, *ud.AppMetadata.WTPendingInvite)
|
|
}
|
|
assert.Equal(t, "inviter@example.com", ud.AppMetadata.WTInvitedBy)
|
|
}
|
|
|
|
func TestPocketID_InviteAndDeleteUser(t *testing.T) {
|
|
// Same mock for both calls; returns OK with empty JSON
|
|
client := &mockHTTPClient{code: 200, resBody: `{}`}
|
|
|
|
mgr, err := NewPocketIdManager(PocketIdClientConfig{APIToken: "tok", ManagementEndpoint: "http://localhost"}, nil)
|
|
require.NoError(t, err)
|
|
mgr.httpClient = client
|
|
|
|
err = mgr.InviteUserByID(context.Background(), "u1")
|
|
require.NoError(t, err)
|
|
|
|
err = mgr.DeleteUser(context.Background(), "u1")
|
|
require.NoError(t, err)
|
|
}
|