mirror of
https://github.com/grafana/grafana.git
synced 2026-07-30 00:08:10 -05:00
Remove the bus from teamgroupsync (#29810)
* Add fake TeamSyncService * Change SyncTeams dispatch to direct method call * Remove SyncTeamsCommand struct * Move TeamSyncService to a separate package * Remove context from SyncTeams args * Add comments to teamsyncgroup package Co-authored-by: Emil Tullstedt <emil.tullstedt@grafana.com> * Replace TeamSyncService with TeamSyncFunc * Remove unnecessary error check * Add a test * Fix test input Co-authored-by: Emil Tullstedt <emil.tullstedt@grafana.com>
This commit is contained in:
co-authored by
Emil Tullstedt
parent
12211e4a8e
commit
551f96089b
@@ -122,8 +122,3 @@ type GetTeamsForLDAPGroupCommand struct {
|
||||
Groups []string
|
||||
Result []TeamOrgGroupDTO
|
||||
}
|
||||
|
||||
type SyncTeamsCommand struct {
|
||||
ExternalUser *ExternalUserInfo
|
||||
User *User
|
||||
}
|
||||
|
||||
@@ -18,9 +18,12 @@ var (
|
||||
logger = log.New("login.ext_user")
|
||||
)
|
||||
|
||||
type TeamSyncFunc func(user *models.User, externalUser *models.ExternalUserInfo) error
|
||||
|
||||
type LoginService struct {
|
||||
Bus bus.Bus `inject:""`
|
||||
QuotaService *quota.QuotaService `inject:""`
|
||||
TeamSync TeamSyncFunc
|
||||
}
|
||||
|
||||
func (ls *LoginService) Init() error {
|
||||
@@ -109,12 +112,11 @@ func (ls *LoginService) UpsertUser(cmd *models.UpsertUserCommand) error {
|
||||
}
|
||||
}
|
||||
|
||||
err := ls.Bus.Dispatch(&models.SyncTeamsCommand{
|
||||
User: cmd.Result,
|
||||
ExternalUser: extUser,
|
||||
})
|
||||
if err != nil && !errors.Is(err, bus.ErrHandlerNotFound) {
|
||||
return err
|
||||
if ls.TeamSync != nil {
|
||||
err := ls.TeamSync(cmd.Result, extUser)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package login
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"github.com/grafana/grafana/pkg/bus"
|
||||
"github.com/grafana/grafana/pkg/models"
|
||||
"github.com/grafana/grafana/pkg/services/quota"
|
||||
log "github.com/inconshreveable/log15"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
@@ -74,6 +76,60 @@ func Test_syncOrgRoles_whenTryingToRemoveLastOrgLogsError(t *testing.T) {
|
||||
assert.Contains(t, logs, models.ErrLastOrgAdmin.Error())
|
||||
}
|
||||
|
||||
func Test_teamSync(t *testing.T) {
|
||||
login := LoginService{
|
||||
Bus: bus.New(),
|
||||
QuotaService: "a.QuotaService{},
|
||||
}
|
||||
|
||||
upserCmd := &models.UpsertUserCommand{ExternalUser: &models.ExternalUserInfo{Email: "test_user@example.org"}}
|
||||
expectedUser := &models.User{
|
||||
Id: 1,
|
||||
Email: "test_user@example.org",
|
||||
Name: "test_user",
|
||||
Login: "test_user",
|
||||
}
|
||||
|
||||
bus.ClearBusHandlers()
|
||||
t.Cleanup(func() { bus.ClearBusHandlers() })
|
||||
bus.AddHandler("test", func(query *models.GetUserByAuthInfoQuery) error {
|
||||
query.Result = expectedUser
|
||||
return nil
|
||||
})
|
||||
|
||||
var actualUser *models.User
|
||||
var actualExternalUser *models.ExternalUserInfo
|
||||
|
||||
t.Run("login.TeamSync should not be called when nil", func(t *testing.T) {
|
||||
err := login.UpsertUser(upserCmd)
|
||||
require.Nil(t, err)
|
||||
assert.Nil(t, actualUser)
|
||||
assert.Nil(t, actualExternalUser)
|
||||
|
||||
t.Run("login.TeamSync should be called when not nil", func(t *testing.T) {
|
||||
teamSyncFunc := func(user *models.User, externalUser *models.ExternalUserInfo) error {
|
||||
actualUser = user
|
||||
actualExternalUser = externalUser
|
||||
return nil
|
||||
}
|
||||
login.TeamSync = teamSyncFunc
|
||||
err := login.UpsertUser(upserCmd)
|
||||
require.Nil(t, err)
|
||||
assert.Equal(t, actualUser, expectedUser)
|
||||
assert.Equal(t, actualExternalUser, upserCmd.ExternalUser)
|
||||
})
|
||||
|
||||
t.Run("login.TeamSync should propagate its errors to the caller", func(t *testing.T) {
|
||||
teamSyncFunc := func(user *models.User, externalUser *models.ExternalUserInfo) error {
|
||||
return errors.New("teamsync test error")
|
||||
}
|
||||
login.TeamSync = teamSyncFunc
|
||||
err := login.UpsertUser(upserCmd)
|
||||
require.Error(t, err)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func createSimpleUser() models.User {
|
||||
user := models.User{
|
||||
Id: 1,
|
||||
|
||||
Reference in New Issue
Block a user