Files
grafana/apps/advisor/pkg/app/checks/authchecks/check_test.go
T
2025-05-19 15:15:20 +02:00

106 lines
3.1 KiB
Go

package authchecks
import (
"context"
"errors"
"testing"
"github.com/grafana/grafana/pkg/services/ssosettings"
"github.com/grafana/grafana/pkg/services/ssosettings/models"
"github.com/grafana/grafana/pkg/services/ssosettings/ssosettingstests" // Correct import path for the mock
"github.com/stretchr/testify/require"
)
func TestCheck_ID(t *testing.T) {
mockService := ssosettingstests.NewMockService(t)
c := New(mockService)
require.Equal(t, CheckID, c.ID())
}
func TestCheck_Items(t *testing.T) {
ctx := context.Background()
t.Run("Success", func(t *testing.T) {
mockService := ssosettingstests.NewMockService(t)
expectedSettings := []*models.SSOSettings{
{Provider: "google", Settings: map[string]any{"client_id": "id1"}},
{Provider: "github", Settings: map[string]any{"client_id": "id2"}},
}
mockService.On("ListWithRedactedSecrets", ctx).Return(expectedSettings, nil)
c := New(mockService)
items, err := c.Items(ctx)
require.NoError(t, err)
require.Len(t, items, len(expectedSettings))
actualSettings := make([]*models.SSOSettings, len(items))
for i, item := range items {
setting, ok := item.(*models.SSOSettings)
require.True(t, ok, "Item should be of type *models.SSOSettings")
actualSettings[i] = setting
}
require.Equal(t, expectedSettings, actualSettings)
})
t.Run("Error from service", func(t *testing.T) {
mockService := ssosettingstests.NewMockService(t)
expectedErr := errors.New("database error")
mockService.On("ListWithRedactedSecrets", ctx).Return(nil, expectedErr)
c := New(mockService)
items, err := c.Items(ctx)
require.Error(t, err)
require.Nil(t, items)
require.ErrorContains(t, err, "failed to list SSO settings")
require.ErrorIs(t, err, expectedErr)
})
}
func TestCheck_Item(t *testing.T) {
ctx := context.Background()
providerID := "google"
t.Run("Success", func(t *testing.T) {
mockService := ssosettingstests.NewMockService(t)
expectedSetting := &models.SSOSettings{
Provider: providerID,
Settings: map[string]any{"client_id": "id1"},
}
mockService.On("GetForProviderWithRedactedSecrets", ctx, providerID).Return(expectedSetting, nil)
c := New(mockService)
item, err := c.Item(ctx, providerID)
require.NoError(t, err)
require.NotNil(t, item)
actualSetting, ok := item.(*models.SSOSettings)
require.True(t, ok, "Item should be of type *models.SSOSettings")
require.Equal(t, expectedSetting, actualSetting)
})
t.Run("Error from service", func(t *testing.T) {
mockService := ssosettingstests.NewMockService(t)
expectedErr := errors.New("not found")
mockService.On("GetForProviderWithRedactedSecrets", ctx, providerID).Return(nil, expectedErr)
c := New(mockService)
item, err := c.Item(ctx, providerID)
require.Error(t, err)
require.Nil(t, item)
require.ErrorIs(t, err, expectedErr)
})
t.Run("should return nil when sso settings are not found", func(t *testing.T) {
mockService := ssosettingstests.NewMockService(t)
mockService.On("GetForProviderWithRedactedSecrets", ctx, providerID).Return(nil, ssosettings.ErrNotFound)
c := New(mockService)
item, err := c.Item(ctx, providerID)
require.NoError(t, err)
require.Nil(t, item)
})
}