github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/cmd/hkserver/commands/user_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package commands 5 6 import ( 7 "context" 8 "testing" 9 10 "github.com/stretchr/testify/require" 11 12 "github.com/masterhung0112/hk_server/v5/model" 13 ) 14 15 func TestCreateUserWithTeam(t *testing.T) { 16 th := Setup(t).InitBasic() 17 defer th.TearDown() 18 19 id := model.NewId() 20 email := "success+" + id + "@simulator.amazonses.com" 21 username := "name" + id 22 23 th.CheckCommand(t, "user", "create", "--email", email, "--password", "mypassword1", "--username", username) 24 25 th.CheckCommand(t, "team", "add", th.BasicTeam.Id, email) 26 27 profiles := th.SystemAdminClient.Must(th.SystemAdminClient.GetUsersInTeam(th.BasicTeam.Id, 0, 1000, "")).([]*model.User) 28 29 found := false 30 31 for _, user := range profiles { 32 if user.Email == email { 33 found = true 34 } 35 36 } 37 38 require.True(t, found, "Failed to create User") 39 } 40 41 func TestCreateUserWithoutTeam(t *testing.T) { 42 th := Setup(t) 43 defer th.TearDown() 44 45 id := model.NewId() 46 email := "success+" + id + "@simulator.amazonses.com" 47 username := "name" + id 48 49 th.CheckCommand(t, "user", "create", "--email", email, "--password", "mypassword1", "--username", username) 50 51 user, err := th.App.Srv().Store.User().GetByEmail(email) 52 require.NoError(t, err) 53 54 require.Equal(t, email, user.Email) 55 } 56 57 func TestResetPassword(t *testing.T) { 58 th := Setup(t).InitBasic() 59 defer th.TearDown() 60 61 th.CheckCommand(t, "user", "password", th.BasicUser.Email, "password2") 62 63 th.Client.Logout() 64 th.BasicUser.Password = "password2" 65 th.LoginBasic() 66 } 67 68 func TestMakeUserActiveAndInactive(t *testing.T) { 69 th := Setup(t).InitBasic() 70 defer th.TearDown() 71 72 // first inactivate the user 73 th.CheckCommand(t, "user", "deactivate", th.BasicUser.Email) 74 75 // activate the inactive user 76 th.CheckCommand(t, "user", "activate", th.BasicUser.Email) 77 } 78 79 func TestChangeUserEmail(t *testing.T) { 80 th := Setup(t).InitBasic() 81 defer th.TearDown() 82 83 newEmail := model.NewId() + "@mattermost-test.com" 84 85 th.CheckCommand(t, "user", "email", th.BasicUser.Username, newEmail) 86 _, err := th.App.Srv().Store.User().GetByEmail(th.BasicUser.Email) 87 require.Error(t, err, "should've updated to the new email") 88 89 user, err := th.App.Srv().Store.User().GetByEmail(newEmail) 90 require.NoError(t, err) 91 92 require.Equal(t, user.Email, newEmail, "should've updated to the new email") 93 94 // should fail because using an invalid email 95 require.Error(t, th.RunCommand(t, "user", "email", th.BasicUser.Username, "wrong$email.com")) 96 97 // should fail because missing one parameter 98 require.Error(t, th.RunCommand(t, "user", "email", th.BasicUser.Username)) 99 100 // should fail because missing both parameters 101 require.Error(t, th.RunCommand(t, "user", "email")) 102 103 // should fail because have more than 2 parameters 104 require.Error(t, th.RunCommand(t, "user", "email", th.BasicUser.Username, "new@email.com", "extra!")) 105 106 // should fail because user not found 107 require.Error(t, th.RunCommand(t, "user", "email", "invalidUser", newEmail)) 108 109 // should fail because email already in use 110 require.Error(t, th.RunCommand(t, "user", "email", th.BasicUser.Username, th.BasicUser2.Email)) 111 112 } 113 114 func TestDeleteUserBotUser(t *testing.T) { 115 th := Setup(t).InitBasic() 116 defer th.TearDown() 117 118 th.CheckCommand(t, "user", "delete", th.BasicUser.Username, "--confirm") 119 _, err := th.App.Srv().Store.User().Get(context.Background(), th.BasicUser.Id) 120 require.Error(t, err) 121 122 // Make a bot 123 bot := &model.Bot{ 124 Username: "bottodelete", 125 Description: "Delete me!", 126 OwnerId: model.NewId(), 127 } 128 user, err := th.App.Srv().Store.User().Save(model.UserFromBot(bot)) 129 require.NoError(t, err) 130 bot.UserId = user.Id 131 bot, nErr := th.App.Srv().Store.Bot().Save(bot) 132 require.NoError(t, nErr) 133 134 th.CheckCommand(t, "user", "delete", bot.Username, "--confirm") 135 _, err = th.App.Srv().Store.User().Get(context.Background(), user.Id) 136 require.Error(t, err) 137 _, nErr = th.App.Srv().Store.Bot().Get(user.Id, true) 138 require.Error(t, nErr) 139 } 140 141 func TestConvertUser(t *testing.T) { 142 th := Setup(t).InitBasic() 143 defer th.TearDown() 144 145 t.Run("Invalid command line input", func(t *testing.T) { 146 err := th.RunCommand(t, "user", "convert", th.BasicUser.Username) 147 require.Error(t, err) 148 149 err = th.RunCommand(t, "user", "convert", th.BasicUser.Username, "--user", "--bot") 150 require.Error(t, err) 151 152 err = th.RunCommand(t, "user", "convert", "--bot") 153 require.Error(t, err) 154 }) 155 156 t.Run("Convert to bot from username", func(t *testing.T) { 157 th.CheckCommand(t, "user", "convert", th.BasicUser.Username, "anotherinvaliduser", "--bot") 158 _, err := th.App.Srv().Store.Bot().Get(th.BasicUser.Id, false) 159 require.NoError(t, err) 160 }) 161 162 t.Run("Unable to convert to user with missing password", func(t *testing.T) { 163 err := th.RunCommand(t, "user", "convert", th.BasicUser.Username, "--user") 164 require.Error(t, err) 165 }) 166 167 t.Run("Unable to convert to user with invalid email", func(t *testing.T) { 168 err := th.RunCommand(t, "user", "convert", th.BasicUser.Username, "--user", 169 "--password", "password", 170 "--email", "invalidEmail") 171 require.Error(t, err) 172 }) 173 174 t.Run("Convert to user with minimum flags", func(t *testing.T) { 175 err := th.RunCommand(t, "user", "convert", th.BasicUser.Username, "--user", 176 "--password", "password") 177 require.NoError(t, err) 178 _, err = th.App.Srv().Store.Bot().Get(th.BasicUser.Id, false) 179 require.Error(t, err) 180 }) 181 182 t.Run("Convert to bot from email", func(t *testing.T) { 183 th.CheckCommand(t, "user", "convert", th.BasicUser2.Email, "--bot") 184 _, err := th.App.Srv().Store.Bot().Get(th.BasicUser2.Id, false) 185 require.NoError(t, err) 186 }) 187 188 t.Run("Convert to user with all flags", func(t *testing.T) { 189 err := th.RunCommand(t, "user", "convert", th.BasicUser2.Username, "--user", 190 "--password", "password", 191 "--username", "newusername", 192 "--email", "valid@email.com", 193 "--nickname", "newNickname", 194 "--firstname", "newFirstName", 195 "--lastname", "newLastName", 196 "--locale", "en_CA", 197 "--system_admin") 198 require.NoError(t, err) 199 200 _, err = th.App.Srv().Store.Bot().Get(th.BasicUser2.Id, false) 201 require.Error(t, err) 202 203 user, appErr := th.App.Srv().Store.User().Get(context.Background(), th.BasicUser2.Id) 204 require.NoError(t, appErr) 205 require.Equal(t, "newusername", user.Username) 206 require.Equal(t, "valid@email.com", user.Email) 207 require.Equal(t, "newNickname", user.Nickname) 208 require.Equal(t, "newFirstName", user.FirstName) 209 require.Equal(t, "newLastName", user.LastName) 210 require.Equal(t, "en_CA", user.Locale) 211 require.True(t, user.IsInRole("system_admin")) 212 }) 213 214 }