[MM-43785] Hide insights feature intro for new users (#20214)
* tools updates * Revert "tools updates" This reverts commit 6293297b55803c5a263e200ebd80192899666ae9. * hide insights modal by default for new users * updating feature flag for test * updating preference tests * fixing lint * fixing comment Co-authored-by: Benjamin Cooke <benjamincooke@Benjamins-MacBook-Pro.local> Co-authored-by: Benjamin Cooke <benjamincooke@Benjamins-MBP.ht.home> Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
@@ -49,8 +49,8 @@ func TestGetPreferences(t *testing.T) {
|
||||
prefs, _, err := client.GetPreferences(user1.Id)
|
||||
require.NoError(t, err)
|
||||
|
||||
// 5 because we have 2 initial preferences tutorial_step and recommended_next_steps added when creating a new user
|
||||
require.Equal(t, len(prefs), 5, "received the wrong number of preferences")
|
||||
// 6 because we have 3 initial preferences insights, tutorial_step and recommended_next_steps added when creating a new user
|
||||
require.Equal(t, len(prefs), 6, "received the wrong number of preferences")
|
||||
|
||||
for _, preference := range prefs {
|
||||
require.Equal(t, preference.UserId, th.BasicUser.Id, "user id does not match")
|
||||
|
||||
@@ -177,17 +177,22 @@ func TestPluginAPIGetUserPreferences(t *testing.T) {
|
||||
|
||||
preferences, err := api.GetPreferencesForUser(user1.Id)
|
||||
require.Nil(t, err)
|
||||
assert.Equal(t, 2, len(preferences))
|
||||
assert.Equal(t, 3, len(preferences))
|
||||
|
||||
assert.Equal(t, user1.Id, preferences[0].UserId)
|
||||
assert.Equal(t, model.PreferenceRecommendedNextSteps, preferences[0].Category)
|
||||
assert.Equal(t, "hide", preferences[0].Name)
|
||||
assert.Equal(t, "false", preferences[0].Value)
|
||||
assert.Equal(t, model.PreferenceCategoryInsights, preferences[0].Category)
|
||||
assert.Equal(t, model.PreferenceNameInsights, preferences[0].Name)
|
||||
assert.Equal(t, "{\"insights_modal_viewed\":false}", preferences[0].Value)
|
||||
|
||||
assert.Equal(t, user1.Id, preferences[1].UserId)
|
||||
assert.Equal(t, model.PreferenceCategoryTutorialSteps, preferences[1].Category)
|
||||
assert.Equal(t, user1.Id, preferences[1].Name)
|
||||
assert.Equal(t, "0", preferences[1].Value)
|
||||
assert.Equal(t, model.PreferenceRecommendedNextSteps, preferences[1].Category)
|
||||
assert.Equal(t, "hide", preferences[1].Name)
|
||||
assert.Equal(t, "false", preferences[1].Value)
|
||||
|
||||
assert.Equal(t, user1.Id, preferences[2].UserId)
|
||||
assert.Equal(t, model.PreferenceCategoryTutorialSteps, preferences[2].Category)
|
||||
assert.Equal(t, user1.Id, preferences[2].Name)
|
||||
assert.Equal(t, "0", preferences[2].Value)
|
||||
}
|
||||
|
||||
func TestPluginAPIDeleteUserPreferences(t *testing.T) {
|
||||
@@ -205,7 +210,7 @@ func TestPluginAPIDeleteUserPreferences(t *testing.T) {
|
||||
|
||||
preferences, err := api.GetPreferencesForUser(user1.Id)
|
||||
require.Nil(t, err)
|
||||
assert.Equal(t, 2, len(preferences))
|
||||
assert.Equal(t, 3, len(preferences))
|
||||
|
||||
err = api.DeletePreferencesForUser(user1.Id, preferences)
|
||||
require.Nil(t, err)
|
||||
@@ -232,15 +237,16 @@ func TestPluginAPIDeleteUserPreferences(t *testing.T) {
|
||||
|
||||
preferences, err = api.GetPreferencesForUser(user2.Id)
|
||||
require.Nil(t, err)
|
||||
assert.Equal(t, 3, len(preferences))
|
||||
assert.Equal(t, 4, len(preferences))
|
||||
|
||||
err = api.DeletePreferencesForUser(user2.Id, []model.Preference{preference})
|
||||
require.Nil(t, err)
|
||||
preferences, err = api.GetPreferencesForUser(user2.Id)
|
||||
require.Nil(t, err)
|
||||
assert.Equal(t, 2, len(preferences))
|
||||
assert.Equal(t, model.PreferenceRecommendedNextSteps, preferences[0].Category)
|
||||
assert.Equal(t, model.PreferenceCategoryTutorialSteps, preferences[1].Category)
|
||||
assert.Equal(t, 3, len(preferences))
|
||||
assert.Equal(t, model.PreferenceCategoryInsights, preferences[0].Category)
|
||||
assert.Equal(t, model.PreferenceRecommendedNextSteps, preferences[1].Category)
|
||||
assert.Equal(t, model.PreferenceCategoryTutorialSteps, preferences[2].Category)
|
||||
}
|
||||
|
||||
func TestPluginAPIUpdateUserPreferences(t *testing.T) {
|
||||
@@ -258,17 +264,22 @@ func TestPluginAPIUpdateUserPreferences(t *testing.T) {
|
||||
|
||||
preferences, err := api.GetPreferencesForUser(user1.Id)
|
||||
require.Nil(t, err)
|
||||
assert.Equal(t, 2, len(preferences))
|
||||
assert.Equal(t, 3, len(preferences))
|
||||
|
||||
assert.Equal(t, user1.Id, preferences[0].UserId)
|
||||
assert.Equal(t, model.PreferenceRecommendedNextSteps, preferences[0].Category)
|
||||
assert.Equal(t, "hide", preferences[0].Name)
|
||||
assert.Equal(t, "false", preferences[0].Value)
|
||||
assert.Equal(t, model.PreferenceCategoryInsights, preferences[0].Category)
|
||||
assert.Equal(t, model.PreferenceNameInsights, preferences[0].Name)
|
||||
assert.Equal(t, "{\"insights_modal_viewed\":false}", preferences[0].Value)
|
||||
|
||||
assert.Equal(t, user1.Id, preferences[1].UserId)
|
||||
assert.Equal(t, model.PreferenceCategoryTutorialSteps, preferences[1].Category)
|
||||
assert.Equal(t, user1.Id, preferences[1].Name)
|
||||
assert.Equal(t, "0", preferences[1].Value)
|
||||
assert.Equal(t, model.PreferenceRecommendedNextSteps, preferences[1].Category)
|
||||
assert.Equal(t, "hide", preferences[1].Name)
|
||||
assert.Equal(t, "false", preferences[1].Value)
|
||||
|
||||
assert.Equal(t, user1.Id, preferences[2].UserId)
|
||||
assert.Equal(t, model.PreferenceCategoryTutorialSteps, preferences[2].Category)
|
||||
assert.Equal(t, user1.Id, preferences[2].Name)
|
||||
assert.Equal(t, "0", preferences[2].Value)
|
||||
|
||||
preference := model.Preference{
|
||||
Name: user1.Id,
|
||||
@@ -283,8 +294,8 @@ func TestPluginAPIUpdateUserPreferences(t *testing.T) {
|
||||
preferences, err = api.GetPreferencesForUser(user1.Id)
|
||||
require.Nil(t, err)
|
||||
|
||||
assert.Equal(t, 3, len(preferences))
|
||||
expectedCategories := []string{model.PreferenceCategoryTutorialSteps, model.PreferenceCategoryTheme, model.PreferenceRecommendedNextSteps}
|
||||
assert.Equal(t, 4, len(preferences))
|
||||
expectedCategories := []string{model.PreferenceCategoryTutorialSteps, model.PreferenceCategoryTheme, model.PreferenceRecommendedNextSteps, model.PreferenceCategoryInsights}
|
||||
for _, pref := range preferences {
|
||||
assert.Contains(t, expectedCategories, pref.Category)
|
||||
assert.Equal(t, user1.Id, pref.UserId)
|
||||
|
||||
12
app/user.go
12
app/user.go
@@ -273,7 +273,17 @@ func (a *App) createUserOrGuest(c *request.Context, user *model.User, guest bool
|
||||
|
||||
recommendedNextStepsPref := model.Preference{UserId: ruser.Id, Category: model.PreferenceRecommendedNextSteps, Name: "hide", Value: "false"}
|
||||
tutorialStepPref := model.Preference{UserId: ruser.Id, Category: model.PreferenceCategoryTutorialSteps, Name: ruser.Id, Value: "0"}
|
||||
if err := a.Srv().Store.Preference().Save(model.Preferences{recommendedNextStepsPref, tutorialStepPref}); err != nil {
|
||||
|
||||
preferences := model.Preferences{recommendedNextStepsPref, tutorialStepPref}
|
||||
|
||||
if a.Config().FeatureFlags.InsightsEnabled {
|
||||
// We don't want to show the insights intro modal for new users
|
||||
preferences = append(preferences, model.Preference{UserId: ruser.Id, Category: model.PreferenceCategoryInsights, Name: model.PreferenceNameInsights, Value: "{\"insights_modal_viewed\":true}"})
|
||||
} else {
|
||||
preferences = append(preferences, model.Preference{UserId: ruser.Id, Category: model.PreferenceCategoryInsights, Name: model.PreferenceNameInsights, Value: "{\"insights_modal_viewed\":false}"})
|
||||
}
|
||||
|
||||
if err := a.Srv().Store.Preference().Save(preferences); err != nil {
|
||||
mlog.Warn("Encountered error saving user preferences", mlog.Err(err))
|
||||
}
|
||||
|
||||
|
||||
@@ -1729,36 +1729,72 @@ func TestCreateUserWithInitialPreferences(t *testing.T) {
|
||||
defer th.TearDown()
|
||||
|
||||
t.Run("successfully create a user with initial tutorial and recommended steps preferences", func(t *testing.T) {
|
||||
th.Server.configStore.SetReadOnlyFF(false)
|
||||
defer th.Server.configStore.SetReadOnlyFF(true)
|
||||
th.App.UpdateConfig(func(cfg *model.Config) { cfg.FeatureFlags.InsightsEnabled = true })
|
||||
testUser := th.CreateUser()
|
||||
defer th.App.PermanentDeleteUser(th.Context, testUser)
|
||||
|
||||
preferences, appErr := th.App.GetPreferencesForUser(testUser.Id)
|
||||
require.Nil(t, appErr)
|
||||
|
||||
tutorialStepPref := preferences[1]
|
||||
recommendedNextStepsPref := preferences[0]
|
||||
tutorialStepPref := preferences[2]
|
||||
recommendedNextStepsPref := preferences[1]
|
||||
insightsPref := preferences[0]
|
||||
|
||||
assert.Equal(t, tutorialStepPref.Name, testUser.Id)
|
||||
assert.Equal(t, recommendedNextStepsPref.Category, model.PreferenceRecommendedNextSteps)
|
||||
assert.Equal(t, recommendedNextStepsPref.Name, "hide")
|
||||
assert.Equal(t, recommendedNextStepsPref.Value, "false")
|
||||
assert.Equal(t, insightsPref.Name, "insights_tutorial_state")
|
||||
assert.Equal(t, insightsPref.Value, "{\"insights_modal_viewed\":true}")
|
||||
})
|
||||
|
||||
t.Run("successfully create a user with insights feature flag disabled", func(t *testing.T) {
|
||||
th.Server.configStore.SetReadOnlyFF(false)
|
||||
defer th.Server.configStore.SetReadOnlyFF(true)
|
||||
th.App.UpdateConfig(func(cfg *model.Config) { cfg.FeatureFlags.InsightsEnabled = false })
|
||||
testUser := th.CreateUser()
|
||||
defer th.App.PermanentDeleteUser(th.Context, testUser)
|
||||
|
||||
preferences, appErr := th.App.GetPreferencesForUser(testUser.Id)
|
||||
require.Nil(t, appErr)
|
||||
|
||||
tutorialStepPref := preferences[2]
|
||||
recommendedNextStepsPref := preferences[1]
|
||||
insightsPref := preferences[0]
|
||||
|
||||
assert.Equal(t, tutorialStepPref.Name, testUser.Id)
|
||||
assert.Equal(t, recommendedNextStepsPref.Category, model.PreferenceRecommendedNextSteps)
|
||||
assert.Equal(t, recommendedNextStepsPref.Name, "hide")
|
||||
assert.Equal(t, recommendedNextStepsPref.Value, "false")
|
||||
assert.Equal(t, insightsPref.Name, "insights_tutorial_state")
|
||||
assert.Equal(t, insightsPref.Value, "{\"insights_modal_viewed\":false}")
|
||||
})
|
||||
|
||||
t.Run("successfully create a guest user with initial tutorial and recommended steps preferences", func(t *testing.T) {
|
||||
th.Server.configStore.SetReadOnlyFF(false)
|
||||
defer th.Server.configStore.SetReadOnlyFF(true)
|
||||
th.App.UpdateConfig(func(cfg *model.Config) { cfg.FeatureFlags.InsightsEnabled = true })
|
||||
testUser := th.CreateGuest()
|
||||
defer th.App.PermanentDeleteUser(th.Context, testUser)
|
||||
|
||||
preferences, appErr := th.App.GetPreferencesForUser(testUser.Id)
|
||||
require.Nil(t, appErr)
|
||||
|
||||
assert.Equal(t, testUser.Id, preferences[0].UserId)
|
||||
assert.Equal(t, model.PreferenceRecommendedNextSteps, preferences[0].Category)
|
||||
assert.Equal(t, "hide", preferences[0].Name)
|
||||
assert.Equal(t, "false", preferences[0].Value)
|
||||
|
||||
assert.Equal(t, testUser.Id, preferences[1].UserId)
|
||||
assert.Equal(t, model.PreferenceCategoryTutorialSteps, preferences[1].Category)
|
||||
assert.Equal(t, testUser.Id, preferences[1].Name)
|
||||
assert.Equal(t, "0", preferences[1].Value)
|
||||
assert.Equal(t, model.PreferenceRecommendedNextSteps, preferences[1].Category)
|
||||
assert.Equal(t, "hide", preferences[1].Name)
|
||||
assert.Equal(t, "false", preferences[1].Value)
|
||||
|
||||
assert.Equal(t, testUser.Id, preferences[2].UserId)
|
||||
assert.Equal(t, model.PreferenceCategoryTutorialSteps, preferences[2].Category)
|
||||
assert.Equal(t, testUser.Id, preferences[2].Name)
|
||||
assert.Equal(t, "0", preferences[2].Value)
|
||||
|
||||
assert.Equal(t, testUser.Id, preferences[0].UserId)
|
||||
assert.Equal(t, model.PreferenceCategoryInsights, preferences[0].Category)
|
||||
assert.Equal(t, model.PreferenceNameInsights, preferences[0].Name)
|
||||
assert.Equal(t, "{\"insights_modal_viewed\":true}", preferences[0].Value)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ const (
|
||||
PreferenceCategoryFlaggedPost = "flagged_post"
|
||||
PreferenceCategoryFavoriteChannel = "favorite_channel"
|
||||
PreferenceCategorySidebarSettings = "sidebar_settings"
|
||||
PreferenceCategoryInsights = "insights"
|
||||
|
||||
PreferenceCategoryDisplaySettings = "display_settings"
|
||||
PreferenceNameCollapsedThreadsEnabled = "collapsed_reply_threads"
|
||||
@@ -28,6 +29,7 @@ const (
|
||||
PreferenceNameNameFormat = "name_format"
|
||||
PreferenceNameUseMilitaryTime = "use_military_time"
|
||||
PreferenceRecommendedNextSteps = "recommended_next_steps"
|
||||
PreferenceNameInsights = "insights_tutorial_state"
|
||||
|
||||
PreferenceCategoryTheme = "theme"
|
||||
// the name for theme props is the team id
|
||||
|
||||
Ссылка в новой задаче
Block a user