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  }