diff --git a/pkg/api/index.go b/pkg/api/index.go index c322b0d489d..e0d0b8de637 100644 --- a/pkg/api/index.go +++ b/pkg/api/index.go @@ -77,6 +77,11 @@ func (hs *HTTPServer) setIndexViewData(c *models.ReqContext) (*dtos.IndexViewDat settings["isPublicDashboardView"] = true } + weekStart := "" + if prefs.WeekStart != nil { + weekStart = *prefs.WeekStart + } + data := dtos.IndexViewData{ User: &dtos.CurrentUser{ Id: c.UserID, @@ -93,7 +98,7 @@ func (hs *HTTPServer) setIndexViewData(c *models.ReqContext) (*dtos.IndexViewDat IsGrafanaAdmin: c.IsGrafanaAdmin, LightTheme: prefs.Theme == lightName, Timezone: prefs.Timezone, - WeekStart: prefs.WeekStart, + WeekStart: weekStart, Locale: locale, HelpFlags1: c.HelpFlags1, HasEditPermissionInFolders: hasEditPerm, diff --git a/pkg/api/preferences.go b/pkg/api/preferences.go index d505e05331e..4b119557a14 100644 --- a/pkg/api/preferences.go +++ b/pkg/api/preferences.go @@ -82,12 +82,17 @@ func (hs *HTTPServer) getPreferencesFor(ctx context.Context, orgID, userID, team } } + weekStart := "" + if preference.WeekStart != nil { + weekStart = *preference.WeekStart + } + dto := dtos.Prefs{ Theme: preference.Theme, HomeDashboardID: preference.HomeDashboardID, HomeDashboardUID: dashboardUID, Timezone: preference.Timezone, - WeekStart: preference.WeekStart, + WeekStart: weekStart, } if preference.JSONData != nil { diff --git a/pkg/services/preference/model.go b/pkg/services/preference/model.go index 43d8c759aa7..3f09da21d92 100644 --- a/pkg/services/preference/model.go +++ b/pkg/services/preference/model.go @@ -20,7 +20,7 @@ type Preference struct { Version int `db:"version"` HomeDashboardID int64 `xorm:"home_dashboard_id" db:"home_dashboard_id"` Timezone string `db:"timezone"` - WeekStart string `db:"week_start"` + WeekStart *string `db:"week_start"` Theme string `db:"theme"` Created time.Time `db:"created"` Updated time.Time `db:"updated"` diff --git a/pkg/services/preference/prefimpl/pref.go b/pkg/services/preference/prefimpl/pref.go index 35839b643a2..7b9d0c5d10a 100644 --- a/pkg/services/preference/prefimpl/pref.go +++ b/pkg/services/preference/prefimpl/pref.go @@ -54,7 +54,7 @@ func (s *Service) GetWithDefaults(ctx context.Context, query *pref.GetPreference if p.Timezone != "" { res.Timezone = p.Timezone } - if p.WeekStart != "" { + if p.WeekStart != nil && *p.WeekStart != "" { res.WeekStart = p.WeekStart } if p.HomeDashboardID != 0 { @@ -108,7 +108,7 @@ func (s *Service) Save(ctx context.Context, cmd *pref.SavePreferenceCommand) err TeamID: cmd.TeamID, HomeDashboardID: cmd.HomeDashboardID, Timezone: cmd.Timezone, - WeekStart: cmd.WeekStart, + WeekStart: &cmd.WeekStart, Theme: cmd.Theme, Created: time.Now(), Updated: time.Now(), @@ -125,7 +125,7 @@ func (s *Service) Save(ctx context.Context, cmd *pref.SavePreferenceCommand) err } preference.Timezone = cmd.Timezone - preference.WeekStart = cmd.WeekStart + preference.WeekStart = &cmd.WeekStart preference.Theme = cmd.Theme preference.Updated = time.Now() preference.Version += 1 @@ -200,7 +200,7 @@ func (s *Service) Patch(ctx context.Context, cmd *pref.PatchPreferenceCommand) e } if cmd.WeekStart != nil { - preference.WeekStart = *cmd.WeekStart + preference.WeekStart = cmd.WeekStart } if cmd.Theme != nil { @@ -232,7 +232,7 @@ func (s *Service) GetDefaults() *pref.Preference { defaults := &pref.Preference{ Theme: s.cfg.DefaultTheme, Timezone: s.cfg.DateFormats.DefaultTimezone, - WeekStart: s.cfg.DateFormats.DefaultWeekStart, + WeekStart: &s.cfg.DateFormats.DefaultWeekStart, HomeDashboardID: 0, JSONData: &pref.PreferenceJSONData{}, } diff --git a/pkg/services/preference/prefimpl/pref_test.go b/pkg/services/preference/prefimpl/pref_test.go index 28749e715bc..6aa09fdf1f4 100644 --- a/pkg/services/preference/prefimpl/pref_test.go +++ b/pkg/services/preference/prefimpl/pref_test.go @@ -36,10 +36,12 @@ func TestGetDefaults(t *testing.T) { prefService.cfg.DefaultLocale = "en-US" prefService.cfg.DefaultTheme = "light" prefService.cfg.DateFormats.DefaultTimezone = "UTC" + weekStart := "" t.Run("GetDefaults", func(t *testing.T) { preference := prefService.GetDefaults() expected := &pref.Preference{ + WeekStart: &weekStart, Theme: "light", Timezone: "UTC", HomeDashboardID: 0, @@ -55,6 +57,7 @@ func TestGetDefaults(t *testing.T) { preference, err := prefService.GetWithDefaults(context.Background(), query) require.NoError(t, err) expected := &pref.Preference{ + WeekStart: &weekStart, Theme: "light", Timezone: "UTC", HomeDashboardID: 0, @@ -72,6 +75,7 @@ func TestGetDefaultsWithI18nFeatureFlag(t *testing.T) { cfg: setting.NewCfg(), features: featuremgmt.WithFeatures(featuremgmt.FlagInternationalization), } + weekStart := "" prefService.cfg.DefaultLocale = "en-US" prefService.cfg.DefaultTheme = "light" prefService.cfg.DateFormats.DefaultTimezone = "UTC" @@ -79,6 +83,7 @@ func TestGetDefaultsWithI18nFeatureFlag(t *testing.T) { t.Run("GetDefaults", func(t *testing.T) { preference := prefService.GetDefaults() expected := &pref.Preference{ + WeekStart: &weekStart, Theme: "light", Timezone: "UTC", HomeDashboardID: 0, @@ -100,13 +105,15 @@ func TestGetWithDefaults_withUserAndOrgPrefs(t *testing.T) { } prefService.cfg.DefaultLocale = "en-US" + weekStartOne := "1" + weekStartTwo := "2" insertPrefs(t, prefService.store, pref.Preference{ OrgID: 1, HomeDashboardID: 1, Theme: "dark", Timezone: "UTC", - WeekStart: "1", + WeekStart: &weekStartOne, JSONData: &pref.PreferenceJSONData{ Locale: "en-GB", }, @@ -117,7 +124,7 @@ func TestGetWithDefaults_withUserAndOrgPrefs(t *testing.T) { HomeDashboardID: 4, Theme: "light", Timezone: "browser", - WeekStart: "2", + WeekStart: &weekStartTwo, JSONData: &pref.PreferenceJSONData{ Locale: "en-AU", }, @@ -131,7 +138,7 @@ func TestGetWithDefaults_withUserAndOrgPrefs(t *testing.T) { expected := &pref.Preference{ Theme: "light", Timezone: "browser", - WeekStart: "2", + WeekStart: &weekStartTwo, HomeDashboardID: 4, JSONData: &pref.PreferenceJSONData{ Locale: "en-AU", @@ -150,7 +157,7 @@ func TestGetWithDefaults_withUserAndOrgPrefs(t *testing.T) { expected := &pref.Preference{ Theme: "dark", Timezone: "UTC", - WeekStart: "1", + WeekStart: &weekStartOne, HomeDashboardID: 1, JSONData: &pref.PreferenceJSONData{ Locale: "en-GB", @@ -163,6 +170,7 @@ func TestGetWithDefaults_withUserAndOrgPrefs(t *testing.T) { } func TestGetDefaults_JSONData(t *testing.T) { + weekStart := "" queryPreference := pref.QueryHistoryPreference{ HomeTab: "hometab", } @@ -235,7 +243,8 @@ func TestGetDefaults_JSONData(t *testing.T) { preference, err := prefService.GetWithDefaults(context.Background(), query) require.NoError(t, err) require.Equal(t, &pref.Preference{ - JSONData: &userPreferencesJsonData, + WeekStart: &weekStart, + JSONData: &userPreferencesJsonData, }, preference) }) @@ -262,6 +271,7 @@ func TestGetDefaults_JSONData(t *testing.T) { preference, err := prefService.GetWithDefaults(context.Background(), query) require.NoError(t, err) require.Equal(t, &pref.Preference{ + WeekStart: &weekStart, JSONData: &pref.PreferenceJSONData{ Locale: "en-GB", Navbar: userNavbarPreferences, @@ -300,12 +310,15 @@ func TestGetDefaults_JSONData(t *testing.T) { preference, err := prefService.GetWithDefaults(context.Background(), query) require.NoError(t, err) require.Equal(t, &pref.Preference{ - JSONData: &team2PreferencesJsonData, + JSONData: &team2PreferencesJsonData, + WeekStart: &weekStart, }, preference) }) } func TestGetWithDefaults_teams(t *testing.T) { + weekStartOne := "1" + weekStartTwo := "2" prefService := &Service{ store: newFake(), cfg: setting.NewCfg(), @@ -317,7 +330,7 @@ func TestGetWithDefaults_teams(t *testing.T) { HomeDashboardID: 1, Theme: "light", Timezone: "browser", - WeekStart: "1", + WeekStart: &weekStartOne, }, pref.Preference{ OrgID: 1, @@ -325,7 +338,7 @@ func TestGetWithDefaults_teams(t *testing.T) { HomeDashboardID: 3, Theme: "light", Timezone: "browser", - WeekStart: "2", + WeekStart: &weekStartTwo, }, pref.Preference{ OrgID: 1, @@ -333,7 +346,7 @@ func TestGetWithDefaults_teams(t *testing.T) { HomeDashboardID: 4, Theme: "light", Timezone: "browser", - WeekStart: "2", + WeekStart: &weekStartTwo, }, ) @@ -343,7 +356,7 @@ func TestGetWithDefaults_teams(t *testing.T) { expected := &pref.Preference{ Theme: "light", Timezone: "browser", - WeekStart: "2", + WeekStart: &weekStartTwo, HomeDashboardID: 4, JSONData: &pref.PreferenceJSONData{}, } @@ -399,7 +412,7 @@ func TestSave(t *testing.T) { assert.Equal(t, "dark", stored.Theme) assert.Equal(t, "browser", stored.Timezone) assert.EqualValues(t, 5, stored.HomeDashboardID) - assert.Equal(t, "1", stored.WeekStart) + assert.Equal(t, "1", *stored.WeekStart) assert.EqualValues(t, 0, stored.Version) }) @@ -421,7 +434,7 @@ func TestSave(t *testing.T) { assert.Empty(t, stored.Theme) assert.Equal(t, "UTC", stored.Timezone) assert.Zero(t, stored.HomeDashboardID) - assert.Equal(t, "1", stored.WeekStart) + assert.Equal(t, "1", *stored.WeekStart) assert.EqualValues(t, 1, stored.Version) }) @@ -440,7 +453,7 @@ func TestSave(t *testing.T) { assert.Equal(t, themeValue, stored.Theme) assert.Equal(t, "UTC", stored.Timezone) assert.Zero(t, stored.HomeDashboardID) - assert.Equal(t, "1", stored.WeekStart) + assert.Equal(t, "1", *stored.WeekStart) assert.EqualValues(t, 2, stored.Version) }) } diff --git a/pkg/services/preference/prefimpl/store_test.go b/pkg/services/preference/prefimpl/store_test.go index 5aaf283e32f..0773c1c7134 100644 --- a/pkg/services/preference/prefimpl/store_test.go +++ b/pkg/services/preference/prefimpl/store_test.go @@ -17,7 +17,7 @@ type getStore func(db.DB) store func testIntegrationPreferencesDataAccess(t *testing.T, fn getStore) { t.Helper() - + weekStartOne := "1" ss := db.InitTestDB(t) prefStore := fn(ss) orgNavbarPreferences := pref.NavbarPreference{ @@ -123,7 +123,7 @@ func testIntegrationPreferencesDataAccess(t *testing.T, fn getStore) { Theme: "dark", Timezone: "browser", HomeDashboardID: 5, - WeekStart: "1", + WeekStart: &weekStartOne, JSONData: &pref.PreferenceJSONData{Navbar: orgNavbarPreferences}, Created: time.Now(), Updated: time.Now(), @@ -135,7 +135,7 @@ func testIntegrationPreferencesDataAccess(t *testing.T, fn getStore) { Theme: "dark", HomeDashboardID: 5, Timezone: "browser", - WeekStart: "1", + WeekStart: &weekStartOne, Created: time.Now(), Updated: time.Now(), JSONData: &pref.PreferenceJSONData{}, @@ -149,7 +149,7 @@ func testIntegrationPreferencesDataAccess(t *testing.T, fn getStore) { Version: prefs[0].Version, HomeDashboardID: 5, Timezone: "browser", - WeekStart: "1", + WeekStart: &weekStartOne, Theme: "dark", JSONData: prefs[0].JSONData, Created: prefs[0].Created,