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

Commit aaaf590

Browse files
author
Gordon Irving
committed
add folder support
1 parent 7fd34a3 commit aaaf590

File tree

2 files changed

+279
-0
lines changed

2 files changed

+279
-0
lines changed

folder.go

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
package gapi
2+
3+
import (
4+
"bytes"
5+
"encoding/json"
6+
"errors"
7+
"fmt"
8+
"io/ioutil"
9+
)
10+
11+
type Folder struct {
12+
Id int64 `json:"id"`
13+
Title string `json:"title"`
14+
}
15+
16+
func (c *Client) Folders() ([]Folder, error) {
17+
folders := make([]Folder, 0)
18+
19+
req, err := c.newRequest("GET", "/api/folders/", nil, nil)
20+
if err != nil {
21+
return folders, err
22+
}
23+
resp, err := c.Do(req)
24+
if err != nil {
25+
return folders, err
26+
}
27+
if resp.StatusCode != 200 {
28+
return folders, errors.New(resp.Status)
29+
}
30+
data, err := ioutil.ReadAll(resp.Body)
31+
if err != nil {
32+
return folders, err
33+
}
34+
err = json.Unmarshal(data, &folders)
35+
return folders, err
36+
}
37+
38+
func (c *Client) Folder(id int64) (Folder, error) {
39+
folder := Folder{}
40+
req, err := c.newRequest("GET", fmt.Sprintf("/api/folders/%d", id), nil, nil)
41+
if err != nil {
42+
return folder, err
43+
}
44+
resp, err := c.Do(req)
45+
if err != nil {
46+
return folder, err
47+
}
48+
if resp.StatusCode != 200 {
49+
return folder, errors.New(resp.Status)
50+
}
51+
data, err := ioutil.ReadAll(resp.Body)
52+
if err != nil {
53+
return folder, err
54+
}
55+
err = json.Unmarshal(data, &folder)
56+
return folder, err
57+
}
58+
59+
func (c *Client) NewFolder(name string) (int64, error) {
60+
dataMap := map[string]string{
61+
"name": name,
62+
}
63+
data, err := json.Marshal(dataMap)
64+
id := int64(0)
65+
req, err := c.newRequest("POST", "/api/folders", nil, bytes.NewBuffer(data))
66+
if err != nil {
67+
return id, err
68+
}
69+
resp, err := c.Do(req)
70+
if err != nil {
71+
return id, err
72+
}
73+
if resp.StatusCode != 200 {
74+
return id, errors.New(resp.Status)
75+
}
76+
data, err = ioutil.ReadAll(resp.Body)
77+
if err != nil {
78+
return id, err
79+
}
80+
tmp := struct {
81+
Id int64 `json:"id"`
82+
}{}
83+
err = json.Unmarshal(data, &tmp)
84+
if err != nil {
85+
return id, err
86+
}
87+
id = tmp.Id
88+
return id, err
89+
}
90+
91+
func (c *Client) UpdateFolder(id int64, name string) error {
92+
dataMap := map[string]string{
93+
"name": name,
94+
}
95+
data, err := json.Marshal(dataMap)
96+
req, err := c.newRequest("PUT", fmt.Sprintf("/api/folders/%d", id), nil, bytes.NewBuffer(data))
97+
if err != nil {
98+
return err
99+
}
100+
resp, err := c.Do(req)
101+
if err != nil {
102+
return err
103+
}
104+
if resp.StatusCode != 200 {
105+
return errors.New(resp.Status)
106+
}
107+
return err
108+
}
109+
110+
func (c *Client) DeleteFolder(id int64) error {
111+
req, err := c.newRequest("DELETE", fmt.Sprintf("/api/folders/%d", id), nil, nil)
112+
if err != nil {
113+
return err
114+
}
115+
resp, err := c.Do(req)
116+
if err != nil {
117+
return err
118+
}
119+
if resp.StatusCode != 200 {
120+
return errors.New(resp.Status)
121+
}
122+
return err
123+
}

