mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
127 lines
3.8 KiB
Go
127 lines
3.8 KiB
Go
|
package api
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"net/http"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/grafana/grafana/pkg/api/dtos"
|
||
|
"github.com/grafana/grafana/pkg/bus"
|
||
|
"github.com/grafana/grafana/pkg/models"
|
||
|
"github.com/grafana/grafana/pkg/setting"
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func setUpGetOrgUsersHandler() {
|
||
|
bus.AddHandler("test", func(query *models.GetOrgUsersQuery) error {
|
||
|
query.Result = []*models.OrgUserDTO{
|
||
|
{Email: "testUser@grafana.com", Login: testUserLogin},
|
||
|
{Email: "user1@grafana.com", Login: "user1"},
|
||
|
{Email: "user2@grafana.com", Login: "user2"},
|
||
|
}
|
||
|
return nil
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func TestOrgUsersAPIEndpoint_userLoggedIn(t *testing.T) {
|
||
|
settings := setting.NewCfg()
|
||
|
hs := &HTTPServer{Cfg: settings}
|
||
|
|
||
|
loggedInUserScenario(t, "When calling GET on", "api/org/users", func(sc *scenarioContext) {
|
||
|
setUpGetOrgUsersHandler()
|
||
|
|
||
|
sc.handlerFunc = hs.GetOrgUsersForCurrentOrg
|
||
|
sc.fakeReqWithParams("GET", sc.url, map[string]string{}).exec()
|
||
|
|
||
|
require.Equal(t, http.StatusOK, sc.resp.Code)
|
||
|
|
||
|
var resp []models.OrgUserDTO
|
||
|
err := json.Unmarshal(sc.resp.Body.Bytes(), &resp)
|
||
|
require.NoError(t, err)
|
||
|
assert.Len(t, resp, 3)
|
||
|
})
|
||
|
|
||
|
loggedInUserScenario(t, "When calling GET as an editor with no team / folder permissions on",
|
||
|
"api/org/users/lookup", func(sc *scenarioContext) {
|
||
|
setUpGetOrgUsersHandler()
|
||
|
bus.AddHandler("test", func(query *models.HasAdminPermissionInFoldersQuery) error {
|
||
|
query.Result = false
|
||
|
return nil
|
||
|
})
|
||
|
bus.AddHandler("test", func(query *models.IsAdminOfTeamsQuery) error {
|
||
|
query.Result = false
|
||
|
return nil
|
||
|
})
|
||
|
|
||
|
sc.handlerFunc = hs.GetOrgUsersForCurrentOrgLookup
|
||
|
sc.fakeReqWithParams("GET", sc.url, map[string]string{}).exec()
|
||
|
|
||
|
assert.Equal(t, http.StatusForbidden, sc.resp.Code)
|
||
|
|
||
|
var resp struct {
|
||
|
Message string
|
||
|
}
|
||
|
err := json.Unmarshal(sc.resp.Body.Bytes(), &resp)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
assert.Equal(t, "Permission denied", resp.Message)
|
||
|
})
|
||
|
|
||
|
loggedInUserScenarioWithRole(t, "When calling GET as an admin on", "GET", "api/org/users/lookup",
|
||
|
"api/org/users/lookup", models.ROLE_ADMIN, func(sc *scenarioContext) {
|
||
|
setUpGetOrgUsersHandler()
|
||
|
|
||
|
sc.handlerFunc = hs.GetOrgUsersForCurrentOrgLookup
|
||
|
sc.fakeReqWithParams("GET", sc.url, map[string]string{}).exec()
|
||
|
|
||
|
require.Equal(t, http.StatusOK, sc.resp.Code)
|
||
|
|
||
|
var resp []dtos.UserLookupDTO
|
||
|
err := json.Unmarshal(sc.resp.Body.Bytes(), &resp)
|
||
|
require.NoError(t, err)
|
||
|
assert.Len(t, resp, 3)
|
||
|
})
|
||
|
|
||
|
t.Run("Given there is two hidden users", func(t *testing.T) {
|
||
|
settings.HiddenUsers = map[string]struct{}{
|
||
|
"user1": {},
|
||
|
testUserLogin: {},
|
||
|
}
|
||
|
t.Cleanup(func() { settings.HiddenUsers = make(map[string]struct{}) })
|
||
|
|
||
|
loggedInUserScenario(t, "When calling GET on", "api/org/users", func(sc *scenarioContext) {
|
||
|
setUpGetOrgUsersHandler()
|
||
|
|
||
|
sc.handlerFunc = hs.GetOrgUsersForCurrentOrg
|
||
|
sc.fakeReqWithParams("GET", sc.url, map[string]string{}).exec()
|
||
|
|
||
|
require.Equal(t, http.StatusOK, sc.resp.Code)
|
||
|
|
||
|
var resp []models.OrgUserDTO
|
||
|
err := json.Unmarshal(sc.resp.Body.Bytes(), &resp)
|
||
|
require.NoError(t, err)
|
||
|
assert.Len(t, resp, 2)
|
||
|
assert.Equal(t, testUserLogin, resp[0].Login)
|
||
|
assert.Equal(t, "user2", resp[1].Login)
|
||
|
})
|
||
|
|
||
|
loggedInUserScenarioWithRole(t, "When calling GET as an admin on", "GET", "api/org/users/lookup",
|
||
|
"api/org/users/lookup", models.ROLE_ADMIN, func(sc *scenarioContext) {
|
||
|
setUpGetOrgUsersHandler()
|
||
|
|
||
|
sc.handlerFunc = hs.GetOrgUsersForCurrentOrgLookup
|
||
|
sc.fakeReqWithParams("GET", sc.url, map[string]string{}).exec()
|
||
|
|
||
|
require.Equal(t, http.StatusOK, sc.resp.Code)
|
||
|
|
||
|
var resp []dtos.UserLookupDTO
|
||
|
err := json.Unmarshal(sc.resp.Body.Bytes(), &resp)
|
||
|
require.NoError(t, err)
|
||
|
assert.Len(t, resp, 2)
|
||
|
assert.Equal(t, testUserLogin, resp[0].Login)
|
||
|
assert.Equal(t, "user2", resp[1].Login)
|
||
|
})
|
||
|
})
|
||
|
}
|