[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
Этот коммит содержится в:
Allan Guwatudde
2021-07-23 19:54:51 +03:00
коммит произвёл GitHub
родитель 5d4769318a
Коммит e252608068
5 изменённых файлов: 73 добавлений и 25 удалений

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

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

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

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

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

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

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

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

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

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