mirror of https://github.com/grafana/grafana
The data source list is case sensitive when sorted. This changes the sort to be case insensitive. The test only tests the handler, not the routing or database query.pull/7491/head
parent
5e9653f935
commit
cbd1455c42
@ -0,0 +1,124 @@ |
|||||||
|
package api |
||||||
|
|
||||||
|
import ( |
||||||
|
"encoding/json" |
||||||
|
"net/http" |
||||||
|
"net/http/httptest" |
||||||
|
"path/filepath" |
||||||
|
"testing" |
||||||
|
|
||||||
|
m "github.com/grafana/grafana/pkg/models" |
||||||
|
macaron "gopkg.in/macaron.v1" |
||||||
|
|
||||||
|
"github.com/go-macaron/session" |
||||||
|
"github.com/grafana/grafana/pkg/bus" |
||||||
|
"github.com/grafana/grafana/pkg/middleware" |
||||||
|
. "github.com/smartystreets/goconvey/convey" |
||||||
|
) |
||||||
|
|
||||||
|
const ( |
||||||
|
TestOrgID = 1 |
||||||
|
TestUserID = 1 |
||||||
|
) |
||||||
|
|
||||||
|
func TestDataSourcesProxy(t *testing.T) { |
||||||
|
Convey("Given a user is logged in", t, func() { |
||||||
|
loggedInUserScenario("When calling GET on", "/api/datasources/", func(sc *scenarioContext) { |
||||||
|
|
||||||
|
// Stubs the database query
|
||||||
|
bus.AddHandler("test", func(query *m.GetDataSourcesQuery) error { |
||||||
|
So(query.OrgId, ShouldEqual, TestOrgID) |
||||||
|
query.Result = []*m.DataSource{ |
||||||
|
{Name: "mmm"}, |
||||||
|
{Name: "ZZZ"}, |
||||||
|
{Name: "BBB"}, |
||||||
|
{Name: "aaa"}, |
||||||
|
} |
||||||
|
return nil |
||||||
|
}) |
||||||
|
|
||||||
|
// handler func being tested
|
||||||
|
sc.handlerFunc = GetDataSources |
||||||
|
sc.fakeReq("GET", "/api/datasources").exec() |
||||||
|
|
||||||
|
respJSON := []map[string]interface{}{} |
||||||
|
err := json.NewDecoder(sc.resp.Body).Decode(&respJSON) |
||||||
|
So(err, ShouldBeNil) |
||||||
|
|
||||||
|
Convey("should return list of datasources for org sorted alphabetically and case insensitively", func() { |
||||||
|
So(respJSON[0]["name"], ShouldEqual, "aaa") |
||||||
|
So(respJSON[1]["name"], ShouldEqual, "BBB") |
||||||
|
So(respJSON[2]["name"], ShouldEqual, "mmm") |
||||||
|
So(respJSON[3]["name"], ShouldEqual, "ZZZ") |
||||||
|
}) |
||||||
|
}) |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
func loggedInUserScenario(desc string, url string, fn scenarioFunc) { |
||||||
|
Convey(desc+" "+url, func() { |
||||||
|
defer bus.ClearBusHandlers() |
||||||
|
|
||||||
|
sc := &scenarioContext{} |
||||||
|
viewsPath, _ := filepath.Abs("../../public/views") |
||||||
|
|
||||||
|
sc.m = macaron.New() |
||||||
|
sc.m.Use(macaron.Renderer(macaron.RenderOptions{ |
||||||
|
Directory: viewsPath, |
||||||
|
Delims: macaron.Delims{Left: "[[", Right: "]]"}, |
||||||
|
})) |
||||||
|
|
||||||
|
sc.m.Use(middleware.GetContextHandler()) |
||||||
|
sc.m.Use(middleware.Sessioner(&session.Options{})) |
||||||
|
|
||||||
|
sc.defaultHandler = func(c *middleware.Context) { |
||||||
|
sc.context = c |
||||||
|
sc.context.UserId = TestUserID |
||||||
|
sc.context.OrgId = TestOrgID |
||||||
|
sc.context.OrgRole = m.ROLE_EDITOR |
||||||
|
if sc.handlerFunc != nil { |
||||||
|
sc.handlerFunc(sc.context) |
||||||
|
} |
||||||
|
} |
||||||
|
sc.m.SetAutoHead(true) |
||||||
|
sc.m.Get(url, sc.defaultHandler) |
||||||
|
|
||||||
|
fn(sc) |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
func (sc *scenarioContext) fakeReq(method, url string) *scenarioContext { |
||||||
|
sc.resp = httptest.NewRecorder() |
||||||
|
req, err := http.NewRequest(method, url, nil) |
||||||
|
So(err, ShouldBeNil) |
||||||
|
sc.req = req |
||||||
|
|
||||||
|
return sc |
||||||
|
} |
||||||
|
|
||||||
|
type scenarioContext struct { |
||||||
|
m *macaron.Macaron |
||||||
|
context *middleware.Context |
||||||
|
resp *httptest.ResponseRecorder |
||||||
|
apiKey string |
||||||
|
authHeader string |
||||||
|
handlerFunc handlerFunc |
||||||
|
defaultHandler macaron.Handler |
||||||
|
|
||||||
|
req *http.Request |
||||||
|
} |
||||||
|
|
||||||
|
func (sc *scenarioContext) exec() { |
||||||
|
if sc.apiKey != "" { |
||||||
|
sc.req.Header.Add("Authorization", "Bearer "+sc.apiKey) |
||||||
|
} |
||||||
|
|
||||||
|
if sc.authHeader != "" { |
||||||
|
sc.req.Header.Add("Authorization", sc.authHeader) |
||||||
|
} |
||||||
|
|
||||||
|
sc.m.ServeHTTP(sc.resp, sc.req) |
||||||
|
} |
||||||
|
|
||||||
|
type scenarioFunc func(c *scenarioContext) |
||||||
|
type handlerFunc func(c *middleware.Context) |
||||||
Loading…
Reference in new issue