| 
									
										
										
										
											2020-10-16 15:46:14 +08:00
										 |  |  | // +build integration
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-13 03:01:53 +08:00
										 |  |  | package sqlstore | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/models" | 
					
						
							| 
									
										
										
										
											2020-11-16 19:54:12 +08:00
										 |  |  | 	"github.com/stretchr/testify/require" | 
					
						
							| 
									
										
										
										
											2018-11-13 03:01:53 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestPreferencesDataAccess(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2020-11-16 19:54:12 +08:00
										 |  |  | 	ss := InitTestDB(t) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("GetPreferencesWithDefaults with no saved preferences should return defaults", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2020-12-11 18:44:44 +08:00
										 |  |  | 		ss.Cfg.DefaultTheme = "light" | 
					
						
							| 
									
										
										
										
											2020-11-16 19:54:12 +08:00
										 |  |  | 		ss.Cfg.DateFormats.DefaultTimezone = "UTC" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		query := &models.GetPreferencesWithDefaultsQuery{User: &models.SignedInUser{}} | 
					
						
							|  |  |  | 		err := ss.GetPreferencesWithDefaults(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) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("GetPreferencesWithDefaults with saved org and user home dashboard should return user home dashboard", func(t *testing.T) { | 
					
						
							|  |  |  | 		err := SavePreferences(&models.SavePreferencesCommand{OrgId: 1, HomeDashboardId: 1}) | 
					
						
							|  |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		err = SavePreferences(&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(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 := SavePreferences(&models.SavePreferencesCommand{OrgId: 1, HomeDashboardId: 1}) | 
					
						
							|  |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		err = SavePreferences(&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(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 := SavePreferences(&models.SavePreferencesCommand{OrgId: 1, HomeDashboardId: 1}) | 
					
						
							|  |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		err = SavePreferences(&models.SavePreferencesCommand{OrgId: 1, TeamId: 2, HomeDashboardId: 2}) | 
					
						
							|  |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		err = SavePreferences(&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(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 := SavePreferences(&models.SavePreferencesCommand{OrgId: 1, HomeDashboardId: 1}) | 
					
						
							|  |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		err = SavePreferences(&models.SavePreferencesCommand{OrgId: 1, TeamId: 2, HomeDashboardId: 2}) | 
					
						
							|  |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		err = SavePreferences(&models.SavePreferencesCommand{OrgId: 1, TeamId: 3, HomeDashboardId: 3}) | 
					
						
							|  |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		query := &models.GetPreferencesWithDefaultsQuery{User: &models.SignedInUser{OrgId: 1}} | 
					
						
							|  |  |  | 		err = ss.GetPreferencesWithDefaults(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 := SavePreferences(&models.SavePreferencesCommand{OrgId: 1, HomeDashboardId: 1}) | 
					
						
							|  |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		err = SavePreferences(&models.SavePreferencesCommand{OrgId: 1, TeamId: 2, HomeDashboardId: 2}) | 
					
						
							|  |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		err = SavePreferences(&models.SavePreferencesCommand{OrgId: 1, TeamId: 3, HomeDashboardId: 3}) | 
					
						
							|  |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		err = SavePreferences(&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(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 := SavePreferences(&models.SavePreferencesCommand{OrgId: 1, HomeDashboardId: 1}) | 
					
						
							|  |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		err = SavePreferences(&models.SavePreferencesCommand{OrgId: 1, TeamId: 2, HomeDashboardId: 2}) | 
					
						
							|  |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		err = SavePreferences(&models.SavePreferencesCommand{OrgId: 1, TeamId: 3, HomeDashboardId: 3}) | 
					
						
							|  |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		err = SavePreferences(&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(query) | 
					
						
							|  |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		require.Equal(t, int64(1), query.Result.HomeDashboardId) | 
					
						
							| 
									
										
										
										
											2018-11-13 03:01:53 +08:00
										 |  |  | 	}) | 
					
						
							|  |  |  | } |