From 9bbb7f67e0d2bb884d40d0064de0dfdb5c2f3966 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Wed, 21 Feb 2024 16:32:54 +0300 Subject: [PATCH] Chore: Move store interface to top level (#83153) * Chore: Move store interface to top level * Update store mock --- pkg/services/accesscontrol/accesscontrol.go | 10 +++++ pkg/services/accesscontrol/acimpl/service.go | 14 +------ .../accesscontrol/actest/store_mock.go | 41 +++++++++++++++---- 3 files changed, 44 insertions(+), 21 deletions(-) diff --git a/pkg/services/accesscontrol/accesscontrol.go b/pkg/services/accesscontrol/accesscontrol.go index cc0c60bc272..a4d61ed99c5 100644 --- a/pkg/services/accesscontrol/accesscontrol.go +++ b/pkg/services/accesscontrol/accesscontrol.go @@ -46,6 +46,16 @@ type Service interface { SyncUserRoles(ctx context.Context, orgID int64, cmd SyncUserRolesCommand) error } +//go:generate mockery --name Store --structname MockStore --outpkg actest --filename store_mock.go --output ./actest/ +type Store interface { + GetUserPermissions(ctx context.Context, query GetUserPermissionsQuery) ([]Permission, error) + SearchUsersPermissions(ctx context.Context, orgID int64, options SearchOptions) (map[int64][]Permission, error) + GetUsersBasicRoles(ctx context.Context, userFilter []int64, orgID int64) (map[int64][]string, error) + DeleteUserPermissions(ctx context.Context, orgID, userID int64) error + SaveExternalServiceRole(ctx context.Context, cmd SaveExternalServiceRoleCommand) error + DeleteExternalServiceRole(ctx context.Context, externalServiceID string) error +} + type RoleRegistry interface { // RegisterFixedRoles registers all roles declared to AccessControl RegisterFixedRoles(ctx context.Context) error diff --git a/pkg/services/accesscontrol/acimpl/service.go b/pkg/services/accesscontrol/acimpl/service.go index d6118feb16e..004e7005541 100644 --- a/pkg/services/accesscontrol/acimpl/service.go +++ b/pkg/services/accesscontrol/acimpl/service.go @@ -61,7 +61,7 @@ func ProvideService(cfg *setting.Cfg, db db.DB, routeRegister routing.RouteRegis return service, nil } -func ProvideOSSService(cfg *setting.Cfg, store store, cache *localcache.CacheService, features featuremgmt.FeatureToggles) *Service { +func ProvideOSSService(cfg *setting.Cfg, store accesscontrol.Store, cache *localcache.CacheService, features featuremgmt.FeatureToggles) *Service { s := &Service{ cache: cache, cfg: cfg, @@ -74,16 +74,6 @@ func ProvideOSSService(cfg *setting.Cfg, store store, cache *localcache.CacheSer return s } -//go:generate mockery --name store --structname MockStore --outpkg actest --filename store_mock.go --output ../actest/ -type store interface { - GetUserPermissions(ctx context.Context, query accesscontrol.GetUserPermissionsQuery) ([]accesscontrol.Permission, error) - SearchUsersPermissions(ctx context.Context, orgID int64, options accesscontrol.SearchOptions) (map[int64][]accesscontrol.Permission, error) - GetUsersBasicRoles(ctx context.Context, userFilter []int64, orgID int64) (map[int64][]string, error) - DeleteUserPermissions(ctx context.Context, orgID, userID int64) error - SaveExternalServiceRole(ctx context.Context, cmd accesscontrol.SaveExternalServiceRoleCommand) error - DeleteExternalServiceRole(ctx context.Context, externalServiceID string) error -} - // Service is the service implementing role based access control. type Service struct { cache *localcache.CacheService @@ -92,7 +82,7 @@ type Service struct { log log.Logger registrations accesscontrol.RegistrationList roles map[string]*accesscontrol.RoleDTO - store store + store accesscontrol.Store } func (s *Service) GetUsageStats(_ context.Context) map[string]any { diff --git a/pkg/services/accesscontrol/actest/store_mock.go b/pkg/services/accesscontrol/actest/store_mock.go index 6f38eea198a..12ef1560a84 100644 --- a/pkg/services/accesscontrol/actest/store_mock.go +++ b/pkg/services/accesscontrol/actest/store_mock.go @@ -1,16 +1,16 @@ -// Code generated by mockery v2.20.0. DO NOT EDIT. +// Code generated by mockery v2.42.0. DO NOT EDIT. package actest import ( - accesscontrol "github.com/grafana/grafana/pkg/services/accesscontrol" - context "context" + accesscontrol "github.com/grafana/grafana/pkg/services/accesscontrol" + mock "github.com/stretchr/testify/mock" ) -// MockStore is an autogenerated mock type for the store type +// MockStore is an autogenerated mock type for the Store type type MockStore struct { mock.Mock } @@ -19,6 +19,10 @@ type MockStore struct { func (_m *MockStore) DeleteExternalServiceRole(ctx context.Context, externalServiceID string) error { ret := _m.Called(ctx, externalServiceID) + if len(ret) == 0 { + panic("no return value specified for DeleteExternalServiceRole") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, string) error); ok { r0 = rf(ctx, externalServiceID) @@ -33,6 +37,10 @@ func (_m *MockStore) DeleteExternalServiceRole(ctx context.Context, externalServ func (_m *MockStore) DeleteUserPermissions(ctx context.Context, orgID int64, userID int64) error { ret := _m.Called(ctx, orgID, userID) + if len(ret) == 0 { + panic("no return value specified for DeleteUserPermissions") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, int64, int64) error); ok { r0 = rf(ctx, orgID, userID) @@ -47,6 +55,10 @@ func (_m *MockStore) DeleteUserPermissions(ctx context.Context, orgID int64, use func (_m *MockStore) GetUserPermissions(ctx context.Context, query accesscontrol.GetUserPermissionsQuery) ([]accesscontrol.Permission, error) { ret := _m.Called(ctx, query) + if len(ret) == 0 { + panic("no return value specified for GetUserPermissions") + } + var r0 []accesscontrol.Permission var r1 error if rf, ok := ret.Get(0).(func(context.Context, accesscontrol.GetUserPermissionsQuery) ([]accesscontrol.Permission, error)); ok { @@ -73,6 +85,10 @@ func (_m *MockStore) GetUserPermissions(ctx context.Context, query accesscontrol func (_m *MockStore) GetUsersBasicRoles(ctx context.Context, userFilter []int64, orgID int64) (map[int64][]string, error) { ret := _m.Called(ctx, userFilter, orgID) + if len(ret) == 0 { + panic("no return value specified for GetUsersBasicRoles") + } + var r0 map[int64][]string var r1 error if rf, ok := ret.Get(0).(func(context.Context, []int64, int64) (map[int64][]string, error)); ok { @@ -99,6 +115,10 @@ func (_m *MockStore) GetUsersBasicRoles(ctx context.Context, userFilter []int64, func (_m *MockStore) SaveExternalServiceRole(ctx context.Context, cmd accesscontrol.SaveExternalServiceRoleCommand) error { ret := _m.Called(ctx, cmd) + if len(ret) == 0 { + panic("no return value specified for SaveExternalServiceRole") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, accesscontrol.SaveExternalServiceRoleCommand) error); ok { r0 = rf(ctx, cmd) @@ -113,6 +133,10 @@ func (_m *MockStore) SaveExternalServiceRole(ctx context.Context, cmd accesscont func (_m *MockStore) SearchUsersPermissions(ctx context.Context, orgID int64, options accesscontrol.SearchOptions) (map[int64][]accesscontrol.Permission, error) { ret := _m.Called(ctx, orgID, options) + if len(ret) == 0 { + panic("no return value specified for SearchUsersPermissions") + } + var r0 map[int64][]accesscontrol.Permission var r1 error if rf, ok := ret.Get(0).(func(context.Context, int64, accesscontrol.SearchOptions) (map[int64][]accesscontrol.Permission, error)); ok { @@ -135,13 +159,12 @@ func (_m *MockStore) SearchUsersPermissions(ctx context.Context, orgID int64, op return r0, r1 } -type mockConstructorTestingTNewMockStore interface { +// NewMockStore creates a new instance of MockStore. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockStore(t interface { mock.TestingT Cleanup(func()) -} - -// NewMockStore creates a new instance of MockStore. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -func NewMockStore(t mockConstructorTestingTNewMockStore) *MockStore { +}) *MockStore { mock := &MockStore{} mock.Mock.Test(t)