diff --git a/docs/sources/http_api/org.md b/docs/sources/http_api/org.md index bdba36d495d..32d164f1310 100644 --- a/docs/sources/http_api/org.md +++ b/docs/sources/http_api/org.md @@ -325,7 +325,7 @@ Content-Type: application/json ### Search all Organizations -`GET /api/orgs` +`GET /api/orgs?perpage=10&page=1` Only works with Basic Authentication (username and password), see [introduction](#admin-organizations-api). @@ -339,6 +339,8 @@ Content-Type: application/json Note: The api will only work when you pass the admin name and password to the request HTTP URL, like http://admin:admin@localhost:3000/api/orgs +Default value for the `perpage` parameter is `1000` and for the `page` parameter is `0`. + **Example Response**: ```http diff --git a/pkg/api/org.go b/pkg/api/org.go index cb518d4ae78..e79c6eb523e 100644 --- a/pkg/api/org.go +++ b/pkg/api/org.go @@ -160,11 +160,18 @@ func DeleteOrgByID(c *models.ReqContext) Response { } func SearchOrgs(c *models.ReqContext) Response { + perPage := c.QueryInt("perpage") + if perPage <= 0 { + perPage = 1000 + } + + page := c.QueryInt("page") + query := models.SearchOrgsQuery{ Query: c.Query("query"), Name: c.Query("name"), - Page: 0, - Limit: 1000, + Page: page, + Limit: perPage, } if err := bus.Dispatch(&query); err != nil { diff --git a/pkg/services/sqlstore/org_test.go b/pkg/services/sqlstore/org_test.go index c5a2e0086aa..1e6ca237096 100644 --- a/pkg/services/sqlstore/org_test.go +++ b/pkg/services/sqlstore/org_test.go @@ -35,6 +35,38 @@ func TestAccountDataAccess(t *testing.T) { So(len(query.Result), ShouldEqual, 3) }) + Convey("Given we have organizations, we can limit and paginate search", func() { + for i := 1; i < 4; i++ { + cmd := &models.CreateOrgCommand{Name: fmt.Sprint("Org #", i)} + err := CreateOrg(cmd) + So(err, ShouldBeNil) + } + + Convey("Should be able to search with defaults", func() { + query := &models.SearchOrgsQuery{} + err := SearchOrgs(query) + + So(err, ShouldBeNil) + So(len(query.Result), ShouldEqual, 3) + }) + + Convey("Should be able to limit search", func() { + query := &models.SearchOrgsQuery{Limit: 1} + err := SearchOrgs(query) + + So(err, ShouldBeNil) + So(len(query.Result), ShouldEqual, 1) + }) + + Convey("Should be able to limit and paginate search", func() { + query := &models.SearchOrgsQuery{Limit: 2, Page: 1} + err := SearchOrgs(query) + + So(err, ShouldBeNil) + So(len(query.Result), ShouldEqual, 1) + }) + }) + Convey("Given single org mode", func() { setting.AutoAssignOrg = true setting.AutoAssignOrgId = 1