[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>
Этот коммит содержится в:
Ben Cooke
2022-06-08 14:56:34 -04:00
коммит произвёл GitHub
родитель 719e4504b8
Коммит 2c63e8dd08
5 изменённых файлов: 93 добавлений и 34 удалений

Просмотреть файл

@@ -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)

Просмотреть файл

@@ -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