Chore: Fix SQLx failure when starting the server with newDBLibrary enabled (#58985)

change the weekstart to pointer

Co-authored-by: Sofia Papagiannaki <1632407+papagian@users.noreply.github.com>
This commit is contained in:
ying-jeanne 2022-11-21 15:53:56 +01:00 committed by GitHub
parent 156ed4b56c
commit ba8124ef93
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 48 additions and 25 deletions

View File

@ -77,6 +77,11 @@ func (hs *HTTPServer) setIndexViewData(c *models.ReqContext) (*dtos.IndexViewDat
settings["isPublicDashboardView"] = true settings["isPublicDashboardView"] = true
} }
weekStart := ""
if prefs.WeekStart != nil {
weekStart = *prefs.WeekStart
}
data := dtos.IndexViewData{ data := dtos.IndexViewData{
User: &dtos.CurrentUser{ User: &dtos.CurrentUser{
Id: c.UserID, Id: c.UserID,
@ -93,7 +98,7 @@ func (hs *HTTPServer) setIndexViewData(c *models.ReqContext) (*dtos.IndexViewDat
IsGrafanaAdmin: c.IsGrafanaAdmin, IsGrafanaAdmin: c.IsGrafanaAdmin,
LightTheme: prefs.Theme == lightName, LightTheme: prefs.Theme == lightName,
Timezone: prefs.Timezone, Timezone: prefs.Timezone,
WeekStart: prefs.WeekStart, WeekStart: weekStart,
Locale: locale, Locale: locale,
HelpFlags1: c.HelpFlags1, HelpFlags1: c.HelpFlags1,
HasEditPermissionInFolders: hasEditPerm, HasEditPermissionInFolders: hasEditPerm,

View File

@ -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{ dto := dtos.Prefs{
Theme: preference.Theme, Theme: preference.Theme,
HomeDashboardID: preference.HomeDashboardID, HomeDashboardID: preference.HomeDashboardID,
HomeDashboardUID: dashboardUID, HomeDashboardUID: dashboardUID,
Timezone: preference.Timezone, Timezone: preference.Timezone,
WeekStart: preference.WeekStart, WeekStart: weekStart,
} }
if preference.JSONData != nil { if preference.JSONData != nil {

View File

@ -20,7 +20,7 @@ type Preference struct {
Version int `db:"version"` Version int `db:"version"`
HomeDashboardID int64 `xorm:"home_dashboard_id" db:"home_dashboard_id"` HomeDashboardID int64 `xorm:"home_dashboard_id" db:"home_dashboard_id"`
Timezone string `db:"timezone"` Timezone string `db:"timezone"`
WeekStart string `db:"week_start"` WeekStart *string `db:"week_start"`
Theme string `db:"theme"` Theme string `db:"theme"`
Created time.Time `db:"created"` Created time.Time `db:"created"`
Updated time.Time `db:"updated"` Updated time.Time `db:"updated"`

View File

@ -54,7 +54,7 @@ func (s *Service) GetWithDefaults(ctx context.Context, query *pref.GetPreference
if p.Timezone != "" { if p.Timezone != "" {
res.Timezone = p.Timezone res.Timezone = p.Timezone
} }
if p.WeekStart != "" { if p.WeekStart != nil && *p.WeekStart != "" {
res.WeekStart = p.WeekStart res.WeekStart = p.WeekStart
} }
if p.HomeDashboardID != 0 { if p.HomeDashboardID != 0 {
@ -108,7 +108,7 @@ func (s *Service) Save(ctx context.Context, cmd *pref.SavePreferenceCommand) err
TeamID: cmd.TeamID, TeamID: cmd.TeamID,
HomeDashboardID: cmd.HomeDashboardID, HomeDashboardID: cmd.HomeDashboardID,
Timezone: cmd.Timezone, Timezone: cmd.Timezone,
WeekStart: cmd.WeekStart, WeekStart: &cmd.WeekStart,
Theme: cmd.Theme, Theme: cmd.Theme,
Created: time.Now(), Created: time.Now(),
Updated: 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.Timezone = cmd.Timezone
preference.WeekStart = cmd.WeekStart preference.WeekStart = &cmd.WeekStart
preference.Theme = cmd.Theme preference.Theme = cmd.Theme
preference.Updated = time.Now() preference.Updated = time.Now()
preference.Version += 1 preference.Version += 1
@ -200,7 +200,7 @@ func (s *Service) Patch(ctx context.Context, cmd *pref.PatchPreferenceCommand) e
} }
if cmd.WeekStart != nil { if cmd.WeekStart != nil {
preference.WeekStart = *cmd.WeekStart preference.WeekStart = cmd.WeekStart
} }
if cmd.Theme != nil { if cmd.Theme != nil {
@ -232,7 +232,7 @@ func (s *Service) GetDefaults() *pref.Preference {
defaults := &pref.Preference{ defaults := &pref.Preference{
Theme: s.cfg.DefaultTheme, Theme: s.cfg.DefaultTheme,
Timezone: s.cfg.DateFormats.DefaultTimezone, Timezone: s.cfg.DateFormats.DefaultTimezone,
WeekStart: s.cfg.DateFormats.DefaultWeekStart, WeekStart: &s.cfg.DateFormats.DefaultWeekStart,
HomeDashboardID: 0, HomeDashboardID: 0,
JSONData: &pref.PreferenceJSONData{}, JSONData: &pref.PreferenceJSONData{},
} }

View File

@ -36,10 +36,12 @@ func TestGetDefaults(t *testing.T) {
prefService.cfg.DefaultLocale = "en-US" prefService.cfg.DefaultLocale = "en-US"
prefService.cfg.DefaultTheme = "light" prefService.cfg.DefaultTheme = "light"
prefService.cfg.DateFormats.DefaultTimezone = "UTC" prefService.cfg.DateFormats.DefaultTimezone = "UTC"
weekStart := ""
t.Run("GetDefaults", func(t *testing.T) { t.Run("GetDefaults", func(t *testing.T) {
preference := prefService.GetDefaults() preference := prefService.GetDefaults()
expected := &pref.Preference{ expected := &pref.Preference{
WeekStart: &weekStart,
Theme: "light", Theme: "light",
Timezone: "UTC", Timezone: "UTC",
HomeDashboardID: 0, HomeDashboardID: 0,
@ -55,6 +57,7 @@ func TestGetDefaults(t *testing.T) {
preference, err := prefService.GetWithDefaults(context.Background(), query) preference, err := prefService.GetWithDefaults(context.Background(), query)
require.NoError(t, err) require.NoError(t, err)
expected := &pref.Preference{ expected := &pref.Preference{
WeekStart: &weekStart,
Theme: "light", Theme: "light",
Timezone: "UTC", Timezone: "UTC",
HomeDashboardID: 0, HomeDashboardID: 0,
@ -72,6 +75,7 @@ func TestGetDefaultsWithI18nFeatureFlag(t *testing.T) {
cfg: setting.NewCfg(), cfg: setting.NewCfg(),
features: featuremgmt.WithFeatures(featuremgmt.FlagInternationalization), features: featuremgmt.WithFeatures(featuremgmt.FlagInternationalization),
} }
weekStart := ""
prefService.cfg.DefaultLocale = "en-US" prefService.cfg.DefaultLocale = "en-US"
prefService.cfg.DefaultTheme = "light" prefService.cfg.DefaultTheme = "light"
prefService.cfg.DateFormats.DefaultTimezone = "UTC" prefService.cfg.DateFormats.DefaultTimezone = "UTC"
@ -79,6 +83,7 @@ func TestGetDefaultsWithI18nFeatureFlag(t *testing.T) {
t.Run("GetDefaults", func(t *testing.T) { t.Run("GetDefaults", func(t *testing.T) {
preference := prefService.GetDefaults() preference := prefService.GetDefaults()
expected := &pref.Preference{ expected := &pref.Preference{
WeekStart: &weekStart,
Theme: "light", Theme: "light",
Timezone: "UTC", Timezone: "UTC",
HomeDashboardID: 0, HomeDashboardID: 0,
@ -100,13 +105,15 @@ func TestGetWithDefaults_withUserAndOrgPrefs(t *testing.T) {
} }
prefService.cfg.DefaultLocale = "en-US" prefService.cfg.DefaultLocale = "en-US"
weekStartOne := "1"
weekStartTwo := "2"
insertPrefs(t, prefService.store, insertPrefs(t, prefService.store,
pref.Preference{ pref.Preference{
OrgID: 1, OrgID: 1,
HomeDashboardID: 1, HomeDashboardID: 1,
Theme: "dark", Theme: "dark",
Timezone: "UTC", Timezone: "UTC",
WeekStart: "1", WeekStart: &weekStartOne,
JSONData: &pref.PreferenceJSONData{ JSONData: &pref.PreferenceJSONData{
Locale: "en-GB", Locale: "en-GB",
}, },
@ -117,7 +124,7 @@ func TestGetWithDefaults_withUserAndOrgPrefs(t *testing.T) {
HomeDashboardID: 4, HomeDashboardID: 4,
Theme: "light", Theme: "light",
Timezone: "browser", Timezone: "browser",
WeekStart: "2", WeekStart: &weekStartTwo,
JSONData: &pref.PreferenceJSONData{ JSONData: &pref.PreferenceJSONData{
Locale: "en-AU", Locale: "en-AU",
}, },
@ -131,7 +138,7 @@ func TestGetWithDefaults_withUserAndOrgPrefs(t *testing.T) {
expected := &pref.Preference{ expected := &pref.Preference{
Theme: "light", Theme: "light",
Timezone: "browser", Timezone: "browser",
WeekStart: "2", WeekStart: &weekStartTwo,
HomeDashboardID: 4, HomeDashboardID: 4,
JSONData: &pref.PreferenceJSONData{ JSONData: &pref.PreferenceJSONData{
Locale: "en-AU", Locale: "en-AU",
@ -150,7 +157,7 @@ func TestGetWithDefaults_withUserAndOrgPrefs(t *testing.T) {
expected := &pref.Preference{ expected := &pref.Preference{
Theme: "dark", Theme: "dark",
Timezone: "UTC", Timezone: "UTC",
WeekStart: "1", WeekStart: &weekStartOne,
HomeDashboardID: 1, HomeDashboardID: 1,
JSONData: &pref.PreferenceJSONData{ JSONData: &pref.PreferenceJSONData{
Locale: "en-GB", Locale: "en-GB",
@ -163,6 +170,7 @@ func TestGetWithDefaults_withUserAndOrgPrefs(t *testing.T) {
} }
func TestGetDefaults_JSONData(t *testing.T) { func TestGetDefaults_JSONData(t *testing.T) {
weekStart := ""
queryPreference := pref.QueryHistoryPreference{ queryPreference := pref.QueryHistoryPreference{
HomeTab: "hometab", HomeTab: "hometab",
} }
@ -235,7 +243,8 @@ func TestGetDefaults_JSONData(t *testing.T) {
preference, err := prefService.GetWithDefaults(context.Background(), query) preference, err := prefService.GetWithDefaults(context.Background(), query)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, &pref.Preference{ require.Equal(t, &pref.Preference{
JSONData: &userPreferencesJsonData, WeekStart: &weekStart,
JSONData: &userPreferencesJsonData,
}, preference) }, preference)
}) })
@ -262,6 +271,7 @@ func TestGetDefaults_JSONData(t *testing.T) {
preference, err := prefService.GetWithDefaults(context.Background(), query) preference, err := prefService.GetWithDefaults(context.Background(), query)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, &pref.Preference{ require.Equal(t, &pref.Preference{
WeekStart: &weekStart,
JSONData: &pref.PreferenceJSONData{ JSONData: &pref.PreferenceJSONData{
Locale: "en-GB", Locale: "en-GB",
Navbar: userNavbarPreferences, Navbar: userNavbarPreferences,
@ -300,12 +310,15 @@ func TestGetDefaults_JSONData(t *testing.T) {
preference, err := prefService.GetWithDefaults(context.Background(), query) preference, err := prefService.GetWithDefaults(context.Background(), query)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, &pref.Preference{ require.Equal(t, &pref.Preference{
JSONData: &team2PreferencesJsonData, JSONData: &team2PreferencesJsonData,
WeekStart: &weekStart,
}, preference) }, preference)
}) })
} }
func TestGetWithDefaults_teams(t *testing.T) { func TestGetWithDefaults_teams(t *testing.T) {
weekStartOne := "1"
weekStartTwo := "2"
prefService := &Service{ prefService := &Service{
store: newFake(), store: newFake(),
cfg: setting.NewCfg(), cfg: setting.NewCfg(),
@ -317,7 +330,7 @@ func TestGetWithDefaults_teams(t *testing.T) {
HomeDashboardID: 1, HomeDashboardID: 1,
Theme: "light", Theme: "light",
Timezone: "browser", Timezone: "browser",
WeekStart: "1", WeekStart: &weekStartOne,
}, },
pref.Preference{ pref.Preference{
OrgID: 1, OrgID: 1,
@ -325,7 +338,7 @@ func TestGetWithDefaults_teams(t *testing.T) {
HomeDashboardID: 3, HomeDashboardID: 3,
Theme: "light", Theme: "light",
Timezone: "browser", Timezone: "browser",
WeekStart: "2", WeekStart: &weekStartTwo,
}, },
pref.Preference{ pref.Preference{
OrgID: 1, OrgID: 1,
@ -333,7 +346,7 @@ func TestGetWithDefaults_teams(t *testing.T) {
HomeDashboardID: 4, HomeDashboardID: 4,
Theme: "light", Theme: "light",
Timezone: "browser", Timezone: "browser",
WeekStart: "2", WeekStart: &weekStartTwo,
}, },
) )
@ -343,7 +356,7 @@ func TestGetWithDefaults_teams(t *testing.T) {
expected := &pref.Preference{ expected := &pref.Preference{
Theme: "light", Theme: "light",
Timezone: "browser", Timezone: "browser",
WeekStart: "2", WeekStart: &weekStartTwo,
HomeDashboardID: 4, HomeDashboardID: 4,
JSONData: &pref.PreferenceJSONData{}, JSONData: &pref.PreferenceJSONData{},
} }
@ -399,7 +412,7 @@ func TestSave(t *testing.T) {
assert.Equal(t, "dark", stored.Theme) assert.Equal(t, "dark", stored.Theme)
assert.Equal(t, "browser", stored.Timezone) assert.Equal(t, "browser", stored.Timezone)
assert.EqualValues(t, 5, stored.HomeDashboardID) assert.EqualValues(t, 5, stored.HomeDashboardID)
assert.Equal(t, "1", stored.WeekStart) assert.Equal(t, "1", *stored.WeekStart)
assert.EqualValues(t, 0, stored.Version) assert.EqualValues(t, 0, stored.Version)
}) })
@ -421,7 +434,7 @@ func TestSave(t *testing.T) {
assert.Empty(t, stored.Theme) assert.Empty(t, stored.Theme)
assert.Equal(t, "UTC", stored.Timezone) assert.Equal(t, "UTC", stored.Timezone)
assert.Zero(t, stored.HomeDashboardID) assert.Zero(t, stored.HomeDashboardID)
assert.Equal(t, "1", stored.WeekStart) assert.Equal(t, "1", *stored.WeekStart)
assert.EqualValues(t, 1, stored.Version) assert.EqualValues(t, 1, stored.Version)
}) })
@ -440,7 +453,7 @@ func TestSave(t *testing.T) {
assert.Equal(t, themeValue, stored.Theme) assert.Equal(t, themeValue, stored.Theme)
assert.Equal(t, "UTC", stored.Timezone) assert.Equal(t, "UTC", stored.Timezone)
assert.Zero(t, stored.HomeDashboardID) assert.Zero(t, stored.HomeDashboardID)
assert.Equal(t, "1", stored.WeekStart) assert.Equal(t, "1", *stored.WeekStart)
assert.EqualValues(t, 2, stored.Version) assert.EqualValues(t, 2, stored.Version)
}) })
} }

View File

@ -17,7 +17,7 @@ type getStore func(db.DB) store
func testIntegrationPreferencesDataAccess(t *testing.T, fn getStore) { func testIntegrationPreferencesDataAccess(t *testing.T, fn getStore) {
t.Helper() t.Helper()
weekStartOne := "1"
ss := db.InitTestDB(t) ss := db.InitTestDB(t)
prefStore := fn(ss) prefStore := fn(ss)
orgNavbarPreferences := pref.NavbarPreference{ orgNavbarPreferences := pref.NavbarPreference{
@ -123,7 +123,7 @@ func testIntegrationPreferencesDataAccess(t *testing.T, fn getStore) {
Theme: "dark", Theme: "dark",
Timezone: "browser", Timezone: "browser",
HomeDashboardID: 5, HomeDashboardID: 5,
WeekStart: "1", WeekStart: &weekStartOne,
JSONData: &pref.PreferenceJSONData{Navbar: orgNavbarPreferences}, JSONData: &pref.PreferenceJSONData{Navbar: orgNavbarPreferences},
Created: time.Now(), Created: time.Now(),
Updated: time.Now(), Updated: time.Now(),
@ -135,7 +135,7 @@ func testIntegrationPreferencesDataAccess(t *testing.T, fn getStore) {
Theme: "dark", Theme: "dark",
HomeDashboardID: 5, HomeDashboardID: 5,
Timezone: "browser", Timezone: "browser",
WeekStart: "1", WeekStart: &weekStartOne,
Created: time.Now(), Created: time.Now(),
Updated: time.Now(), Updated: time.Now(),
JSONData: &pref.PreferenceJSONData{}, JSONData: &pref.PreferenceJSONData{},
@ -149,7 +149,7 @@ func testIntegrationPreferencesDataAccess(t *testing.T, fn getStore) {
Version: prefs[0].Version, Version: prefs[0].Version,
HomeDashboardID: 5, HomeDashboardID: 5,
Timezone: "browser", Timezone: "browser",
WeekStart: "1", WeekStart: &weekStartOne,
Theme: "dark", Theme: "dark",
JSONData: prefs[0].JSONData, JSONData: prefs[0].JSONData,
Created: prefs[0].Created, Created: prefs[0].Created,