mattermost-community-enterp.../cmd/mmctl/commands/team_users_test.go
Claude ec1f89217a Merge: Complete Mattermost Server with Community Enterprise
Full Mattermost server source with integrated Community Enterprise features.
Includes vendor directory for offline/air-gapped builds.

Structure:
- enterprise-impl/: Enterprise feature implementations
- enterprise-community/: Init files that register implementations
- enterprise/: Bridge imports (community_imports.go)
- vendor/: All dependencies for offline builds

Build (online):
  go build ./cmd/mattermost

Build (offline/air-gapped):
  go build -mod=vendor ./cmd/mattermost

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 23:59:07 +09:00

348 lines
9.1 KiB
Go

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package commands
import (
"context"
"errors"
"net/http"
"github.com/mattermost/mattermost/server/public/model"
"github.com/spf13/cobra"
"github.com/mattermost/mattermost/server/v8/cmd/mmctl/printer"
)
func (s *MmctlUnitTestSuite) TestTeamUsersArchiveCmd() {
teamArg := "example-team-id"
userArg := "example-user-id"
s.Run("Remove users from team with a non-existent team returns an error", func() {
printer.Clean()
s.client.
EXPECT().
GetTeam(context.TODO(), teamArg, "").
Return(nil, &model.Response{}, nil).
Times(1)
s.client.
EXPECT().
GetTeamByName(context.TODO(), teamArg, "").
Return(nil, &model.Response{}, nil).
Times(1)
err := teamUsersRemoveCmdF(s.client, &cobra.Command{}, []string{teamArg, userArg})
s.Require().Equal(err.Error(), "Unable to find team '"+teamArg+"'")
s.Require().Len(printer.GetLines(), 0)
})
s.Run("Remove users from team with a non-existent user returns an error", func() {
printer.Clean()
mockTeam := &model.Team{Id: teamArg}
mockUser := &model.User{Id: userArg}
s.client.
EXPECT().
GetTeam(context.TODO(), teamArg, "").
Return(mockTeam, &model.Response{}, nil).
Times(1)
s.client.
EXPECT().
GetUserByUsername(context.TODO(), mockUser.Id, "").
Return(nil, nil, nil).
Times(1)
s.client.
EXPECT().
GetUser(context.TODO(), mockUser.Id, "").
Return(nil, nil, nil).
Times(1)
err := teamUsersRemoveCmdF(s.client, &cobra.Command{}, []string{teamArg, mockUser.Id})
s.Require().Error(err)
s.Require().Len(printer.GetLines(), 0)
s.Require().Len(printer.GetErrorLines(), 1)
s.Require().Equal(printer.GetErrorLines()[0], "can't find user '"+userArg+"'")
})
s.Run("Remove users from team by email and get team by name should not return an error", func() {
printer.Clean()
mockTeam := &model.Team{Id: teamArg}
mockUser := &model.User{Id: userArg}
s.client.
EXPECT().
GetTeam(context.TODO(), teamArg, "").
Return(nil, nil, nil).
Times(1)
s.client.
EXPECT().
GetTeamByName(context.TODO(), teamArg, "").
Return(mockTeam, &model.Response{}, nil).
Times(1)
s.client.
EXPECT().
GetUserByUsername(context.TODO(), mockUser.Id, "").
Return(mockUser, nil, nil).
Times(1)
s.client.
EXPECT().
RemoveTeamMember(context.TODO(), mockTeam.Id, mockUser.Id).
Return(&model.Response{StatusCode: http.StatusBadRequest}, nil).
Times(1)
err := teamUsersRemoveCmdF(s.client, &cobra.Command{}, []string{mockTeam.Id, mockUser.Id})
s.Require().Nil(err)
s.Require().Len(printer.GetLines(), 0)
s.Require().Len(printer.GetErrorLines(), 0)
})
s.Run("Remove users from team by email and get team should not return an error", func() {
printer.Clean()
mockTeam := &model.Team{Id: teamArg}
mockUser := &model.User{Id: userArg}
s.client.
EXPECT().
GetTeam(context.TODO(), teamArg, "").
Return(mockTeam, &model.Response{}, nil).
Times(1)
s.client.
EXPECT().
GetUserByUsername(context.TODO(), mockUser.Id, "").
Return(mockUser, nil, nil).
Times(1)
s.client.
EXPECT().
RemoveTeamMember(context.TODO(), mockTeam.Id, mockUser.Id).
Return(&model.Response{StatusCode: http.StatusBadRequest}, nil).
Times(1)
err := teamUsersRemoveCmdF(s.client, &cobra.Command{}, []string{mockTeam.Id, mockUser.Id})
s.Require().Nil(err)
s.Require().Len(printer.GetLines(), 0)
s.Require().Len(printer.GetErrorLines(), 0)
})
s.Run("Remove users from team by username and get team should not return an error", func() {
printer.Clean()
mockTeam := &model.Team{Id: teamArg}
mockUser := &model.User{Id: userArg}
s.client.
EXPECT().
GetTeam(context.TODO(), teamArg, "").
Return(mockTeam, &model.Response{}, nil).
Times(1)
s.client.
EXPECT().
GetUserByUsername(context.TODO(), mockUser.Id, "").
Return(mockUser, nil, nil).
Times(1)
s.client.
EXPECT().
RemoveTeamMember(context.TODO(), mockTeam.Id, mockUser.Id).
Return(&model.Response{StatusCode: http.StatusBadRequest}, nil).
Times(1)
err := teamUsersRemoveCmdF(s.client, &cobra.Command{}, []string{mockTeam.Id, mockUser.Id})
s.Require().Nil(err)
s.Require().Len(printer.GetLines(), 0)
s.Require().Len(printer.GetErrorLines(), 0)
})
s.Run("Remove users from team by user and get team should not return an error", func() {
printer.Clean()
mockTeam := &model.Team{Id: teamArg}
mockUser := &model.User{Id: userArg}
s.client.
EXPECT().
GetTeam(context.TODO(), teamArg, "").
Return(mockTeam, &model.Response{}, nil).
Times(1)
s.client.
EXPECT().
GetUserByUsername(context.TODO(), mockUser.Id, "").
Return(nil, nil, nil).
Times(1)
s.client.
EXPECT().
GetUser(context.TODO(), mockUser.Id, "").
Return(mockUser, nil, nil).
Times(1)
s.client.
EXPECT().
RemoveTeamMember(context.TODO(), mockTeam.Id, mockUser.Id).
Return(&model.Response{StatusCode: http.StatusBadRequest}, nil).
Times(1)
err := teamUsersRemoveCmdF(s.client, &cobra.Command{}, []string{mockTeam.Id, mockUser.Id})
s.Require().Nil(err)
s.Require().Len(printer.GetLines(), 0)
s.Require().Len(printer.GetErrorLines(), 0)
})
s.Run("Remove users from team with an erroneous RemoveTeamMember should return an error", func() {
printer.Clean()
mockTeam := &model.Team{Id: teamArg, Name: "example-name"}
mockUser := &model.User{Id: userArg}
mockError := errors.New("mock error")
s.client.
EXPECT().
GetTeam(context.TODO(), teamArg, "").
Return(mockTeam, &model.Response{}, nil).
Times(1)
s.client.
EXPECT().
GetUserByUsername(context.TODO(), mockUser.Id, "").
Return(mockUser, nil, nil).
Times(1)
s.client.
EXPECT().
RemoveTeamMember(context.TODO(), mockTeam.Id, mockUser.Id).
Return(&model.Response{StatusCode: http.StatusBadRequest}, mockError).
Times(1)
err := teamUsersRemoveCmdF(s.client, &cobra.Command{}, []string{mockTeam.Id, mockUser.Id})
s.Require().Error(err)
s.Require().Len(printer.GetLines(), 0)
s.Require().Len(printer.GetErrorLines(), 1)
s.Require().Equal(printer.GetErrorLines()[0], "unable to remove '"+mockUser.Id+"' from "+mockTeam.Name+". Error: "+mockError.Error())
})
}
func (s *MmctlUnitTestSuite) TestAddUsersCmd() {
mockTeam := model.Team{
Id: "TeamId",
Name: "team1",
DisplayName: "DisplayName",
}
mockUser := model.User{
Id: "UserID",
Username: "ExampleUser",
Email: "example@example.com",
}
s.Run("Add users with a team that cannot be found returns error", func() {
cmd := &cobra.Command{}
s.client.
EXPECT().
GetTeam(context.TODO(), "team1", "").
Return(nil, &model.Response{}, nil).
Times(1)
s.client.
EXPECT().
GetTeamByName(context.TODO(), "team1", "").
Return(nil, &model.Response{}, nil).
Times(1)
err := teamUsersAddCmdF(s.client, cmd, []string{"team1", "user1"})
s.Require().Equal(err.Error(), "Unable to find team 'team1'")
s.Require().Len(printer.GetLines(), 0)
})
s.Run("Add users with nonexistent user in arguments prints error", func() {
printer.Clean()
cmd := &cobra.Command{}
s.client.
EXPECT().
GetTeam(context.TODO(), "team1", "").
Return(&mockTeam, &model.Response{}, nil).
Times(1)
s.client.
EXPECT().
GetUserByUsername(context.TODO(), "user1", "").
Return(nil, &model.Response{}, nil).
Times(1)
s.client.
EXPECT().
GetUser(context.TODO(), "user1", "").
Return(nil, &model.Response{}, nil).
Times(1)
err := teamUsersAddCmdF(s.client, cmd, []string{"team1", "user1"})
s.Require().Error(err)
s.Require().Len(printer.GetErrorLines(), 1)
s.Require().ErrorContains(err, "can't find user 'user1'")
})
s.Run("Add users should print error when cannot add team member", func() {
printer.Clean()
cmd := &cobra.Command{}
s.client.
EXPECT().
GetTeam(context.TODO(), "team1", "").
Return(&mockTeam, &model.Response{}, nil).
Times(1)
s.client.
EXPECT().
GetUserByUsername(context.TODO(), "user1", "").
Return(&mockUser, &model.Response{}, nil).
Times(1)
mockError := errors.New("cannot add team member")
s.client.
EXPECT().
AddTeamMember(context.TODO(), "TeamId", "UserID").
Return(nil, &model.Response{}, mockError).
Times(1)
err := teamUsersAddCmdF(s.client, cmd, []string{"team1", "user1"})
s.Require().Nil(err)
s.Require().Len(printer.GetErrorLines(), 1)
s.Require().Equal(printer.GetErrorLines()[0],
"Unable to add 'user1' to team1. Error: cannot add team member")
})
s.Run("Add users should not print in console anything on success", func() {
printer.Clean()
cmd := &cobra.Command{}
s.client.
EXPECT().
GetTeam(context.TODO(), "team1", "").
Return(&mockTeam, &model.Response{}, nil).
Times(1)
s.client.
EXPECT().
GetUserByUsername(context.TODO(), "user1", "").
Return(&mockUser, &model.Response{}, nil).
Times(1)
s.client.
EXPECT().
AddTeamMember(context.TODO(), "TeamId", "UserID").
Return(nil, &model.Response{}, nil).
Times(1)
err := teamUsersAddCmdF(s.client, cmd, []string{"team1", "user1"})
s.Require().Nil(err)
s.Require().Len(printer.GetLines(), 0)
s.Require().Len(printer.GetErrorLines(), 0)
})
}