Skip to content
This repository was archived by the owner on Mar 17, 2021. It is now read-only.

Commit 7d74f3b

Browse files
authored
Merge pull request #31 from matthiasng/dashboard-tests
2 parents c9c958b + c3a11b4 commit 7d74f3b

File tree

9 files changed

+204
-48
lines changed

9 files changed

+204
-48
lines changed

.drone.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ steps:
88
image: golang
99
commands:
1010
- go mod download
11-
- go test
11+
- go test -cover -race -vet all -mod readonly ./...

admin.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ import (
1111
func (c *Client) CreateUser(user User) (int64, error) {
1212
id := int64(0)
1313
data, err := json.Marshal(user)
14+
if err != nil {
15+
return id, err
16+
}
17+
1418
req, err := c.newRequest("POST", "/api/admin/users", nil, bytes.NewBuffer(data))
1519
if err != nil {
1620
return id, err

dashboard.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ type Dashboard struct {
4545
Meta DashboardMeta `json:"meta"`
4646
Model map[string]interface{} `json:"dashboard"`
4747
Folder int64 `json:"folderId"`
48-
Overwrite bool `json:overwrite`
48+
Overwrite bool `json:"overwrite"`
4949
}
5050

5151
// Deprecated: use NewDashboard instead

dashboard_test.go

Lines changed: 133 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,140 @@ import (
77
)
88

99
const (
10-
getDashboardsJSON = `
11-
[
12-
{
13-
"id": 1,
14-
"uid": "RGAPB1cZz",
15-
"title": "Grafana Stats",
16-
"uri": "db/grafana-stats",
17-
"url": "/dashboards/d/RGAPB1cZz/grafana-stat",
18-
"slug": "",
19-
"type": "dash-db",
20-
"tags": [],
21-
"isStarred": false
22-
}
23-
]
24-
`
10+
createdAndUpdateDashboardResponse = `{
11+
"slug": "test",
12+
"id": 1,
13+
"uid": "nErXDvCkzz",
14+
"status": "success",
15+
"version": 1
16+
}`
17+
18+
getDashboardResponse = `{
19+
"dashboard": {
20+
"id": 1,
21+
"uid": "cIBgcSjkk",
22+
"title": "Production Overview",
23+
"version": 0
24+
},
25+
"meta": {
26+
"isStarred": false,
27+
"url": "/d/cIBgcSjkk/production-overview",
28+
"slug": "production-overview"
29+
}
30+
}`
31+
32+
getDashboardsJSON = `[
33+
{
34+
"id": 1,
35+
"uid": "RGAPB1cZz",
36+
"title": "Grafana Stats",
37+
"uri": "db/grafana-stats",
38+
"url": "/dashboards/d/RGAPB1cZz/grafana-stat",
39+
"slug": "",
40+
"type": "dash-db",
41+
"tags": [],
42+
"isStarred": false
43+
}
44+
]`
2545
)
2646

47+
func TestDashboardCreateAndUpdate(t *testing.T) {
48+
server, client := gapiTestTools(200, createdAndUpdateDashboardResponse)
49+
defer server.Close()
50+
51+
dashboard := Dashboard{
52+
Model: map[string]interface{}{
53+
"title": "test",
54+
},
55+
Folder: 0,
56+
Overwrite: false,
57+
}
58+
59+
resp, err := client.NewDashboard(dashboard)
60+
if err != nil {
61+
t.Fatal(err)
62+
}
63+
64+
t.Log(pretty.PrettyFormat(resp))
65+
66+
if resp.Uid != "nErXDvCkzz" {
67+
t.Errorf("Invalid uid - %s, Expected %s", resp.Uid, "nErXDvCkzz")
68+
}
69+
70+
for _, code := range []int{400, 401, 403, 412} {
71+
server.code = code
72+
_, err = client.NewDashboard(dashboard)
73+
if err == nil {
74+
t.Errorf("%d not detected", code)
75+
}
76+
}
77+
}
78+
79+
func TestDashboardGet(t *testing.T) {
80+
server, client := gapiTestTools(200, getDashboardResponse)
81+
defer server.Close()
82+
83+
resp, err := client.Dashboard("test")
84+
if err != nil {
85+
t.Error(err)
86+
}
87+
uid, ok := resp.Model["uid"]
88+
if !ok || uid != "cIBgcSjkk" {
89+
t.Errorf("Invalid uid - %s, Expected %s", uid, "cIBgcSjkk")
90+
}
91+
92+
resp, err = client.DashboardByUID("cIBgcSjkk")
93+
if err != nil {
94+
t.Error(err)
95+
}
96+
uid, ok = resp.Model["uid"]
97+
if !ok || uid != "cIBgcSjkk" {
98+
t.Errorf("Invalid uid - %s, Expected %s", uid, "cIBgcSjkk")
99+
}
100+
101+
for _, code := range []int{401, 403, 404} {
102+
server.code = code
103+
_, err = client.Dashboard("test")
104+
if err == nil {
105+
t.Errorf("%d not detected", code)
106+
}
107+
108+
_, err = client.DashboardByUID("cIBgcSjkk")
109+
if err == nil {
110+
t.Errorf("%d not detected", code)
111+
}
112+
}
113+
}
114+
115+
func TestDashboardDelete(t *testing.T) {
116+
server, client := gapiTestTools(200, "")
117+
defer server.Close()
118+
119+
err := client.DeleteDashboard("test")
120+
if err != nil {
121+
t.Error(err)
122+
}
123+
124+
err = client.DeleteDashboardByUID("cIBgcSjkk")
125+
if err != nil {
126+
t.Error(err)
127+
}
128+
129+
for _, code := range []int{401, 403, 404, 412} {
130+
server.code = code
131+
132+
err = client.DeleteDashboard("test")
133+
if err == nil {
134+
t.Errorf("%d not detected", code)
135+
}
136+
137+
err = client.DeleteDashboardByUID("cIBgcSjkk")
138+
if err == nil {
139+
t.Errorf("%d not detected", code)
140+
}
141+
}
142+
}
143+
27144
func TestDashboards(t *testing.T) {
28145
server, client := gapiTestTools(200, getDashboardsJSON)
29146
defer server.Close()
@@ -42,4 +159,4 @@ func TestDashboards(t *testing.T) {
42159
if dashboards[0].Id != 1 || dashboards[0].Title != "Grafana Stats" {
43160
t.Error("Not correctly parsing returned dashboards.")
44161
}
45-
}
162+
}

datasource_test.go

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package gapi
22

33
import (
4-
"fmt"
5-
"net/http"
6-
"net/http/httptest"
7-
"net/url"
84
"testing"
95

106
"github.com/gobs/pretty"
@@ -14,31 +10,6 @@ const (
1410
createdDataSourceJSON = `{"id":1,"message":"Datasource added", "name": "test_datasource"}`
1511
)
1612

17-
func gapiTestTools(code int, body string) (*httptest.Server, *Client) {
18-
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
19-
w.WriteHeader(code)
20-
w.Header().Set("Content-Type", "application/json")
21-
fmt.Fprintf(w, body)
22-
}))
23-
24-
tr := &http.Transport{
25-
Proxy: func(req *http.Request) (*url.URL, error) {
26-
return url.Parse(server.URL)
27-
},
28-
}
29-
30-
httpClient := &http.Client{Transport: tr}
31-
32-
url := url.URL{
33-
Scheme: "http",
34-
Host: "my-grafana.com",
35-
}
36-
37-
client := &Client{"my-key", url, httpClient}
38-
39-
return server, client
40-
}
41-
4213
func TestNewDataSource(t *testing.T) {
4314
server, client := gapiTestTools(200, createdDataSourceJSON)
4415
defer server.Close()

folder.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ func (c *Client) NewFolder(title string) (Folder, error) {
6363
"title": title,
6464
}
6565
data, err := json.Marshal(dataMap)
66+
if err != nil {
67+
return folder, err
68+
}
6669
req, err := c.newRequest("POST", "/api/folders", nil, bytes.NewBuffer(data))
6770
if err != nil {
6871
return folder, err
@@ -91,6 +94,9 @@ func (c *Client) UpdateFolder(id string, name string) error {
9194
"name": name,
9295
}
9396
data, err := json.Marshal(dataMap)
97+
if err != nil {
98+
return err
99+
}
94100
req, err := c.newRequest("PUT", fmt.Sprintf("/api/folders/%s", id), nil, bytes.NewBuffer(data))
95101
if err != nil {
96102
return err

mock.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package gapi
2+
3+
import (
4+
"fmt"
5+
"net/http"
6+
"net/http/httptest"
7+
"net/url"
8+
)
9+
10+
type mockServer struct {
11+
code int
12+
server *httptest.Server
13+
}
14+
15+
func (m *mockServer) Close() {
16+
m.server.Close()
17+
}
18+
19+
func gapiTestTools(code int, body string) (*mockServer, *Client) {
20+
mock := &mockServer{
21+
code: code,
22+
}
23+
24+
mock.server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
25+
w.WriteHeader(mock.code)
26+
w.Header().Set("Content-Type", "application/json")
27+
fmt.Fprint(w, body)
28+
}))
29+
30+
tr := &http.Transport{
31+
Proxy: func(req *http.Request) (*url.URL, error) {
32+
return url.Parse(mock.server.URL)
33+
},
34+
}
35+
36+
httpClient := &http.Client{Transport: tr}
37+
38+
url := url.URL{
39+
Scheme: "http",
40+
Host: "my-grafana.com",
41+
}
42+
43+
client := &Client{"my-key", url, httpClient}
44+
return mock, client
45+
}

org_users.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ func (c *Client) AddOrgUser(orgId int64, user, role string) error {
4646
"role": role,
4747
}
4848
data, err := json.Marshal(dataMap)
49+
if err != nil {
50+
return err
51+
}
4952
req, err := c.newRequest("POST", fmt.Sprintf("/api/orgs/%d/users", orgId), nil, bytes.NewBuffer(data))
5053
if err != nil {
5154
return err
@@ -65,6 +68,9 @@ func (c *Client) UpdateOrgUser(orgId, userId int64, role string) error {
6568
"role": role,
6669
}
6770
data, err := json.Marshal(dataMap)
71+
if err != nil {
72+
return err
73+
}
6874
req, err := c.newRequest("PATCH", fmt.Sprintf("/api/orgs/%d/users/%d", orgId, userId), nil, bytes.NewBuffer(data))
6975
if err != nil {
7076
return err

orgs.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,15 @@ func (c *Client) Org(id int64) (Org, error) {
7878
}
7979

8080
func (c *Client) NewOrg(name string) (int64, error) {
81+
id := int64(0)
82+
8183
dataMap := map[string]string{
8284
"name": name,
8385
}
8486
data, err := json.Marshal(dataMap)
85-
id := int64(0)
87+
if err != nil {
88+
return id, err
89+
}
8690
req, err := c.newRequest("POST", "/api/orgs", nil, bytes.NewBuffer(data))
8791
if err != nil {
8892
return id, err
@@ -114,6 +118,9 @@ func (c *Client) UpdateOrg(id int64, name string) error {
114118
"name": name,
115119
}
116120
data, err := json.Marshal(dataMap)
121+
if err != nil {
122+
return err
123+
}
117124
req, err := c.newRequest("PUT", fmt.Sprintf("/api/orgs/%d", id), nil, bytes.NewBuffer(data))
118125
if err != nil {
119126
return err

0 commit comments

Comments
 (0)