Restricting team stats using the VIEW_MEMBERS restrictions (#11694)

* Restricting team stats using the VIEW_MEMBERS restrictions

* Adding tests

* fixing tests
Этот коммит содержится в:
Jesús Espino
2019-07-31 18:34:03 +02:00
коммит произвёл GitHub
родитель 51cdae12c1
Коммит 0ec0616d89
8 изменённых файлов: 155 добавлений и 59 удалений

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

@@ -189,7 +189,7 @@ func (api *PluginAPI) UpdateTeamMemberRoles(teamId, userId, newRoles string) (*m
}
func (api *PluginAPI) GetTeamStats(teamId string) (*model.TeamStats, *model.AppError) {
return api.app.GetTeamStats(teamId)
return api.app.GetTeamStats(teamId, nil)
}
func (api *PluginAPI) CreateUser(user *model.User) (*model.User, *model.AppError) {

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

@@ -561,7 +561,7 @@ func (a *App) joinUserToTeam(team *model.Team, user *model.User) (*model.TeamMem
return rtm, true, nil
}
membersCount, err := a.Srv.Store.Team().GetActiveMemberCount(tm.TeamId)
membersCount, err := a.Srv.Store.Team().GetActiveMemberCount(tm.TeamId, nil)
if err != nil {
return nil, false, err
}
@@ -1238,16 +1238,16 @@ func (a *App) RestoreTeam(teamId string) *model.AppError {
return nil
}
func (a *App) GetTeamStats(teamId string) (*model.TeamStats, *model.AppError) {
func (a *App) GetTeamStats(teamId string, restrictions *model.ViewUsersRestrictions) (*model.TeamStats, *model.AppError) {
tchan := make(chan store.StoreResult, 1)
go func() {
totalMemberCount, err := a.Srv.Store.Team().GetTotalMemberCount(teamId)
totalMemberCount, err := a.Srv.Store.Team().GetTotalMemberCount(teamId, restrictions)
tchan <- store.StoreResult{Data: totalMemberCount, Err: err}
close(tchan)
}()
achan := make(chan store.StoreResult, 1)
go func() {
memberCount, err := a.Srv.Store.Team().GetActiveMemberCount(teamId)
memberCount, err := a.Srv.Store.Team().GetActiveMemberCount(teamId, restrictions)
achan <- store.StoreResult{Data: memberCount, Err: err}
close(achan)
}()

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

@@ -816,12 +816,64 @@ func TestGetTeamStats(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
teamStats, err := th.App.GetTeamStats(th.BasicTeam.Id)
require.Nil(t, err)
require.NotNil(t, teamStats)
members, err := th.App.GetTeamMembers(th.BasicTeam.Id, 0, 5, nil)
require.Nil(t, err)
assert.Equal(t, int64(len(members)), teamStats.TotalMemberCount)
t.Run("without view restrictions", func(t *testing.T) {
teamStats, err := th.App.GetTeamStats(th.BasicTeam.Id, nil)
require.Nil(t, err)
require.NotNil(t, teamStats)
members, err := th.App.GetTeamMembers(th.BasicTeam.Id, 0, 5, nil)
require.Nil(t, err)
assert.Equal(t, int64(len(members)), teamStats.TotalMemberCount)
assert.Equal(t, int64(len(members)), teamStats.ActiveMemberCount)
})
t.Run("with view restrictions by this team", func(t *testing.T) {
restrictions := &model.ViewUsersRestrictions{Teams: []string{th.BasicTeam.Id}}
teamStats, err := th.App.GetTeamStats(th.BasicTeam.Id, restrictions)
require.Nil(t, err)
require.NotNil(t, teamStats)
members, err := th.App.GetTeamMembers(th.BasicTeam.Id, 0, 5, nil)
require.Nil(t, err)
assert.Equal(t, int64(len(members)), teamStats.TotalMemberCount)
assert.Equal(t, int64(len(members)), teamStats.ActiveMemberCount)
})
t.Run("with view restrictions by valid channel", func(t *testing.T) {
restrictions := &model.ViewUsersRestrictions{Teams: []string{}, Channels: []string{th.BasicChannel.Id}}
teamStats, err := th.App.GetTeamStats(th.BasicTeam.Id, restrictions)
require.Nil(t, err)
require.NotNil(t, teamStats)
members, err := th.App.GetChannelMembersPage(th.BasicChannel.Id, 0, 5)
require.Nil(t, err)
assert.Equal(t, int64(len(*members)), teamStats.TotalMemberCount)
assert.Equal(t, int64(len(*members)), teamStats.ActiveMemberCount)
})
t.Run("with view restrictions to not see anything", func(t *testing.T) {
restrictions := &model.ViewUsersRestrictions{Teams: []string{}, Channels: []string{}}
teamStats, err := th.App.GetTeamStats(th.BasicTeam.Id, restrictions)
require.Nil(t, err)
require.NotNil(t, teamStats)
assert.Equal(t, int64(0), teamStats.TotalMemberCount)
assert.Equal(t, int64(0), teamStats.ActiveMemberCount)
})
t.Run("with view restrictions by other team", func(t *testing.T) {
restrictions := &model.ViewUsersRestrictions{Teams: []string{"other-team-id"}}
teamStats, err := th.App.GetTeamStats(th.BasicTeam.Id, restrictions)
require.Nil(t, err)
require.NotNil(t, teamStats)
assert.Equal(t, int64(0), teamStats.TotalMemberCount)
assert.Equal(t, int64(0), teamStats.ActiveMemberCount)
})
t.Run("with view restrictions by not-existing channel", func(t *testing.T) {
restrictions := &model.ViewUsersRestrictions{Teams: []string{}, Channels: []string{"test"}}
teamStats, err := th.App.GetTeamStats(th.BasicTeam.Id, restrictions)
require.Nil(t, err)
require.NotNil(t, teamStats)
assert.Equal(t, int64(0), teamStats.TotalMemberCount)
assert.Equal(t, int64(0), teamStats.ActiveMemberCount)
})
}
func TestUpdateTeamMemberRolesChangingGuest(t *testing.T) {