folder_test.go

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
package gapi
2+
3+
import (
4+
"github.com/gobs/pretty"
5+
"testing"
6+
)
7+
8+
const (
9+
getFoldersJSON = `
10+
[
11+
{
12+
"id":1,
13+
"uid": "nErXDvCkzz",
14+
"title": "Departmenet ABC",
15+
"url": "/dashboards/f/nErXDvCkzz/department-abc",
16+
"hasAcl": false,
17+
"canSave": true,
18+
"canEdit": true,
19+
"canAdmin": true,
20+
"createdBy": "admin",
21+
"created": "2018-01-31T17:43:12+01:00",
22+
"updatedBy": "admin",
23+
"updated": "2018-01-31T17:43:12+01:00",
24+
"version": 1
25+
}
26+
]
27+
`
28+
getFolderJSON = `
29+
{
30+
"id":1,
31+
"uid": "nErXDvCkzz",
32+
"title": "Departmenet ABC",
33+
"url": "/dashboards/f/nErXDvCkzz/department-abc",
34+
"hasAcl": false,
35+
"canSave": true,
36+
"canEdit": true,
37+
"canAdmin": true,
38+
"createdBy": "admin",
39+
"created": "2018-01-31T17:43:12+01:00",
40+
"updatedBy": "admin",
41+
"updated": "2018-01-31T17:43:12+01:00",
42+
"version": 1
43+
}
44+
`
45+
createdFolderJSON = `
46+
{
47+
"id":1,
48+
"uid": "nErXDvCkzz",
49+
"title": "Departmenet ABC",
50+
"url": "/dashboards/f/nErXDvCkzz/department-abc",
51+
"hasAcl": false,
52+
"canSave": true,
53+
"canEdit": true,
54+
"canAdmin": true,
55+
"createdBy": "admin",
56+
"created": "2018-01-31T17:43:12+01:00",
57+
"updatedBy": "admin",
58+
"updated": "2018-01-31T17:43:12+01:00",
59+
"version": 1
60+
}
61+
`
62+
updatedFolderJSON = `
63+
{
64+
"id":1,
65+
"uid": "nErXDvCkzz",
66+
"title": "Departmenet DEF",
67+
"url": "/dashboards/f/nErXDvCkzz/department-def",
68+
"hasAcl": false,
69+
"canSave": true,
70+
"canEdit": true,
71+
"canAdmin": true,
72+
"createdBy": "admin",
73+
"created": "2018-01-31T17:43:12+01:00",
74+
"updatedBy": "admin",
75+
"updated": "2018-01-31T17:43:12+01:00",
76+
"version": 1
77+
}
78+
`
79+
deletedFolderJSON = `
80+
{
81+
"message":"Folder deleted"
82+
}
83+
`
84+
)
85+
86+
func TestFolders(t *testing.T) {
87+
server, client := gapiTestTools(200, getFoldersJSON)
88+
defer server.Close()
89+
90+
folders, err := client.Folders()
91+
if err != nil {
92+
t.Error(err)
93+
}
94+
95+
t.Log(pretty.PrettyFormat(folders))
96+
97+
if len(folders) != 1 {
98+
t.Error("Length of returned folders should be 1")
99+
}
100+
if folders[0].Id != 1 || folders[0].Title != "Departmenet ABC" {
101+
t.Error("Not correctly parsing returned folders.")
102+
}
103+
}
104+
105+
func TestFolder(t *testing.T) {
106+
server, client := gapiTestTools(200, getFolderJSON)
107+
defer server.Close()
108+
109+
folder := int64(1)
110+
resp, err := client.Folder(folder)
111+
if err != nil {
112+
t.Error(err)
113+
}
114+
115+
t.Log(pretty.PrettyFormat(resp))
116+
117+
if resp.Id != folder || resp.Title != "Departmenet ABC" {
118+
t.Error("Not correctly parsing returned folder.")
119+
}
120+
}
121+
122+
func TestNewFolder(t *testing.T) {
123+
server, client := gapiTestTools(200, createdFolderJSON)
124+
defer server.Close()
125+
126+
resp, err := client.NewFolder("test-folder")
127+
if err != nil {
128+
t.Error(err)
129+
}
130+
131+
t.Log(pretty.PrettyFormat(resp))
132+
133+
if resp != 1 {
134+
t.Error("Not correctly parsing returned creation message.")
135+
}
136+
}
137+
138+
func TestUpdateFolder(t *testing.T) {
139+
server, client := gapiTestTools(200, updatedFolderJSON)
140+
defer server.Close()
141+
142+
err := client.UpdateFolder(int64(1), "test-folder")
143+
if err != nil {
144+
t.Error(err)
145+
}
146+
}
147+
148+
func TestDeleteFolder(t *testing.T) {
149+
server, client := gapiTestTools(200, deletedFolderJSON)
150+
defer server.Close()
151+
152+
err := client.DeleteFolder(int64(1))
153+
if err != nil {
154+
t.Error(err)
155+
}
156+
}

0 commit comments

Comments
 (0)