mirror of
https://github.com/mattermost/mattermost.git
synced 2026-08-27 05:37:15 -05:00
[MM-13747] Add ability to list users to plugin API (#10102)
* add GetUsers in plugin api * change GetUsers(page int, perPage int) ([]*model.User, *model.AppError) to GetUsers(options *model.UserGetOptions) ([]*model.User, *model.AppError) * Update GetUsers doc Co-Authored-By: dom3k <szeptweb@gmail.com> * Update doc in plugin/api.go Co-Authored-By: dom3k <szeptweb@gmail.com> * correct database initialization for the test * Update plugin/api.go Co-Authored-By: dom3k <szeptweb@gmail.com>
This commit is contained in:
@@ -179,6 +179,10 @@ func (api *PluginAPI) DeleteUser(userId string) *model.AppError {
|
||||
return err
|
||||
}
|
||||
|
||||
func (api *PluginAPI) GetUsers(options *model.UserGetOptions) ([]*model.User, *model.AppError) {
|
||||
return api.app.GetUsers(options)
|
||||
}
|
||||
|
||||
func (api *PluginAPI) GetUser(userId string) (*model.User, *model.AppError) {
|
||||
return api.app.GetUser(userId)
|
||||
}
|
||||
|
||||
@@ -47,6 +47,93 @@ func setupPluginApiTest(t *testing.T, pluginCode string, pluginManifest string,
|
||||
app.SetPluginsEnvironment(env)
|
||||
}
|
||||
|
||||
func TestPluginAPIGetUsers(t *testing.T) {
|
||||
th := Setup()
|
||||
defer th.TearDown()
|
||||
api := th.SetupPluginAPI()
|
||||
|
||||
user1, err := th.App.CreateUser(&model.User{
|
||||
Email: strings.ToLower(model.NewId()) + "success+test@example.com",
|
||||
Password: "password",
|
||||
Username: "user1" + model.NewId(),
|
||||
})
|
||||
require.Nil(t, err)
|
||||
defer th.App.PermanentDeleteUser(user1)
|
||||
|
||||
user2, err := th.App.CreateUser(&model.User{
|
||||
Email: strings.ToLower(model.NewId()) + "success+test@example.com",
|
||||
Password: "password",
|
||||
Username: "user2" + model.NewId(),
|
||||
})
|
||||
require.Nil(t, err)
|
||||
defer th.App.PermanentDeleteUser(user2)
|
||||
|
||||
user3, err := th.App.CreateUser(&model.User{
|
||||
Email: strings.ToLower(model.NewId()) + "success+test@example.com",
|
||||
Password: "password",
|
||||
Username: "user3" + model.NewId(),
|
||||
})
|
||||
require.Nil(t, err)
|
||||
defer th.App.PermanentDeleteUser(user3)
|
||||
|
||||
user4, err := th.App.CreateUser(&model.User{
|
||||
Email: strings.ToLower(model.NewId()) + "success+test@example.com",
|
||||
Password: "password",
|
||||
Username: "user4" + model.NewId(),
|
||||
})
|
||||
require.Nil(t, err)
|
||||
defer th.App.PermanentDeleteUser(user4)
|
||||
|
||||
testCases := []struct {
|
||||
Description string
|
||||
Page int
|
||||
PerPage int
|
||||
ExpectedUsers []*model.User
|
||||
}{
|
||||
{
|
||||
"page 0, perPage 0",
|
||||
0,
|
||||
0,
|
||||
[]*model.User{},
|
||||
},
|
||||
{
|
||||
"page 0, perPage 10",
|
||||
0,
|
||||
10,
|
||||
[]*model.User{user1, user2, user3, user4},
|
||||
},
|
||||
{
|
||||
"page 0, perPage 2",
|
||||
0,
|
||||
2,
|
||||
[]*model.User{user1, user2},
|
||||
},
|
||||
{
|
||||
"page 1, perPage 2",
|
||||
1,
|
||||
2,
|
||||
[]*model.User{user3, user4},
|
||||
},
|
||||
{
|
||||
"page 10, perPage 10",
|
||||
10,
|
||||
10,
|
||||
[]*model.User{},
|
||||
},
|
||||
}
|
||||
|
||||
for _, testCase := range testCases {
|
||||
t.Run(testCase.Description, func(t *testing.T) {
|
||||
users, err := api.GetUsers(&model.UserGetOptions{
|
||||
Page: testCase.Page,
|
||||
PerPage: testCase.PerPage,
|
||||
})
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, testCase.ExpectedUsers, users)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestPluginAPIGetUsersInTeam(t *testing.T) {
|
||||
th := Setup().InitBasic()
|
||||
defer th.TearDown()
|
||||
|
||||
@@ -55,6 +55,11 @@ type API interface {
|
||||
// DeleteUser deletes a user.
|
||||
DeleteUser(userId string) *model.AppError
|
||||
|
||||
// GetUsers a list of users based on search options.
|
||||
//
|
||||
// Minimum server version: 5.10
|
||||
GetUsers(*model.UserGetOptions) ([]*model.User, *model.AppError)
|
||||
|
||||
// GetUser gets a user.
|
||||
GetUser(userId string) (*model.User, *model.AppError)
|
||||
|
||||
|
||||
@@ -755,6 +755,35 @@ func (s *apiRPCServer) DeleteUser(args *Z_DeleteUserArgs, returns *Z_DeleteUserR
|
||||
return nil
|
||||
}
|
||||
|
||||
type Z_GetUsersArgs struct {
|
||||
A *model.UserGetOptions
|
||||
}
|
||||
|
||||
type Z_GetUsersReturns struct {
|
||||
A []*model.User
|
||||
B *model.AppError
|
||||
}
|
||||
|
||||
func (g *apiRPCClient) GetUsers(*model.UserGetOptions) ([]*model.User, *model.AppError) {
|
||||
_args := &Z_GetUsersArgs{}
|
||||
_returns := &Z_GetUsersReturns{}
|
||||
if err := g.client.Call("Plugin.GetUsers", _args, _returns); err != nil {
|
||||
log.Printf("RPC call to GetUsers API failed: %s", err.Error())
|
||||
}
|
||||
return _returns.A, _returns.B
|
||||
}
|
||||
|
||||
func (s *apiRPCServer) GetUsers(args *Z_GetUsersArgs, returns *Z_GetUsersReturns) error {
|
||||
if hook, ok := s.impl.(interface {
|
||||
GetUsers(*model.UserGetOptions) ([]*model.User, *model.AppError)
|
||||
}); ok {
|
||||
returns.A, returns.B = hook.GetUsers(args.A)
|
||||
} else {
|
||||
return encodableError(fmt.Errorf("API GetUsers called but not implemented."))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type Z_GetUserArgs struct {
|
||||
A string
|
||||
}
|
||||
|
||||
@@ -1516,6 +1516,31 @@ func (_m *API) GetUserStatusesByIds(userIds []string) ([]*model.Status, *model.A
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// GetUsers provides a mock function with given fields: _a0
|
||||
func (_m *API) GetUsers(_a0 *model.UserGetOptions) ([]*model.User, *model.AppError) {
|
||||
ret := _m.Called(_a0)
|
||||
|
||||
var r0 []*model.User
|
||||
if rf, ok := ret.Get(0).(func(*model.UserGetOptions) []*model.User); ok {
|
||||
r0 = rf(_a0)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).([]*model.User)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 *model.AppError
|
||||
if rf, ok := ret.Get(1).(func(*model.UserGetOptions) *model.AppError); ok {
|
||||
r1 = rf(_a0)
|
||||
} else {
|
||||
if ret.Get(1) != nil {
|
||||
r1 = ret.Get(1).(*model.AppError)
|
||||
}
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// GetUsersByUsernames provides a mock function with given fields: usernames
|
||||
func (_m *API) GetUsersByUsernames(usernames []string) ([]*model.User, *model.AppError) {
|
||||
ret := _m.Called(usernames)
|
||||
|
||||
Reference in New Issue
Block a user