From e2526080680777465f56d352e526f49b6b628d15 Mon Sep 17 00:00:00 2001 From: Allan Guwatudde Date: Fri, 23 Jul 2021 19:54:51 +0300 Subject: [PATCH] [MM-37064] - Onboarding flow is showing for existing users (#17977) * [MM-37064] - Onboarding flow is showing for existing users * add tests * fix typo * fix lint * fix tests --- api4/preference_test.go | 4 +++- app/plugin_api_test.go | 47 +++++++++++++++++++++++------------------ app/user.go | 7 +++--- app/user_test.go | 39 ++++++++++++++++++++++++++++++++++ model/preference.go | 1 + 5 files changed, 73 insertions(+), 25 deletions(-) diff --git a/api4/preference_test.go b/api4/preference_test.go index 5e92c0e3fc..5f91b54c3f 100644 --- a/api4/preference_test.go +++ b/api4/preference_test.go @@ -48,7 +48,9 @@ func TestGetPreferences(t *testing.T) { prefs, resp := Client.GetPreferences(user1.Id) CheckNoError(t, resp) - require.Equal(t, len(prefs), 4, "received the wrong number of preferences") + + // 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") for _, preference := range prefs { require.Equal(t, preference.UserId, th.BasicUser.Id, "user id does not match") diff --git a/app/plugin_api_test.go b/app/plugin_api_test.go index afcab8bc03..ac899e7dfd 100644 --- a/app/plugin_api_test.go +++ b/app/plugin_api_test.go @@ -177,12 +177,17 @@ func TestPluginAPIGetUserPreferences(t *testing.T) { preferences, err := api.GetPreferencesForUser(user1.Id) require.Nil(t, err) - assert.Equal(t, 1, len(preferences)) + assert.Equal(t, 2, len(preferences)) assert.Equal(t, user1.Id, preferences[0].UserId) - assert.Equal(t, model.PreferenceCategoryTutorialSteps, preferences[0].Category) - assert.Equal(t, user1.Id, preferences[0].Name) - assert.Equal(t, "0", preferences[0].Value) + 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, 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) } func TestPluginAPIDeleteUserPreferences(t *testing.T) { @@ -200,7 +205,7 @@ func TestPluginAPIDeleteUserPreferences(t *testing.T) { preferences, err := api.GetPreferencesForUser(user1.Id) require.Nil(t, err) - assert.Equal(t, 1, len(preferences)) + assert.Equal(t, 2, len(preferences)) err = api.DeletePreferencesForUser(user1.Id, preferences) require.Nil(t, err) @@ -227,14 +232,15 @@ func TestPluginAPIDeleteUserPreferences(t *testing.T) { preferences, err = api.GetPreferencesForUser(user2.Id) require.Nil(t, err) - assert.Equal(t, 2, len(preferences)) + assert.Equal(t, 3, 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, 1, len(preferences)) - assert.Equal(t, model.PreferenceCategoryTutorialSteps, preferences[0].Category) + assert.Equal(t, 2, len(preferences)) + assert.Equal(t, model.PreferenceRecommendedNextSteps, preferences[0].Category) + assert.Equal(t, model.PreferenceCategoryTutorialSteps, preferences[1].Category) } func TestPluginAPIUpdateUserPreferences(t *testing.T) { @@ -252,11 +258,17 @@ func TestPluginAPIUpdateUserPreferences(t *testing.T) { preferences, err := api.GetPreferencesForUser(user1.Id) require.Nil(t, err) - assert.Equal(t, 1, len(preferences)) + assert.Equal(t, 2, len(preferences)) + assert.Equal(t, user1.Id, preferences[0].UserId) - assert.Equal(t, model.PreferenceCategoryTutorialSteps, preferences[0].Category) - assert.Equal(t, user1.Id, preferences[0].Name) - assert.Equal(t, "0", preferences[0].Value) + 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, 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) preference := model.Preference{ Name: user1.Id, @@ -271,18 +283,11 @@ func TestPluginAPIUpdateUserPreferences(t *testing.T) { preferences, err = api.GetPreferencesForUser(user1.Id) require.Nil(t, err) - assert.Equal(t, 2, len(preferences)) - expectedCategories := []string{model.PreferenceCategoryTutorialSteps, model.PreferenceCategoryTheme} + assert.Equal(t, 3, len(preferences)) + expectedCategories := []string{model.PreferenceCategoryTutorialSteps, model.PreferenceCategoryTheme, model.PreferenceRecommendedNextSteps} for _, pref := range preferences { assert.Contains(t, expectedCategories, pref.Category) assert.Equal(t, user1.Id, pref.UserId) - assert.Equal(t, user1.Id, pref.Name) - if pref.Category == model.PreferenceCategoryTutorialSteps { - assert.Equal(t, "0", pref.Value) - } else { - newTheme, _ := json.Marshal(map[string]string{"color": "#ff0000", "color2": "#faf"}) - assert.Equal(t, string(newTheme), pref.Value) - } } } diff --git a/app/user.go b/app/user.go index c5289d4878..698ff4151e 100644 --- a/app/user.go +++ b/app/user.go @@ -258,9 +258,10 @@ func (a *App) createUserOrGuest(c *request.Context, user *model.User, guest bool a.sendUpdatedUserEvent(*nUser) } - pref := model.Preference{UserId: ruser.Id, Category: model.PreferenceCategoryTutorialSteps, Name: ruser.Id, Value: "0"} - if err := a.Srv().Store.Preference().Save(&model.Preferences{pref}); err != nil { - mlog.Warn("Encountered error saving tutorial preference", mlog.Err(err)) + 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 { + mlog.Warn("Encountered error saving user preferences", mlog.Err(err)) } go a.UpdateViewedProductNoticesForNewUser(ruser.Id) diff --git a/app/user_test.go b/app/user_test.go index f936507881..adcf38a51f 100644 --- a/app/user_test.go +++ b/app/user_test.go @@ -1537,3 +1537,42 @@ func TestUpdateThreadReadForUser(t *testing.T) { assert.True(t, threadMembership.Following) }) } + +func TestCreateUserWithInitialPreferences(t *testing.T) { + th := Setup(t).InitBasic() + defer th.TearDown() + + t.Run("successfully create a user with initial tutorial and recommended steps preferences", func(t *testing.T) { + 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] + + 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") + }) + + t.Run("successfully create a guest user with initial tutorial and recommended steps preferences", func(t *testing.T) { + 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) + }) +} diff --git a/model/preference.go b/model/preference.go index 4335962948..d1f8c2e9cf 100644 --- a/model/preference.go +++ b/model/preference.go @@ -28,6 +28,7 @@ const ( PreferenceNameMessageDisplay = "message_display" PreferenceNameNameFormat = "name_format" PreferenceNameUseMilitaryTime = "use_military_time" + PreferenceRecommendedNextSteps = "recommended_next_steps" PreferenceCategoryTheme = "theme" // the name for theme props is the team id