[MM-21517] Team Member Manage User Modal not display correct roles (#14043)

* join on the users table and order by username

* don't inclue users who have been deleted

* Address PR comments

* update tests

* fix linting

* fix linting

* include ExcludeDeletedUsers flag

* fix gofmt

* fix nil teamMembersGetOptions

* fix gofmt error

* Add Unit Tests

* fix gofmt bugs

* partially address comments

* fix incorrect import

* Address Comments and fix golint errors

* store mocks

* address PR comments about tests and styling

* Update model/team_member.go

Co-Authored-By: Jesse Hallam <jesse.hallam@gmail.com>

* Address PR comments

* update client function name

Co-authored-by: mattermod <mattermod@users.noreply.github.com>
Co-authored-by: Jesse Hallam <jesse.hallam@gmail.com>
Этот коммит содержится в:
Hossein Ahmadian-Yazdi
2020-03-30 10:48:03 -04:00
коммит произвёл GitHub
родитель 7ce68e89d7
Коммит bd2c1f4522
15 изменённых файлов: 305 добавлений и 62 удалений

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

@@ -5,6 +5,7 @@ package app
import (
"fmt"
"math/rand"
"sort"
"strings"
"testing"
@@ -825,15 +826,16 @@ func TestGetTeamMembers(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
var userIDs sort.StringSlice
userIDs = append(userIDs, th.BasicUser.Id)
userIDs = append(userIDs, th.BasicUser2.Id)
var users []model.User
users = append(users, *th.BasicUser)
users = append(users, *th.BasicUser2)
for i := 0; i < 8; i++ {
user := model.User{
Email: strings.ToLower(model.NewId()) + "success+test@example.com",
Username: fmt.Sprintf("user%v", i),
Password: "passwd1",
DeleteAt: int64(rand.Intn(2)),
}
ruser, err := th.App.CreateUser(&user)
require.Nil(t, err)
@@ -843,25 +845,90 @@ func TestGetTeamMembers(t *testing.T) {
_, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "")
require.Nil(t, err)
// Store the user ids for comparison later
userIDs = append(userIDs, ruser.Id)
// Store the users for comparison later
users = append(users, *ruser)
}
// Sort them because the result of GetTeamMembers() is also sorted
sort.Sort(userIDs)
// Fetch team members multipile times
members, err := th.App.GetTeamMembers(th.BasicTeam.Id, 0, 5, nil)
require.Nil(t, err)
t.Run("Ensure Sorted By Username when TeamMemberGet options is passed", func(t *testing.T) {
members, err := th.App.GetTeamMembers(th.BasicTeam.Id, 0, 100, &model.TeamMembersGetOptions{Sort: model.USERNAME})
require.Nil(t, err)
// This should return 5 members
members2, err := th.App.GetTeamMembers(th.BasicTeam.Id, 5, 6, nil)
require.Nil(t, err)
members = append(members, members2...)
// Sort the users array by username
sort.Slice(users, func(i, j int) bool {
return users[i].Username < users[j].Username
})
require.Equal(t, len(userIDs), len(members))
for i, member := range members {
assert.Equal(t, userIDs[i], member.UserId)
}
// We should have the same number of users in both users and members array as we have not excluded any deleted members
require.Equal(t, len(users), len(members))
for i, member := range members {
assert.Equal(t, users[i].Id, member.UserId)
}
})
t.Run("Ensure ExcludedDeletedUsers when TeamMemberGetOptions is passed", func(t *testing.T) {
members, err := th.App.GetTeamMembers(th.BasicTeam.Id, 0, 100, &model.TeamMembersGetOptions{ExcludeDeletedUsers: true})
require.Nil(t, err)
// Choose all users who aren't deleted from our users array
var usersNotDeletedIDs []string
var membersIDs []string
for _, u := range users {
if u.DeleteAt == 0 {
usersNotDeletedIDs = append(usersNotDeletedIDs, u.Id)
}
}
for _, m := range members {
membersIDs = append(membersIDs, m.UserId)
}
require.Equal(t, len(usersNotDeletedIDs), len(membersIDs))
require.ElementsMatch(t, usersNotDeletedIDs, membersIDs)
})
t.Run("Ensure Sorted By Username and ExcludedDeletedUsers when TeamMemberGetOptions is passed", func(t *testing.T) {
members, err := th.App.GetTeamMembers(th.BasicTeam.Id, 0, 100, &model.TeamMembersGetOptions{Sort: model.USERNAME, ExcludeDeletedUsers: true})
require.Nil(t, err)
var usersNotDeleted []model.User
for _, u := range users {
if u.DeleteAt == 0 {
usersNotDeleted = append(usersNotDeleted, u)
}
}
// Sort our non deleted members by username
sort.Slice(usersNotDeleted, func(i, j int) bool {
return usersNotDeleted[i].Username < usersNotDeleted[j].Username
})
require.Equal(t, len(usersNotDeleted), len(members))
for i, member := range members {
assert.Equal(t, usersNotDeleted[i].Id, member.UserId)
}
})
t.Run("Ensure Sorted By User ID when no TeamMemberGetOptions is passed", func(t *testing.T) {
// Sort them by UserID because the result of GetTeamMembers() is also sorted
sort.Slice(users, func(i, j int) bool {
return users[i].Id < users[j].Id
})
// Fetch team members multipile times
members, err := th.App.GetTeamMembers(th.BasicTeam.Id, 0, 5, nil)
require.Nil(t, err)
// This should return 5 members
members2, err := th.App.GetTeamMembers(th.BasicTeam.Id, 5, 6, nil)
require.Nil(t, err)
members = append(members, members2...)
require.Equal(t, len(users), len(members))
for i, member := range members {
assert.Equal(t, users[i].Id, member.UserId)
}
})
}
func TestGetTeamStats(t *testing.T) {