diff --git a/app/plugin_api.go b/app/plugin_api.go index 97996aa05f..9929cc6ec0 100644 --- a/app/plugin_api.go +++ b/app/plugin_api.go @@ -188,7 +188,7 @@ func (api *PluginAPI) GetUsersByUsernames(usernames []string) ([]*model.User, *m } func (api *PluginAPI) GetUsersInTeam(teamId string, page int, perPage int) ([]*model.User, *model.AppError) { - return api.app.GetUsersInTeam(teamId, page, perPage) + return api.app.GetUsersInTeam(teamId, page*perPage, perPage) } func (api *PluginAPI) UpdateUser(user *model.User) (*model.User, *model.AppError) { diff --git a/app/plugin_api_test.go b/app/plugin_api_test.go index a7e28cfa90..afb5ca46e8 100644 --- a/app/plugin_api_test.go +++ b/app/plugin_api_test.go @@ -13,6 +13,7 @@ import ( "io/ioutil" "os" "path/filepath" + "strings" "testing" "github.com/mattermost/mattermost-server/model" @@ -44,6 +45,115 @@ func setupPluginApiTest(t *testing.T, pluginCode string, pluginManifest string, app.SetPluginsEnvironment(env) } +func TestPluginAPIGetUsersInTeam(t *testing.T) { + th := Setup().InitBasic() + defer th.TearDown() + api := th.SetupPluginAPI() + + team1 := th.CreateTeam() + team2 := th.CreateTeam() + + 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) + + // Add all users to team 1 + _, _, err = th.App.joinUserToTeam(team1, user1) + require.Nil(t, err) + _, _, err = th.App.joinUserToTeam(team1, user2) + require.Nil(t, err) + _, _, err = th.App.joinUserToTeam(team1, user3) + require.Nil(t, err) + _, _, err = th.App.joinUserToTeam(team1, user4) + require.Nil(t, err) + + // Add only user3 and user4 to team 2 + _, _, err = th.App.joinUserToTeam(team2, user3) + require.Nil(t, err) + _, _, err = th.App.joinUserToTeam(team2, user4) + require.Nil(t, err) + + testCases := []struct { + Description string + TeamId string + Page int + PerPage int + ExpectedUsers []*model.User + }{ + { + "unknown team", + model.NewId(), + 0, + 0, + []*model.User{}, + }, + { + "team 1, page 0, perPage 10", + team1.Id, + 0, + 10, + []*model.User{user1, user2, user3, user4}, + }, + { + "team 1, page 0, perPage 2", + team1.Id, + 0, + 2, + []*model.User{user1, user2}, + }, + { + "team 1, page 1, perPage 2", + team1.Id, + 1, + 2, + []*model.User{user3, user4}, + }, + { + "team 2, page 0, perPage 10", + team2.Id, + 0, + 10, + []*model.User{user3, user4}, + }, + } + + for _, testCase := range testCases { + t.Run(testCase.Description, func(t *testing.T) { + users, err := api.GetUsersInTeam(testCase.TeamId, testCase.Page, testCase.PerPage) + assert.Nil(t, err) + assert.Equal(t, testCase.ExpectedUsers, users) + }) + } +} + func TestPluginAPIUpdateUserStatus(t *testing.T) { th := Setup().InitBasic() defer th.TearDown() diff --git a/app/plugin_key_value_store.go b/app/plugin_key_value_store.go index aecf0b4aef..a0ec13f18c 100644 --- a/app/plugin_key_value_store.go +++ b/app/plugin_key_value_store.go @@ -104,7 +104,7 @@ func (a *App) DeleteAllExpiredPluginKeys() *model.AppError { } func (a *App) ListPluginKeys(pluginId string, page, perPage int) ([]string, *model.AppError) { - result := <-a.Srv.Store.Plugin().List(pluginId, page, perPage) + result := <-a.Srv.Store.Plugin().List(pluginId, page*perPage, perPage) if result.Err != nil { mlog.Error("Failed to list plugin key values", mlog.Int("page", page), mlog.Int("perPage", perPage), mlog.Err(result.Err)) diff --git a/app/plugin_test.go b/app/plugin_test.go index aab684fc45..fe6b33156b 100644 --- a/app/plugin_test.go +++ b/app/plugin_test.go @@ -34,6 +34,8 @@ func TestPluginKeyValueStore(t *testing.T) { defer func() { assert.Nil(t, th.App.DeletePluginKey(pluginId, "key")) assert.Nil(t, th.App.DeletePluginKey(pluginId, "key2")) + assert.Nil(t, th.App.DeletePluginKey(pluginId, "key3")) + assert.Nil(t, th.App.DeletePluginKey(pluginId, "key4")) }() assert.Nil(t, th.App.SetPluginKey(pluginId, "key", []byte("test"))) @@ -78,36 +80,49 @@ func TestPluginKeyValueStore(t *testing.T) { assert.Equal(t, kv.Value, ret) // Test ListKeys + assert.Nil(t, th.App.SetPluginKey(pluginId, "key3", []byte("test3"))) + assert.Nil(t, th.App.SetPluginKey(pluginId, "key4", []byte("test4"))) + list, err := th.App.ListPluginKeys(pluginId, 0, 1) assert.Nil(t, err) - assert.Equal(t, 1, len(list)) - assert.Equal(t, "key", list[0]) + assert.Equal(t, []string{"key"}, list) list, err = th.App.ListPluginKeys(pluginId, 1, 1) assert.Nil(t, err) - assert.Equal(t, 1, len(list)) - assert.Equal(t, hashedKey2, list[0]) + assert.Equal(t, []string{"key3"}, list) + + list, err = th.App.ListPluginKeys(pluginId, 0, 4) + assert.Nil(t, err) + assert.Equal(t, []string{"key", "key3", "key4", hashedKey2}, list) + + list, err = th.App.ListPluginKeys(pluginId, 0, 2) + assert.Nil(t, err) + assert.Equal(t, []string{"key", "key3"}, list) + + list, err = th.App.ListPluginKeys(pluginId, 1, 2) + assert.Nil(t, err) + assert.Equal(t, []string{"key4", hashedKey2}, list) + + list, err = th.App.ListPluginKeys(pluginId, 2, 2) + assert.Nil(t, err) + assert.Equal(t, []string{}, list) // List Keys bad input list, err = th.App.ListPluginKeys(pluginId, 0, 0) assert.Nil(t, err) - assert.Equal(t, 2, len(list)) + assert.Equal(t, []string{"key", "key3", "key4", hashedKey2}, list) list, err = th.App.ListPluginKeys(pluginId, 0, -1) assert.Nil(t, err) - assert.Equal(t, 2, len(list)) + assert.Equal(t, []string{"key", "key3", "key4", hashedKey2}, list) list, err = th.App.ListPluginKeys(pluginId, -1, 1) assert.Nil(t, err) - assert.Equal(t, 1, len(list)) + assert.Equal(t, []string{"key"}, list) list, err = th.App.ListPluginKeys(pluginId, -1, 0) assert.Nil(t, err) - assert.Equal(t, 2, len(list)) - - list, err = th.App.ListPluginKeys(pluginId, 2, 2) - assert.Nil(t, err) - assert.Equal(t, 0, len(list)) + assert.Equal(t, []string{"key", "key3", "key4", hashedKey2}, list) } func TestServePluginRequest(t *testing.T) {