diff --git a/pkg/api/common_test.go b/pkg/api/common_test.go index 993b5aa8e0f..7568fa0b75c 100644 --- a/pkg/api/common_test.go +++ b/pkg/api/common_test.go @@ -229,16 +229,16 @@ func setupAccessControlScenarioContext(t *testing.T, cfg *setting.Cfg, url strin cfg.IsFeatureToggleEnabled = features.IsEnabled cfg.Quota.Enabled = false - bus := bus.GetBus() + mockStore := sqlstore.InitTestDB(t) hs := &HTTPServer{ Cfg: cfg, - Bus: bus, + Bus: bus.GetBus(), Live: newTestLive(t), Features: features, QuotaService: "a.QuotaService{Cfg: cfg}, RouteRegister: routing.NewRouteRegister(), AccessControl: accesscontrolmock.New().WithPermissions(permissions), - searchUsersService: searchusers.ProvideUsersService(bus, filters.ProvideOSSSearchUserFilter()), + searchUsersService: searchusers.ProvideUsersService(mockStore, filters.ProvideOSSSearchUserFilter()), ldapGroups: ldap.ProvideGroupsService(), } @@ -349,8 +349,6 @@ func setupHTTPServerWithCfg(t *testing.T, useFakeAccessControl, enableAccessCont db := sqlstore.InitTestDB(t) db.Cfg = cfg - bus := bus.GetBus() - dashboardsStore := dashboardsstore.ProvideDashboardStore(db) routeRegister := routing.NewRouteRegister() @@ -358,12 +356,12 @@ func setupHTTPServerWithCfg(t *testing.T, useFakeAccessControl, enableAccessCont hs := &HTTPServer{ Cfg: cfg, Features: features, - Bus: bus, + Bus: bus.GetBus(), Live: newTestLive(t), QuotaService: "a.QuotaService{Cfg: cfg}, RouteRegister: routeRegister, SQLStore: db, - searchUsersService: searchusers.ProvideUsersService(bus, filters.ProvideOSSSearchUserFilter()), + searchUsersService: searchusers.ProvideUsersService(db, filters.ProvideOSSSearchUserFilter()), dashboardService: dashboardservice.ProvideDashboardService(dashboardsStore, nil), } diff --git a/pkg/api/user_test.go b/pkg/api/user_test.go index e52fcf09778..82bc8848827 100644 --- a/pkg/api/user_test.go +++ b/pkg/api/user_test.go @@ -148,92 +148,58 @@ func TestUserAPIEndpoint_userLoggedIn(t *testing.T) { }, mock) loggedInUserScenario(t, "When calling GET on", "/api/users", "/api/users", func(sc *scenarioContext) { - var sentLimit int - var sendPage int - bus.AddHandler("test", func(ctx context.Context, query *models.SearchUsersQuery) error { - query.Result = mockResult + mock.ExpectedSearchUsers = mockResult - sentLimit = query.Limit - sendPage = query.Page - - return nil - }) - - searchUsersService := searchusers.ProvideUsersService(bus.GetBus(), filters.ProvideOSSSearchUserFilter()) + searchUsersService := searchusers.ProvideUsersService(mock, filters.ProvideOSSSearchUserFilter()) sc.handlerFunc = searchUsersService.SearchUsers sc.fakeReqWithParams("GET", sc.url, map[string]string{}).exec() - assert.Equal(t, 1000, sentLimit) - assert.Equal(t, 1, sendPage) - respJSON, err := simplejson.NewJson(sc.resp.Body.Bytes()) require.NoError(t, err) + assert.Equal(t, 2, len(respJSON.MustArray())) }, mock) loggedInUserScenario(t, "When calling GET with page and limit querystring parameters on", "/api/users", "/api/users", func(sc *scenarioContext) { - var sentLimit int - var sendPage int - bus.AddHandler("test", func(ctx context.Context, query *models.SearchUsersQuery) error { - query.Result = mockResult + mock.ExpectedSearchUsers = mockResult - sentLimit = query.Limit - sendPage = query.Page - - return nil - }) - - searchUsersService := searchusers.ProvideUsersService(bus.GetBus(), filters.ProvideOSSSearchUserFilter()) + searchUsersService := searchusers.ProvideUsersService(mock, filters.ProvideOSSSearchUserFilter()) sc.handlerFunc = searchUsersService.SearchUsers sc.fakeReqWithParams("GET", sc.url, map[string]string{"perpage": "10", "page": "2"}).exec() - assert.Equal(t, 10, sentLimit) - assert.Equal(t, 2, sendPage) - }, mock) - - loggedInUserScenario(t, "When calling GET on", "/api/users/search", "/api/users/search", func(sc *scenarioContext) { - var sentLimit int - var sendPage int - bus.AddHandler("test", func(ctx context.Context, query *models.SearchUsersQuery) error { - query.Result = mockResult - - sentLimit = query.Limit - sendPage = query.Page - - return nil - }) - - searchUsersService := searchusers.ProvideUsersService(bus.GetBus(), filters.ProvideOSSSearchUserFilter()) - sc.handlerFunc = searchUsersService.SearchUsersWithPaging - sc.fakeReqWithParams("GET", sc.url, map[string]string{}).exec() - - assert.Equal(t, 1000, sentLimit) - assert.Equal(t, 1, sendPage) - respJSON, err := simplejson.NewJson(sc.resp.Body.Bytes()) require.NoError(t, err) + assert.Equal(t, 2, len(respJSON.MustArray())) + }, mock) + + loggedInUserScenario(t, "When calling GET on", "/api/users/search", "/api/users/search", func(sc *scenarioContext) { + mock.ExpectedSearchUsers = mockResult + + searchUsersService := searchusers.ProvideUsersService(mock, filters.ProvideOSSSearchUserFilter()) + sc.handlerFunc = searchUsersService.SearchUsersWithPaging + sc.fakeReqWithParams("GET", sc.url, map[string]string{}).exec() + + respJSON, err := simplejson.NewJson(sc.resp.Body.Bytes()) + require.NoError(t, err) + + assert.Equal(t, 1, respJSON.Get("page").MustInt()) + assert.Equal(t, 1000, respJSON.Get("perPage").MustInt()) assert.Equal(t, 2, respJSON.Get("totalCount").MustInt()) assert.Equal(t, 2, len(respJSON.Get("users").MustArray())) }, mock) loggedInUserScenario(t, "When calling GET with page and perpage querystring parameters on", "/api/users/search", "/api/users/search", func(sc *scenarioContext) { - var sentLimit int - var sendPage int - bus.AddHandler("test", func(ctx context.Context, query *models.SearchUsersQuery) error { - query.Result = mockResult + mock.ExpectedSearchUsers = mockResult - sentLimit = query.Limit - sendPage = query.Page - - return nil - }) - - searchUsersService := searchusers.ProvideUsersService(bus.GetBus(), filters.ProvideOSSSearchUserFilter()) + searchUsersService := searchusers.ProvideUsersService(mock, filters.ProvideOSSSearchUserFilter()) sc.handlerFunc = searchUsersService.SearchUsersWithPaging sc.fakeReqWithParams("GET", sc.url, map[string]string{"perpage": "10", "page": "2"}).exec() - assert.Equal(t, 10, sentLimit) - assert.Equal(t, 2, sendPage) + respJSON, err := simplejson.NewJson(sc.resp.Body.Bytes()) + require.NoError(t, err) + + assert.Equal(t, 2, respJSON.Get("page").MustInt()) + assert.Equal(t, 10, respJSON.Get("perPage").MustInt()) }, mock) } diff --git a/pkg/infra/usagestats/service/service.go b/pkg/infra/usagestats/service/service.go index 4f79d07d746..ceb8a321fbc 100644 --- a/pkg/infra/usagestats/service/service.go +++ b/pkg/infra/usagestats/service/service.go @@ -6,7 +6,6 @@ import ( "time" "github.com/grafana/grafana/pkg/api/routing" - "github.com/grafana/grafana/pkg/bus" "github.com/grafana/grafana/pkg/infra/kvstore" "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/infra/usagestats" @@ -33,7 +32,7 @@ type UsageStats struct { sendReportCallbacks []usagestats.SendReportCallbackFunc } -func ProvideService(cfg *setting.Cfg, bus bus.Bus, sqlStore *sqlstore.SQLStore, pluginStore plugins.Store, +func ProvideService(cfg *setting.Cfg, sqlStore *sqlstore.SQLStore, pluginStore plugins.Store, socialService social.Service, kvStore kvstore.KVStore, routeRegister routing.RouteRegister, ) *UsageStats { s := &UsageStats{ diff --git a/pkg/services/searchusers/searchusers.go b/pkg/services/searchusers/searchusers.go index c6fbfbc9402..79dc1b59196 100644 --- a/pkg/services/searchusers/searchusers.go +++ b/pkg/services/searchusers/searchusers.go @@ -3,8 +3,8 @@ package searchusers import ( "github.com/grafana/grafana/pkg/api/dtos" "github.com/grafana/grafana/pkg/api/response" - "github.com/grafana/grafana/pkg/bus" "github.com/grafana/grafana/pkg/models" + "github.com/grafana/grafana/pkg/services/sqlstore" ) type Service interface { @@ -13,12 +13,12 @@ type Service interface { } type OSSService struct { - bus bus.Bus + sqlStore sqlstore.Store searchUserFilter models.SearchUserFilter } -func ProvideUsersService(bus bus.Bus, searchUserFilter models.SearchUserFilter) *OSSService { - return &OSSService{bus: bus, searchUserFilter: searchUserFilter} +func ProvideUsersService(sqlStore sqlstore.Store, searchUserFilter models.SearchUserFilter) *OSSService { + return &OSSService{sqlStore: sqlStore, searchUserFilter: searchUserFilter} } func (s *OSSService) SearchUsers(c *models.ReqContext) response.Response { @@ -60,7 +60,7 @@ func (s *OSSService) SearchUser(c *models.ReqContext) (*models.SearchUsersQuery, } query := &models.SearchUsersQuery{Query: searchQuery, Filters: filters, Page: page, Limit: perPage} - if err := s.bus.Dispatch(c.Req.Context(), query); err != nil { + if err := s.sqlStore.SearchUsers(c.Req.Context(), query); err != nil { return nil, err } diff --git a/pkg/services/sqlstore/mockstore/mockstore.go b/pkg/services/sqlstore/mockstore/mockstore.go index 33d5c5f45bc..2490035c0df 100644 --- a/pkg/services/sqlstore/mockstore/mockstore.go +++ b/pkg/services/sqlstore/mockstore/mockstore.go @@ -30,6 +30,7 @@ type SQLStoreMock struct { ExpectedDashboardSnapshot *models.DashboardSnapshot ExpectedTeamsByUser []*models.TeamDTO ExpectedSearchOrgList []*models.OrgDTO + ExpectedSearchUsers models.SearchUserQueryResult ExpectedDatasources []*models.DataSource ExpectedOrg *models.Org ExpectedSystemStats *models.SystemStats @@ -193,6 +194,11 @@ func (m *SQLStoreMock) GetSignedInUser(ctx context.Context, query *models.GetSig return m.ExpectedError } +func (m *SQLStoreMock) SearchUsers(ctx context.Context, query *models.SearchUsersQuery) error { + query.Result = m.ExpectedSearchUsers + return m.ExpectedError +} + func (m *SQLStoreMock) DisableUser(ctx context.Context, cmd *models.DisableUserCommand) error { m.LatestUserId = cmd.UserId return m.ExpectedError diff --git a/pkg/services/sqlstore/store.go b/pkg/services/sqlstore/store.go index 82c6f104820..2e2dde3e988 100644 --- a/pkg/services/sqlstore/store.go +++ b/pkg/services/sqlstore/store.go @@ -42,6 +42,7 @@ type Store interface { GetUserOrgList(ctx context.Context, query *models.GetUserOrgListQuery) error GetSignedInUserWithCacheCtx(ctx context.Context, query *models.GetSignedInUserQuery) error GetSignedInUser(ctx context.Context, query *models.GetSignedInUserQuery) error + SearchUsers(ctx context.Context, query *models.SearchUsersQuery) error DisableUser(ctx context.Context, cmd *models.DisableUserCommand) error BatchDisableUsers(ctx context.Context, cmd *models.BatchDisableUsersCommand) error DeleteUser(ctx context.Context, cmd *models.DeleteUserCommand) error