diff --git a/pkg/api/common_test.go b/pkg/api/common_test.go index 18986610b82..84b913a0437 100644 --- a/pkg/api/common_test.go +++ b/pkg/api/common_test.go @@ -34,6 +34,7 @@ import ( "github.com/grafana/grafana/pkg/services/ldap" "github.com/grafana/grafana/pkg/services/login/loginservice" "github.com/grafana/grafana/pkg/services/login/logintest" + "github.com/grafana/grafana/pkg/services/preference/preftest" "github.com/grafana/grafana/pkg/services/quota" "github.com/grafana/grafana/pkg/services/rendering" "github.com/grafana/grafana/pkg/services/searchusers" @@ -381,6 +382,7 @@ func setupHTTPServerWithCfgDb(t *testing.T, useFakeAccessControl, enableAccessCo SQLStore: store, searchUsersService: searchusers.ProvideUsersService(db, filters.ProvideOSSSearchUserFilter()), dashboardService: dashboardservice.ProvideDashboardService(cfg, dashboardsStore, nil, features, accesscontrolmock.NewPermissionsServicesMock()), + preferenceService: preftest.NewPreferenceServiceFake(), } // Defining the accesscontrol service has to be done before registering routes diff --git a/pkg/api/dashboard.go b/pkg/api/dashboard.go index 791a30172ce..fccd521269f 100644 --- a/pkg/api/dashboard.go +++ b/pkg/api/dashboard.go @@ -21,6 +21,7 @@ import ( "github.com/grafana/grafana/pkg/services/alerting" "github.com/grafana/grafana/pkg/services/dashboards" "github.com/grafana/grafana/pkg/services/guardian" + pref "github.com/grafana/grafana/pkg/services/preference" "github.com/grafana/grafana/pkg/util" "github.com/grafana/grafana/pkg/web" ) @@ -408,20 +409,21 @@ func (hs *HTTPServer) postDashboard(c *models.ReqContext, cmd models.SaveDashboa // GetHomeDashboard returns the home dashboard. func (hs *HTTPServer) GetHomeDashboard(c *models.ReqContext) response.Response { - prefsQuery := models.GetPreferencesWithDefaultsQuery{User: c.SignedInUser} + prefsQuery := pref.GetPreferenceWithDefaultsQuery{UserID: c.SignedInUser.UserId} homePage := hs.Cfg.HomePage - if err := hs.SQLStore.GetPreferencesWithDefaults(c.Req.Context(), &prefsQuery); err != nil { + preference, err := hs.preferenceService.GetWithDefaults(c.Req.Context(), &prefsQuery) + if err != nil { return response.Error(500, "Failed to get preferences", err) } - if prefsQuery.Result.HomeDashboardId == 0 && len(homePage) > 0 { + if preference.HomeDashboardID == 0 && len(homePage) > 0 { homePageRedirect := dtos.DashboardRedirect{RedirectUri: homePage} return response.JSON(http.StatusOK, &homePageRedirect) } - if prefsQuery.Result.HomeDashboardId != 0 { - slugQuery := models.GetDashboardRefByIdQuery{Id: prefsQuery.Result.HomeDashboardId} + if preference.HomeDashboardID != 0 { + slugQuery := models.GetDashboardRefByIdQuery{Id: preference.HomeDashboardID} err := hs.SQLStore.GetDashboardUIDById(c.Req.Context(), &slugQuery) if err == nil { url := models.GetDashboardUrl(slugQuery.Result.Uid, slugQuery.Result.Slug) diff --git a/pkg/api/dashboard_test.go b/pkg/api/dashboard_test.go index 0a3735e284a..a0f7f4fbc34 100644 --- a/pkg/api/dashboard_test.go +++ b/pkg/api/dashboard_test.go @@ -28,6 +28,8 @@ import ( "github.com/grafana/grafana/pkg/services/guardian" "github.com/grafana/grafana/pkg/services/libraryelements" "github.com/grafana/grafana/pkg/services/live" + pref "github.com/grafana/grafana/pkg/services/preference" + "github.com/grafana/grafana/pkg/services/preference/preftest" "github.com/grafana/grafana/pkg/services/provisioning" "github.com/grafana/grafana/pkg/services/quota" "github.com/grafana/grafana/pkg/services/sqlstore" @@ -43,11 +45,13 @@ func TestGetHomeDashboard(t *testing.T) { req := &models.ReqContext{SignedInUser: &models.SignedInUser{}, Context: &web.Context{Req: httpReq}} cfg := setting.NewCfg() cfg.StaticRootPath = "../../public/" + prefService := preftest.NewPreferenceServiceFake() hs := &HTTPServer{ - Cfg: cfg, - pluginStore: &fakePluginStore{}, - SQLStore: mockstore.NewSQLStoreMock(), + Cfg: cfg, + pluginStore: &fakePluginStore{}, + SQLStore: mockstore.NewSQLStoreMock(), + preferenceService: prefService, } tests := []struct { @@ -71,6 +75,8 @@ func TestGetHomeDashboard(t *testing.T) { bytes, err := simplejson.NewJson(homeDashJSON) require.NoError(t, err, "must be able to encode file as JSON") + prefService.ExpectedPreference = &pref.Preference{} + dash.Dashboard = bytes b, err := json.Marshal(dash) diff --git a/pkg/api/dtos/prefs.go b/pkg/api/dtos/prefs.go index e8f929e6da4..08ef64b6df5 100644 --- a/pkg/api/dtos/prefs.go +++ b/pkg/api/dtos/prefs.go @@ -1,14 +1,17 @@ package dtos -import "github.com/grafana/grafana/pkg/models" +import ( + "github.com/grafana/grafana/pkg/models" + pref "github.com/grafana/grafana/pkg/services/preference" +) type Prefs struct { - Theme string `json:"theme"` - HomeDashboardID int64 `json:"homeDashboardId"` - Timezone string `json:"timezone"` - WeekStart string `json:"weekStart"` - Navbar models.NavbarPreference `json:"navbar,omitempty"` - QueryHistory models.QueryHistoryPreference `json:"queryHistory,omitempty"` + Theme string `json:"theme"` + HomeDashboardID int64 `json:"homeDashboardId"` + Timezone string `json:"timezone"` + WeekStart string `json:"weekStart"` + Navbar pref.NavbarPreference `json:"navbar,omitempty"` + QueryHistory pref.QueryHistoryPreference `json:"queryHistory,omitempty"` } // swagger:model @@ -33,8 +36,8 @@ type PatchPrefsCmd struct { // Default:0 HomeDashboardID *int64 `json:"homeDashboardId,omitempty"` // Enum: utc,browser - Timezone *string `json:"timezone,omitempty"` - WeekStart *string `json:"weekStart,omitempty"` - Navbar *models.NavbarPreference `json:"navbar,omitempty"` - QueryHistory *models.QueryHistoryPreference `json:"queryHistory,omitempty"` + Timezone *string `json:"timezone,omitempty"` + WeekStart *string `json:"weekStart,omitempty"` + Navbar *pref.NavbarPreference `json:"navbar,omitempty"` + QueryHistory *pref.QueryHistoryPreference `json:"queryHistory,omitempty"` } diff --git a/pkg/api/http_server.go b/pkg/api/http_server.go index a2ff9d8e6d9..5491b86d316 100644 --- a/pkg/api/http_server.go +++ b/pkg/api/http_server.go @@ -51,6 +51,7 @@ import ( "github.com/grafana/grafana/pkg/services/notifications" "github.com/grafana/grafana/pkg/services/plugindashboards" pluginSettings "github.com/grafana/grafana/pkg/services/pluginsettings/service" + pref "github.com/grafana/grafana/pkg/services/preference" "github.com/grafana/grafana/pkg/services/provisioning" "github.com/grafana/grafana/pkg/services/query" "github.com/grafana/grafana/pkg/services/queryhistory" @@ -147,6 +148,7 @@ type HTTPServer struct { DashboardsnapshotsService *dashboardsnapshots.Service PluginSettings *pluginSettings.Service AvatarCacheServer *avatar.AvatarCacheServer + preferenceService pref.Service } type ServerOptions struct { @@ -178,7 +180,7 @@ func ProvideHTTPServer(opts ServerOptions, cfg *setting.Cfg, routeRegister routi dashboardProvisioningService dashboards.DashboardProvisioningService, folderService dashboards.FolderService, datasourcePermissionsService permissions.DatasourcePermissionsService, alertNotificationService *alerting.AlertNotificationService, dashboardsnapshotsService *dashboardsnapshots.Service, commentsService *comments.Service, pluginSettings *pluginSettings.Service, - avatarCacheServer *avatar.AvatarCacheServer, + avatarCacheServer *avatar.AvatarCacheServer, preferenceService pref.Service, ) (*HTTPServer, error) { web.Env = cfg.Env m := web.New() @@ -251,6 +253,7 @@ func ProvideHTTPServer(opts ServerOptions, cfg *setting.Cfg, routeRegister routi PluginSettings: pluginSettings, permissionServices: permissionsServices, AvatarCacheServer: avatarCacheServer, + preferenceService: preferenceService, } if hs.Listener != nil { hs.log.Debug("Using provided listener") diff --git a/pkg/api/index.go b/pkg/api/index.go index be301fb4d7c..bc3b400037e 100644 --- a/pkg/api/index.go +++ b/pkg/api/index.go @@ -15,6 +15,7 @@ import ( "github.com/grafana/grafana/pkg/services/dashboards" "github.com/grafana/grafana/pkg/services/datasources" "github.com/grafana/grafana/pkg/services/featuremgmt" + pref "github.com/grafana/grafana/pkg/services/preference" "github.com/grafana/grafana/pkg/setting" ) @@ -414,16 +415,17 @@ func (hs *HTTPServer) buildSavedItemsNavLinks(c *models.ReqContext) ([]*dtos.Nav savedItemsChildNavs := []*dtos.NavLink{} // query preferences table for any saved items - prefsQuery := models.GetPreferencesWithDefaultsQuery{User: c.SignedInUser} - if err := hs.SQLStore.GetPreferencesWithDefaults(c.Req.Context(), &prefsQuery); err != nil { + prefsQuery := pref.GetPreferenceWithDefaultsQuery{UserID: c.SignedInUser.UserId} + preference, err := hs.preferenceService.GetWithDefaults(c.Req.Context(), &prefsQuery) + if err != nil { return nil, err } - savedItems := prefsQuery.Result.JsonData.Navbar.SavedItems + savedItems := preference.JSONData.Navbar.SavedItems if len(savedItems) > 0 { for _, savedItem := range savedItems { savedItemsChildNavs = append(savedItemsChildNavs, &dtos.NavLink{ - Id: savedItem.Id, + Id: savedItem.ID, Text: savedItem.Text, Url: savedItem.Url, Target: savedItem.Target, @@ -663,11 +665,11 @@ func (hs *HTTPServer) setIndexViewData(c *models.ReqContext) (*dtos.IndexViewDat settings["dateFormats"] = hs.Cfg.DateFormats - prefsQuery := models.GetPreferencesWithDefaultsQuery{User: c.SignedInUser} - if err := hs.SQLStore.GetPreferencesWithDefaults(c.Req.Context(), &prefsQuery); err != nil { + prefsQuery := pref.GetPreferenceWithDefaultsQuery{UserID: c.SignedInUser.UserId} + prefs, err := hs.preferenceService.GetWithDefaults(c.Req.Context(), &prefsQuery) + if err != nil { return nil, err } - prefs := prefsQuery.Result // Read locale from accept-language acceptLang := c.Req.Header.Get("Accept-Language") diff --git a/pkg/api/preferences.go b/pkg/api/preferences.go index 3792bee5a90..e95003bdff6 100644 --- a/pkg/api/preferences.go +++ b/pkg/api/preferences.go @@ -7,6 +7,7 @@ import ( "github.com/grafana/grafana/pkg/api/dtos" "github.com/grafana/grafana/pkg/api/response" "github.com/grafana/grafana/pkg/models" + pref "github.com/grafana/grafana/pkg/services/preference" "github.com/grafana/grafana/pkg/web" ) @@ -18,14 +19,14 @@ const ( // POST /api/preferences/set-home-dash func (hs *HTTPServer) SetHomeDashboard(c *models.ReqContext) response.Response { - cmd := models.SavePreferencesCommand{} + cmd := pref.SavePreferenceCommand{} if err := web.Bind(c.Req, &cmd); err != nil { return response.Error(http.StatusBadRequest, "bad request data", err) } - cmd.UserId = c.UserId - cmd.OrgId = c.OrgId + cmd.UserID = c.UserId + cmd.OrgID = c.OrgId - if err := hs.SQLStore.SavePreferences(c.Req.Context(), &cmd); err != nil { + if err := hs.preferenceService.Save(c.Req.Context(), &cmd); err != nil { return response.Error(500, "Failed to set home dashboard", err) } @@ -38,22 +39,23 @@ func (hs *HTTPServer) GetUserPreferences(c *models.ReqContext) response.Response } func (hs *HTTPServer) getPreferencesFor(ctx context.Context, orgID, userID, teamID int64) response.Response { - prefsQuery := models.GetPreferencesQuery{UserId: userID, OrgId: orgID, TeamId: teamID} + prefsQuery := pref.GetPreferenceQuery{UserID: userID, OrgID: orgID, TeamID: teamID} - if err := hs.SQLStore.GetPreferences(ctx, &prefsQuery); err != nil { + preference, err := hs.preferenceService.Get(ctx, &prefsQuery) + if err != nil { return response.Error(500, "Failed to get preferences", err) } dto := dtos.Prefs{ - Theme: prefsQuery.Result.Theme, - HomeDashboardID: prefsQuery.Result.HomeDashboardId, - Timezone: prefsQuery.Result.Timezone, - WeekStart: prefsQuery.Result.WeekStart, + Theme: preference.Theme, + HomeDashboardID: preference.HomeDashboardID, + Timezone: preference.Timezone, + WeekStart: preference.WeekStart, } - if prefsQuery.Result.JsonData != nil { - dto.Navbar = prefsQuery.Result.JsonData.Navbar - dto.QueryHistory = prefsQuery.Result.JsonData.QueryHistory + if preference.JSONData != nil { + dto.Navbar = preference.JSONData.Navbar + dto.QueryHistory = preference.JSONData.QueryHistory } return response.JSON(http.StatusOK, &dto) @@ -72,17 +74,17 @@ func (hs *HTTPServer) updatePreferencesFor(ctx context.Context, orgID, userID, t if dtoCmd.Theme != lightTheme && dtoCmd.Theme != darkTheme && dtoCmd.Theme != defaultTheme { return response.Error(400, "Invalid theme", nil) } - saveCmd := models.SavePreferencesCommand{ - UserId: userID, - OrgId: orgID, - TeamId: teamId, + saveCmd := pref.SavePreferenceCommand{ + UserID: userID, + OrgID: orgID, + TeamID: teamId, Theme: dtoCmd.Theme, Timezone: dtoCmd.Timezone, WeekStart: dtoCmd.WeekStart, - HomeDashboardId: dtoCmd.HomeDashboardID, + HomeDashboardID: dtoCmd.HomeDashboardID, } - if err := hs.SQLStore.SavePreferences(ctx, &saveCmd); err != nil { + if err := hs.preferenceService.Save(ctx, &saveCmd); err != nil { return response.Error(500, "Failed to save preferences", err) } @@ -102,19 +104,19 @@ func (hs *HTTPServer) patchPreferencesFor(ctx context.Context, orgID, userID, te if dtoCmd.Theme != nil && *dtoCmd.Theme != lightTheme && *dtoCmd.Theme != darkTheme && *dtoCmd.Theme != defaultTheme { return response.Error(400, "Invalid theme", nil) } - patchCmd := models.PatchPreferencesCommand{ - UserId: userID, - OrgId: orgID, - TeamId: teamId, + patchCmd := pref.PatchPreferenceCommand{ + UserID: userID, + OrgID: orgID, + TeamID: teamId, Theme: dtoCmd.Theme, Timezone: dtoCmd.Timezone, WeekStart: dtoCmd.WeekStart, - HomeDashboardId: dtoCmd.HomeDashboardID, + HomeDashboardID: dtoCmd.HomeDashboardID, Navbar: dtoCmd.Navbar, QueryHistory: dtoCmd.QueryHistory, } - if err := hs.SQLStore.PatchPreferences(ctx, &patchCmd); err != nil { + if err := hs.preferenceService.Patch(ctx, &patchCmd); err != nil { return response.Error(500, "Failed to save preferences", err) } diff --git a/pkg/api/preferences_test.go b/pkg/api/preferences_test.go index 98cb46f14dd..4a52fb0fd97 100644 --- a/pkg/api/preferences_test.go +++ b/pkg/api/preferences_test.go @@ -6,6 +6,8 @@ import ( "testing" "github.com/grafana/grafana/pkg/services/accesscontrol" + pref "github.com/grafana/grafana/pkg/services/preference" + "github.com/grafana/grafana/pkg/services/preference/preftest" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -25,6 +27,9 @@ var ( func TestAPIEndpoint_GetCurrentOrgPreferences_LegacyAccessControl(t *testing.T) { sc := setupHTTPServer(t, true, false) + prefService := preftest.NewPreferenceServiceFake() + prefService.ExpectedPreference = &pref.Preference{HomeDashboardID: 1, Theme: "dark"} + sc.hs.preferenceService = prefService _, err := sc.db.CreateOrgWithMember("TestOrg", testUserID) require.NoError(t, err) @@ -46,6 +51,10 @@ func TestAPIEndpoint_GetCurrentOrgPreferences_AccessControl(t *testing.T) { sc := setupHTTPServer(t, true, true) setInitCtxSignedInViewer(sc.initCtx) + prefService := preftest.NewPreferenceServiceFake() + prefService.ExpectedPreference = &pref.Preference{HomeDashboardID: 1, Theme: "dark"} + sc.hs.preferenceService = prefService + _, err := sc.db.CreateOrgWithMember("TestOrg", testUserID) require.NoError(t, err) diff --git a/pkg/api/team_test.go b/pkg/api/team_test.go index 9d6aec736ca..90fc4a24e91 100644 --- a/pkg/api/team_test.go +++ b/pkg/api/team_test.go @@ -11,6 +11,8 @@ import ( "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/services/accesscontrol" + pref "github.com/grafana/grafana/pkg/services/preference" + "github.com/grafana/grafana/pkg/services/preference/preftest" "github.com/grafana/grafana/pkg/services/sqlstore" "github.com/grafana/grafana/pkg/services/sqlstore/mockstore" "github.com/grafana/grafana/pkg/setting" @@ -375,6 +377,10 @@ func TestTeamAPIEndpoint_GetTeamPreferences_RBAC(t *testing.T) { sc.db = sqlstore.InitTestDB(t) _, err := sc.db.CreateTeam("team1", "", 1) + prefService := preftest.NewPreferenceServiceFake() + prefService.ExpectedPreference = &pref.Preference{} + sc.hs.preferenceService = prefService + require.NoError(t, err) setInitCtxSignedInViewer(sc.initCtx) @@ -398,7 +404,13 @@ func TestTeamAPIEndpoint_GetTeamPreferences_RBAC(t *testing.T) { // else return 403 func TestTeamAPIEndpoint_UpdateTeamPreferences_RBAC(t *testing.T) { sc := setupHTTPServer(t, true, true) - sc.db = sqlstore.InitTestDB(t) + sqlStore := sqlstore.InitTestDB(t) + sc.db = sqlStore + + prefService := preftest.NewPreferenceServiceFake() + prefService.ExpectedPreference = &pref.Preference{Theme: "dark"} + sc.hs.preferenceService = prefService + _, err := sc.db.CreateTeam("team1", "", 1) require.NoError(t, err) @@ -411,10 +423,10 @@ func TestTeamAPIEndpoint_UpdateTeamPreferences_RBAC(t *testing.T) { response := callAPI(sc.server, http.MethodPut, fmt.Sprintf(detailTeamPreferenceURL, 1), input, t) assert.Equal(t, http.StatusOK, response.Code) - prefQuery := &models.GetPreferencesQuery{OrgId: 1, TeamId: 1, Result: &models.Preferences{}} - err := sc.db.GetPreferences(context.Background(), prefQuery) + prefQuery := &pref.GetPreferenceQuery{OrgID: 1, TeamID: 1} + preference, err := prefService.Get(context.Background(), prefQuery) require.NoError(t, err) - assert.Equal(t, "dark", prefQuery.Result.Theme) + assert.Equal(t, "dark", preference.Theme) }) input = strings.NewReader(teamPreferenceCmdLight) @@ -423,9 +435,9 @@ func TestTeamAPIEndpoint_UpdateTeamPreferences_RBAC(t *testing.T) { response := callAPI(sc.server, http.MethodPut, fmt.Sprintf(detailTeamPreferenceURL, 1), input, t) assert.Equal(t, http.StatusForbidden, response.Code) - prefQuery := &models.GetPreferencesQuery{OrgId: 1, TeamId: 1, Result: &models.Preferences{}} - err := sc.db.GetPreferences(context.Background(), prefQuery) + prefQuery := &pref.GetPreferenceQuery{OrgID: 1, TeamID: 1} + preference, err := prefService.Get(context.Background(), prefQuery) assert.NoError(t, err) - assert.Equal(t, "dark", prefQuery.Result.Theme) + assert.Equal(t, "dark", preference.Theme) }) } diff --git a/pkg/server/wire.go b/pkg/server/wire.go index 83233cf0170..ca33eb3eac2 100644 --- a/pkg/server/wire.go +++ b/pkg/server/wire.go @@ -239,7 +239,6 @@ var wireBasicSet = wire.NewSet( wire.Bind(new(alerting.DashAlertExtractor), new(*alerting.DashAlertExtractorService)), comments.ProvideService, guardian.ProvideService, - prefimpl.ProvideService, avatar.ProvideAvatarCacheServer, authproxy.ProvideAuthProxy, statscollector.ProvideService, @@ -261,6 +260,7 @@ var wireSet = wire.NewSet( wire.Bind(new(notifications.EmailSender), new(*notifications.NotificationService)), wire.Bind(new(sqlstore.Store), new(*sqlstore.SQLStore)), wire.Bind(new(db.DB), new(*sqlstore.SQLStore)), + prefimpl.ProvideService, ) var wireTestSet = wire.NewSet( @@ -278,6 +278,8 @@ var wireTestSet = wire.NewSet( wire.Bind(new(notifications.EmailSender), new(*notifications.NotificationServiceMock)), mockstore.NewSQLStoreMock, wire.Bind(new(sqlstore.Store), new(*sqlstore.SQLStore)), + wire.Bind(new(db.DB), new(*sqlstore.SQLStore)), + prefimpl.ProvideService, ) func Initialize(cla setting.CommandLineArgs, opts Options, apiOpts api.ServerOptions) (*Server, error) { diff --git a/pkg/services/preference/prefimpl/pref.go b/pkg/services/preference/prefimpl/pref.go index c43fb7d98c5..bf78d8d34a4 100644 --- a/pkg/services/preference/prefimpl/pref.go +++ b/pkg/services/preference/prefimpl/pref.go @@ -15,7 +15,7 @@ type Service struct { cfg *setting.Cfg } -func ProvideService(db db.DB, cfg *setting.Cfg) *Service { +func ProvideService(db db.DB, cfg *setting.Cfg) pref.Service { return &Service{ store: &sqlStore{ db: db, @@ -64,7 +64,10 @@ func (s *Service) Get(ctx context.Context, query *pref.GetPreferenceQuery) (*pre TeamID: query.TeamID, } prefs, err := s.store.Get(ctx, getPref) - if err != nil && !errors.Is(err, pref.ErrPrefNotFound) { + if errors.Is(err, pref.ErrPrefNotFound) { + return &pref.Preference{}, nil + } + if err != nil { return nil, err } return prefs, nil diff --git a/pkg/services/preference/prefimpl/pref_test.go b/pkg/services/preference/prefimpl/pref_test.go index b1e439b6830..3c083c1cb68 100644 --- a/pkg/services/preference/prefimpl/pref_test.go +++ b/pkg/services/preference/prefimpl/pref_test.go @@ -73,30 +73,42 @@ func TestPreferencesService(t *testing.T) { Navbar: team1NavbarPreferences, } + t.Run("Get should return nothing", func(t *testing.T) { + prefStoreFake.ExpectedGetError = pref.ErrPrefNotFound + preference, err := prefService.Get(context.Background(), &pref.GetPreferenceQuery{}) + require.NoError(t, err) + expected := &pref.Preference{} + if diff := cmp.Diff(expected, preference); diff != "" { + t.Fatalf("Result mismatch (-want +got):\n%s", diff) + } + prefStoreFake.ExpectedError = nil + }) + t.Run("GetDefaults should return defaults", func(t *testing.T) { prefService.cfg = setting.NewCfg() prefService.cfg.DefaultTheme = "light" prefService.cfg.DateFormats.DefaultTimezone = "UTC" - preferences := prefService.GetDefaults() + preference := prefService.GetDefaults() expected := &pref.Preference{ Theme: "light", Timezone: "UTC", HomeDashboardID: 0, JSONData: &pref.PreferenceJSONData{}, } - if diff := cmp.Diff(expected, preferences); diff != "" { + if diff := cmp.Diff(expected, preference); diff != "" { t.Fatalf("Result mismatch (-want +got):\n%s", diff) } }) t.Run("GetDefaults with no saved preferences should return defaults", func(t *testing.T) { + prefStoreFake.ExpectedError = nil prefStoreFake.ExpectedPreference = &pref.Preference{ Theme: "light", Timezone: "UTC", } query := &pref.GetPreferenceWithDefaultsQuery{} - preferences, err := prefService.GetWithDefaults(context.Background(), query) + preference, err := prefService.GetWithDefaults(context.Background(), query) require.NoError(t, err) expected := &pref.Preference{ Theme: "light", @@ -104,7 +116,7 @@ func TestPreferencesService(t *testing.T) { HomeDashboardID: 0, JSONData: &emptyPreferencesJsonData, } - if diff := cmp.Diff(expected, preferences); diff != "" { + if diff := cmp.Diff(expected, preference); diff != "" { t.Fatalf("Result mismatch (-want +got):\n%s", diff) } }) @@ -127,7 +139,7 @@ func TestPreferencesService(t *testing.T) { }, } query := &pref.GetPreferenceWithDefaultsQuery{OrgID: 1, UserID: 1} - preferences, err := prefService.GetWithDefaults(context.Background(), query) + preference, err := prefService.GetWithDefaults(context.Background(), query) require.NoError(t, err) expected := &pref.Preference{ Theme: "light", @@ -136,7 +148,7 @@ func TestPreferencesService(t *testing.T) { HomeDashboardID: 4, JSONData: &pref.PreferenceJSONData{}, } - if diff := cmp.Diff(expected, preferences); diff != "" { + if diff := cmp.Diff(expected, preference); diff != "" { t.Fatalf("Result mismatch (-want +got):\n%s", diff) } }) @@ -162,7 +174,7 @@ func TestPreferencesService(t *testing.T) { } prefService.GetDefaults().HomeDashboardID = 1 query := &pref.GetPreferenceWithDefaultsQuery{OrgID: 1, UserID: 2} - preferences, err := prefService.GetWithDefaults(context.Background(), query) + preference, err := prefService.GetWithDefaults(context.Background(), query) require.NoError(t, err) expected := &pref.Preference{ Theme: "light", @@ -171,7 +183,7 @@ func TestPreferencesService(t *testing.T) { HomeDashboardID: 4, JSONData: &pref.PreferenceJSONData{}, } - if diff := cmp.Diff(expected, preferences); diff != "" { + if diff := cmp.Diff(expected, preference); diff != "" { t.Fatalf("Result mismatch (-want +got):\n%s", diff) } }) diff --git a/pkg/services/preference/preftest/fake.go b/pkg/services/preference/preftest/fake.go index f52acea2047..8a2ca391c0f 100644 --- a/pkg/services/preference/preftest/fake.go +++ b/pkg/services/preference/preftest/fake.go @@ -30,3 +30,7 @@ func (f *FakePreferenceService) Save(ctx context.Context, cmd *pref.SavePreferen func (f *FakePreferenceService) GetDefaults() *pref.Preference { return f.ExpectedPreference } + +func (f *FakePreferenceService) Patch(ctx context.Context, cmd *pref.PatchPreferenceCommand) error { + return f.ExpectedError +} diff --git a/pkg/services/sqlstore/mockstore/mockstore.go b/pkg/services/sqlstore/mockstore/mockstore.go index 94d635aa6d3..f8b7deac7bf 100644 --- a/pkg/services/sqlstore/mockstore/mockstore.go +++ b/pkg/services/sqlstore/mockstore/mockstore.go @@ -289,23 +289,6 @@ func (m *SQLStoreMock) WithDbSession(ctx context.Context, callback sqlstore.DBTr return m.ExpectedError } -func (m *SQLStoreMock) GetPreferencesWithDefaults(ctx context.Context, query *models.GetPreferencesWithDefaultsQuery) error { - query.Result = &models.Preferences{} - return m.ExpectedError -} - -func (m *SQLStoreMock) GetPreferences(ctx context.Context, query *models.GetPreferencesQuery) error { - return m.ExpectedError -} - -func (m *SQLStoreMock) SavePreferences(ctx context.Context, cmd *models.SavePreferencesCommand) error { - return m.ExpectedError -} - -func (m *SQLStoreMock) PatchPreferences(ctx context.Context, cmd *models.PatchPreferencesCommand) error { - return m.ExpectedError -} - func (m *SQLStoreMock) GetPluginSettings(ctx context.Context, orgID int64) ([]*models.PluginSetting, error) { return nil, m.ExpectedError } diff --git a/pkg/services/sqlstore/preferences.go b/pkg/services/sqlstore/preferences.go deleted file mode 100644 index 6d9a7fe84ef..00000000000 --- a/pkg/services/sqlstore/preferences.go +++ /dev/null @@ -1,212 +0,0 @@ -package sqlstore - -import ( - "context" - "strings" - "time" - - "github.com/grafana/grafana/pkg/models" -) - -func (ss *SQLStore) GetPreferencesWithDefaults(ctx context.Context, query *models.GetPreferencesWithDefaultsQuery) error { - return ss.WithDbSession(ctx, func(dbSession *DBSession) error { - params := make([]interface{}, 0) - filter := "" - - if len(query.User.Teams) > 0 { - filter = "(org_id=? AND team_id IN (?" + strings.Repeat(",?", len(query.User.Teams)-1) + ")) OR " - params = append(params, query.User.OrgId) - for _, v := range query.User.Teams { - params = append(params, v) - } - } - - filter += "(org_id=? AND user_id=? AND team_id=0) OR (org_id=? AND team_id=0 AND user_id=0)" - params = append(params, query.User.OrgId) - params = append(params, query.User.UserId) - params = append(params, query.User.OrgId) - prefs := make([]*models.Preferences, 0) - err := dbSession.Where(filter, params...). - OrderBy("user_id ASC, team_id ASC"). - Find(&prefs) - - if err != nil { - return err - } - - res := &models.Preferences{ - Theme: ss.Cfg.DefaultTheme, - Timezone: ss.Cfg.DateFormats.DefaultTimezone, - WeekStart: ss.Cfg.DateFormats.DefaultWeekStart, - HomeDashboardId: 0, - JsonData: &models.PreferencesJsonData{}, - } - - for _, p := range prefs { - if p.Theme != "" { - res.Theme = p.Theme - } - if p.Timezone != "" { - res.Timezone = p.Timezone - } - if p.WeekStart != "" { - res.WeekStart = p.WeekStart - } - if p.HomeDashboardId != 0 { - res.HomeDashboardId = p.HomeDashboardId - } - if p.JsonData != nil { - res.JsonData = p.JsonData - } - } - - query.Result = res - return nil - }) -} - -func (ss *SQLStore) GetPreferences(ctx context.Context, query *models.GetPreferencesQuery) error { - return ss.WithDbSession(ctx, func(sess *DBSession) error { - var prefs models.Preferences - exists, err := sess.Where("org_id=? AND user_id=? AND team_id=?", query.OrgId, query.UserId, query.TeamId).Get(&prefs) - - if err != nil { - return err - } - - if exists { - query.Result = &prefs - } else { - query.Result = new(models.Preferences) - } - - return nil - }) -} - -func (ss *SQLStore) SavePreferences(ctx context.Context, cmd *models.SavePreferencesCommand) error { - return ss.WithTransactionalDbSession(ctx, func(sess *DBSession) error { - var prefs models.Preferences - exists, err := sess.Where("org_id=? AND user_id=? AND team_id=?", cmd.OrgId, cmd.UserId, cmd.TeamId).Get(&prefs) - if err != nil { - return err - } - - if !exists { - prefs = models.Preferences{ - UserId: cmd.UserId, - OrgId: cmd.OrgId, - TeamId: cmd.TeamId, - HomeDashboardId: cmd.HomeDashboardId, - Timezone: cmd.Timezone, - WeekStart: cmd.WeekStart, - Theme: cmd.Theme, - Created: time.Now(), - Updated: time.Now(), - JsonData: &models.PreferencesJsonData{}, - } - - if cmd.Navbar != nil { - prefs.JsonData.Navbar = *cmd.Navbar - } - - if cmd.QueryHistory != nil { - prefs.JsonData.QueryHistory = *cmd.QueryHistory - } - - _, err = sess.Insert(&prefs) - return err - } - // Wrap this in an if statement to maintain backwards compatibility - if cmd.Navbar != nil { - if prefs.JsonData == nil { - prefs.JsonData = &models.PreferencesJsonData{} - } - if cmd.Navbar.SavedItems != nil { - prefs.JsonData.Navbar.SavedItems = cmd.Navbar.SavedItems - } - } - - if cmd.QueryHistory != nil { - if prefs.JsonData == nil { - prefs.JsonData = &models.PreferencesJsonData{} - } - if cmd.QueryHistory.HomeTab != "" { - prefs.JsonData.QueryHistory.HomeTab = cmd.QueryHistory.HomeTab - } - } - - prefs.HomeDashboardId = cmd.HomeDashboardId - prefs.Timezone = cmd.Timezone - prefs.WeekStart = cmd.WeekStart - prefs.Theme = cmd.Theme - prefs.Updated = time.Now() - prefs.Version += 1 - _, err = sess.ID(prefs.Id).AllCols().Update(&prefs) - return err - }) -} - -func (ss *SQLStore) PatchPreferences(ctx context.Context, cmd *models.PatchPreferencesCommand) error { - return ss.WithTransactionalDbSession(ctx, func(sess *DBSession) error { - var prefs models.Preferences - exists, err := sess.Where("org_id=? AND user_id=? AND team_id=?", cmd.OrgId, cmd.UserId, cmd.TeamId).Get(&prefs) - if err != nil { - return err - } - - if !exists { - prefs = models.Preferences{ - UserId: cmd.UserId, - OrgId: cmd.OrgId, - TeamId: cmd.TeamId, - Created: time.Now(), - JsonData: &models.PreferencesJsonData{}, - } - } - - if cmd.Navbar != nil { - if prefs.JsonData == nil { - prefs.JsonData = &models.PreferencesJsonData{} - } - if cmd.Navbar.SavedItems != nil { - prefs.JsonData.Navbar.SavedItems = cmd.Navbar.SavedItems - } - } - - if cmd.QueryHistory != nil { - if prefs.JsonData == nil { - prefs.JsonData = &models.PreferencesJsonData{} - } - if cmd.QueryHistory.HomeTab != "" { - prefs.JsonData.QueryHistory.HomeTab = cmd.QueryHistory.HomeTab - } - } - - if cmd.HomeDashboardId != nil { - prefs.HomeDashboardId = *cmd.HomeDashboardId - } - - if cmd.Timezone != nil { - prefs.Timezone = *cmd.Timezone - } - - if cmd.WeekStart != nil { - prefs.WeekStart = *cmd.WeekStart - } - - if cmd.Theme != nil { - prefs.Theme = *cmd.Theme - } - - prefs.Updated = time.Now() - prefs.Version += 1 - - if exists { - _, err = sess.ID(prefs.Id).AllCols().Update(&prefs) - } else { - _, err = sess.Insert(&prefs) - } - return err - }) -} diff --git a/pkg/services/sqlstore/preferences_test.go b/pkg/services/sqlstore/preferences_test.go deleted file mode 100644 index 8ff9f9f073a..00000000000 --- a/pkg/services/sqlstore/preferences_test.go +++ /dev/null @@ -1,302 +0,0 @@ -//go:build integration -// +build integration - -package sqlstore - -import ( - "context" - "testing" - - "github.com/google/go-cmp/cmp" - "github.com/stretchr/testify/require" - - "github.com/grafana/grafana/pkg/models" -) - -func TestPreferencesDataAccess(t *testing.T) { - ss := InitTestDB(t) - emptyNavbarPreferences := models.NavbarPreference{} - userNavbarPreferences := models.NavbarPreference{ - SavedItems: []models.NavLink{{ - Id: "explore", - Text: "Explore", - Url: "/explore", - }}, - } - orgNavbarPreferences := models.NavbarPreference{ - SavedItems: []models.NavLink{{ - Id: "alerting", - Text: "Alerting", - Url: "/alerting", - }}, - } - team1NavbarPreferences := models.NavbarPreference{ - SavedItems: []models.NavLink{{ - Id: "dashboards", - Text: "Dashboards", - Url: "/dashboards", - }}, - } - team2NavbarPreferences := models.NavbarPreference{ - SavedItems: []models.NavLink{{ - Id: "home", - Text: "Home", - Url: "/home", - }}, - } - - emptyPreferencesJsonData := models.PreferencesJsonData{ - Navbar: emptyNavbarPreferences, - } - userPreferencesJsonData := models.PreferencesJsonData{ - Navbar: userNavbarPreferences, - } - orgPreferencesJsonData := models.PreferencesJsonData{ - Navbar: orgNavbarPreferences, - } - team2PreferencesJsonData := models.PreferencesJsonData{ - Navbar: team2NavbarPreferences, - } - - t.Run("GetPreferencesWithDefaults with no saved preferences should return defaults", func(t *testing.T) { - ss.Cfg.DefaultTheme = "light" - ss.Cfg.DateFormats.DefaultTimezone = "UTC" - - query := &models.GetPreferencesWithDefaultsQuery{User: &models.SignedInUser{}} - err := ss.GetPreferencesWithDefaults(context.Background(), query) - require.NoError(t, err) - require.Equal(t, "light", query.Result.Theme) - require.Equal(t, "UTC", query.Result.Timezone) - require.Equal(t, int64(0), query.Result.HomeDashboardId) - require.Equal(t, &emptyPreferencesJsonData, query.Result.JsonData) - }) - - t.Run("GetPreferencesWithDefaults with saved org and user home dashboard should return user home dashboard", func(t *testing.T) { - err := ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, HomeDashboardId: 1}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, UserId: 1, HomeDashboardId: 4}) - require.NoError(t, err) - - query := &models.GetPreferencesWithDefaultsQuery{User: &models.SignedInUser{OrgId: 1, UserId: 1}} - err = ss.GetPreferencesWithDefaults(context.Background(), query) - require.NoError(t, err) - require.Equal(t, int64(4), query.Result.HomeDashboardId) - }) - - t.Run("GetPreferencesWithDefaults with saved org and other user home dashboard should return org home dashboard", func(t *testing.T) { - err := ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, HomeDashboardId: 1}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, UserId: 1, HomeDashboardId: 4}) - require.NoError(t, err) - - query := &models.GetPreferencesWithDefaultsQuery{User: &models.SignedInUser{OrgId: 1, UserId: 2}} - err = ss.GetPreferencesWithDefaults(context.Background(), query) - require.NoError(t, err) - require.Equal(t, int64(1), query.Result.HomeDashboardId) - }) - - t.Run("GetPreferencesWithDefaults with saved org and teams home dashboard should return last team home dashboard", func(t *testing.T) { - err := ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, HomeDashboardId: 1}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, TeamId: 2, HomeDashboardId: 2}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, TeamId: 3, HomeDashboardId: 3}) - require.NoError(t, err) - - query := &models.GetPreferencesWithDefaultsQuery{ - User: &models.SignedInUser{OrgId: 1, Teams: []int64{2, 3}}, - } - err = ss.GetPreferencesWithDefaults(context.Background(), query) - require.NoError(t, err) - require.Equal(t, int64(3), query.Result.HomeDashboardId) - }) - - t.Run("GetPreferencesWithDefaults with saved org and other teams home dashboard should return org home dashboard", func(t *testing.T) { - err := ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, HomeDashboardId: 1}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, TeamId: 2, HomeDashboardId: 2}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, TeamId: 3, HomeDashboardId: 3}) - require.NoError(t, err) - - query := &models.GetPreferencesWithDefaultsQuery{User: &models.SignedInUser{OrgId: 1}} - err = ss.GetPreferencesWithDefaults(context.Background(), query) - require.NoError(t, err) - require.Equal(t, int64(1), query.Result.HomeDashboardId) - }) - - t.Run("GetPreferencesWithDefaults with saved org, teams and user home dashboard should return user home dashboard", func(t *testing.T) { - err := ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, HomeDashboardId: 1}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, TeamId: 2, HomeDashboardId: 2}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, TeamId: 3, HomeDashboardId: 3}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, UserId: 1, HomeDashboardId: 4}) - require.NoError(t, err) - - query := &models.GetPreferencesWithDefaultsQuery{ - User: &models.SignedInUser{OrgId: 1, UserId: 1, Teams: []int64{2, 3}}, - } - err = ss.GetPreferencesWithDefaults(context.Background(), query) - require.NoError(t, err) - require.Equal(t, int64(4), query.Result.HomeDashboardId) - }) - - t.Run("GetPreferencesWithDefaults with saved org, other teams and user home dashboard should return org home dashboard", func(t *testing.T) { - err := ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, HomeDashboardId: 1}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, TeamId: 2, HomeDashboardId: 2}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, TeamId: 3, HomeDashboardId: 3}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, UserId: 1, HomeDashboardId: 4}) - require.NoError(t, err) - - query := &models.GetPreferencesWithDefaultsQuery{ - User: &models.SignedInUser{OrgId: 1, UserId: 2}, - } - err = ss.GetPreferencesWithDefaults(context.Background(), query) - require.NoError(t, err) - require.Equal(t, int64(1), query.Result.HomeDashboardId) - }) - - t.Run("GetPreferencesWithDefaults with saved org and user json data should return user json data", func(t *testing.T) { - err := ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, Navbar: &orgNavbarPreferences}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, UserId: 1, Navbar: &userNavbarPreferences}) - require.NoError(t, err) - - query := &models.GetPreferencesWithDefaultsQuery{User: &models.SignedInUser{OrgId: 1, UserId: 1}} - err = ss.GetPreferencesWithDefaults(context.Background(), query) - require.NoError(t, err) - require.Equal(t, &userPreferencesJsonData, query.Result.JsonData) - }) - - t.Run("GetPreferencesWithDefaults with saved org and other user json data should return org json data", func(t *testing.T) { - err := ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, Navbar: &orgNavbarPreferences}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, UserId: 1, Navbar: &userNavbarPreferences}) - require.NoError(t, err) - - query := &models.GetPreferencesWithDefaultsQuery{User: &models.SignedInUser{OrgId: 1, UserId: 2}} - err = ss.GetPreferencesWithDefaults(context.Background(), query) - require.NoError(t, err) - require.Equal(t, &orgPreferencesJsonData, query.Result.JsonData) - }) - - t.Run("GetPreferencesWithDefaults with saved org and teams json data should return last team json data", func(t *testing.T) { - err := ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, Navbar: &orgNavbarPreferences}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, TeamId: 2, Navbar: &team1NavbarPreferences}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, TeamId: 3, Navbar: &team2NavbarPreferences}) - require.NoError(t, err) - - query := &models.GetPreferencesWithDefaultsQuery{ - User: &models.SignedInUser{OrgId: 1, Teams: []int64{2, 3}}, - } - err = ss.GetPreferencesWithDefaults(context.Background(), query) - require.NoError(t, err) - require.Equal(t, &team2PreferencesJsonData, query.Result.JsonData) - }) - - t.Run("GetPreferencesWithDefaults with saved org and other teams json data should return org json data", func(t *testing.T) { - err := ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, Navbar: &orgNavbarPreferences}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, TeamId: 2, Navbar: &team1NavbarPreferences}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, TeamId: 3, Navbar: &team2NavbarPreferences}) - require.NoError(t, err) - - query := &models.GetPreferencesWithDefaultsQuery{User: &models.SignedInUser{OrgId: 1}} - err = ss.GetPreferencesWithDefaults(context.Background(), query) - require.NoError(t, err) - require.Equal(t, &orgPreferencesJsonData, query.Result.JsonData) - }) - - t.Run("GetPreferencesWithDefaults with saved org, teams and user json data should return user json data", func(t *testing.T) { - err := ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, Navbar: &orgNavbarPreferences}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, TeamId: 2, Navbar: &team1NavbarPreferences}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, TeamId: 3, Navbar: &team2NavbarPreferences}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, UserId: 1, Navbar: &userNavbarPreferences}) - require.NoError(t, err) - - query := &models.GetPreferencesWithDefaultsQuery{ - User: &models.SignedInUser{OrgId: 1, UserId: 1, Teams: []int64{2, 3}}, - } - err = ss.GetPreferencesWithDefaults(context.Background(), query) - require.NoError(t, err) - require.Equal(t, &userPreferencesJsonData, query.Result.JsonData) - }) - - t.Run("GetPreferencesWithDefaults with saved org, other teams and user json data should return org json data", func(t *testing.T) { - err := ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, Navbar: &orgNavbarPreferences}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, TeamId: 2, Navbar: &team1NavbarPreferences}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, TeamId: 3, Navbar: &team2NavbarPreferences}) - require.NoError(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{OrgId: 1, UserId: 1, Navbar: &userNavbarPreferences}) - require.NoError(t, err) - - query := &models.GetPreferencesWithDefaultsQuery{ - User: &models.SignedInUser{OrgId: 1, UserId: 2}, - } - err = ss.GetPreferencesWithDefaults(context.Background(), query) - require.NoError(t, err) - require.Equal(t, &orgPreferencesJsonData, query.Result.JsonData) - }) - - t.Run("SavePreferences for a user should store correct values", func(t *testing.T) { - err := ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{UserId: models.SignedInUser{}.UserId, Theme: "dark", Timezone: "browser", HomeDashboardId: 5, WeekStart: "1", Navbar: &userNavbarPreferences}) - require.NoError(t, err) - - query := &models.GetPreferencesWithDefaultsQuery{User: &models.SignedInUser{}} - err = ss.GetPreferencesWithDefaults(context.Background(), query) - require.NoError(t, err) - expected := &models.Preferences{ - Id: query.Result.Id, - Version: query.Result.Version, - HomeDashboardId: 5, - Timezone: "browser", - WeekStart: "1", - Theme: "dark", - JsonData: &userPreferencesJsonData, - Created: query.Result.Created, - Updated: query.Result.Updated, - } - if diff := cmp.Diff(expected, query.Result); diff != "" { - t.Fatalf("Result mismatch (-want +got):\n%s", diff) - } - }) - - t.Run("PatchPreferences for a user should only modify a single value", func(t *testing.T) { - err := ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{UserId: models.SignedInUser{}.UserId, Theme: "dark", Timezone: "browser", HomeDashboardId: 5, WeekStart: "1", Navbar: &orgNavbarPreferences}) - require.NoError(t, err) - - err = ss.PatchPreferences(context.Background(), &models.PatchPreferencesCommand{UserId: models.SignedInUser{}.UserId, Navbar: &userNavbarPreferences}) - require.NoError(t, err) - - query := &models.GetPreferencesWithDefaultsQuery{User: &models.SignedInUser{}} - err = ss.GetPreferencesWithDefaults(context.Background(), query) - require.NoError(t, err) - expected := &models.Preferences{ - Id: query.Result.Id, - Version: query.Result.Version, - HomeDashboardId: 5, - Timezone: "browser", - WeekStart: "1", - Theme: "dark", - JsonData: &userPreferencesJsonData, - Created: query.Result.Created, - Updated: query.Result.Updated, - } - if diff := cmp.Diff(expected, query.Result); diff != "" { - t.Fatalf("Result mismatch (-want +got):\n%s", diff) - } - }) -} diff --git a/pkg/services/sqlstore/store.go b/pkg/services/sqlstore/store.go index d0d6741c750..8871a68d8fb 100644 --- a/pkg/services/sqlstore/store.go +++ b/pkg/services/sqlstore/store.go @@ -60,10 +60,6 @@ type Store interface { GetTeamMembers(ctx context.Context, query *models.GetTeamMembersQuery) error NewSession(ctx context.Context) *DBSession WithDbSession(ctx context.Context, callback DBTransactionFunc) error - GetPreferencesWithDefaults(ctx context.Context, query *models.GetPreferencesWithDefaultsQuery) error - GetPreferences(ctx context.Context, query *models.GetPreferencesQuery) error - SavePreferences(ctx context.Context, cmd *models.SavePreferencesCommand) error - PatchPreferences(ctx context.Context, cmd *models.PatchPreferencesCommand) error GetPluginSettings(ctx context.Context, orgID int64) ([]*models.PluginSetting, error) GetPluginSettingById(ctx context.Context, query *models.GetPluginSettingByIdQuery) error UpdatePluginSetting(ctx context.Context, cmd *models.UpdatePluginSettingCmd) error diff --git a/pkg/services/sqlstore/user_test.go b/pkg/services/sqlstore/user_test.go index e2340de0ab6..f91e70134ff 100644 --- a/pkg/services/sqlstore/user_test.go +++ b/pkg/services/sqlstore/user_test.go @@ -245,11 +245,6 @@ func TestUserDataAccess(t *testing.T) { }) require.Nil(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{ - UserId: users[1].Id, OrgId: users[0].OrgId, HomeDashboardId: 1, Theme: "dark", - }) - require.Nil(t, err) - // When the user is deleted err = ss.DeleteUser(context.Background(), &models.DeleteUserCommand{UserId: users[1].Id}) require.Nil(t, err) @@ -266,13 +261,6 @@ func TestUserDataAccess(t *testing.T) { require.Len(t, permQuery.Result, 0) - prefsQuery := &models.GetPreferencesQuery{OrgId: users[0].OrgId, UserId: users[1].Id} - err = ss.GetPreferences(context.Background(), prefsQuery) - require.Nil(t, err) - - require.EqualValues(t, prefsQuery.Result.OrgId, 0) - require.EqualValues(t, prefsQuery.Result.UserId, 0) - // A user is an org member and has been assigned permissions // Re-init DB ss = InitTestDB(t) @@ -296,11 +284,6 @@ func TestUserDataAccess(t *testing.T) { }) require.Nil(t, err) - err = ss.SavePreferences(context.Background(), &models.SavePreferencesCommand{ - UserId: users[1].Id, OrgId: users[0].OrgId, HomeDashboardId: 1, Theme: "dark", - }) - require.Nil(t, err) - ss.CacheService.Flush() query3 := &models.GetSignedInUserQuery{OrgId: users[1].OrgId, UserId: users[1].Id} @@ -351,13 +334,6 @@ func TestUserDataAccess(t *testing.T) { require.Nil(t, err) require.Len(t, permQuery.Result, 0) - - prefsQuery = &models.GetPreferencesQuery{OrgId: users[0].OrgId, UserId: users[1].Id} - err = ss.GetPreferences(context.Background(), prefsQuery) - require.Nil(t, err) - - require.EqualValues(t, prefsQuery.Result.OrgId, 0) - require.EqualValues(t, prefsQuery.Result.UserId, 0) }) ss = InitTestDB(t)