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

Commit e8cf2f1

Browse files
authored
impl playlist api (#32)
1 parent fe546f5 commit e8cf2f1

File tree

2 files changed

+236
-0
lines changed

2 files changed

+236
-0
lines changed

playlist.go

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

playlist_test.go

+102
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package gapi
2+
3+
import (
4+
"testing"
5+
)
6+
7+
const (
8+
createAndUpdatePlaylistResponse = ` {
9+
"id": 1,
10+
"name": "my playlist",
11+
"interval": "5m"
12+
}`
13+
14+
getPlaylistResponse = `{
15+
"id" : 2,
16+
"name": "my playlist",
17+
"interval": "5m",
18+
"orgId": "my org",
19+
"items": [
20+
{
21+
"id": 1,
22+
"playlistId": 1,
23+
"type": "dashboard_by_id",
24+
"value": "3",
25+
"order": 1,
26+
"title":"my dasboard"
27+
},
28+
{
29+
"id": 1,
30+
"playlistId": 1,
31+
"type": "dashboard_by_id",
32+
"value": "3",
33+
"order": 1,
34+
"title":"my dasboard"
35+
}
36+
]
37+
}`
38+
)
39+
40+
func TestPlaylistCreateAndUpdate(t *testing.T) {
41+
server, client := gapiTestTools(200, createAndUpdatePlaylistResponse)
42+
defer server.Close()
43+
44+
playlist := Playlist{
45+
Name: "my playlist",
46+
Interval: "5m",
47+
Items: []PlaylistItem{
48+
PlaylistItem{},
49+
},
50+
}
51+
52+
// create
53+
id, err := client.NewPlaylist(playlist)
54+
if err != nil {
55+
t.Fatal(err)
56+
}
57+
58+
if id != 1 {
59+
t.Errorf("Invalid id - %d, Expected %d", id, 1)
60+
}
61+
62+
// update
63+
playlist.Items = append(playlist.Items, PlaylistItem{
64+
Type: "dashboard_by_id",
65+
Value: "1",
66+
Order: 1,
67+
Title: "my dashboard",
68+
})
69+
70+
err = client.UpdatePlaylist(playlist)
71+
if err != nil {
72+
t.Fatal(err)
73+
}
74+
}
75+
76+
func TestGetPlaylist(t *testing.T) {
77+
server, client := gapiTestTools(200, getPlaylistResponse)
78+
defer server.Close()
79+
80+
playlist, err := client.Playlist(1)
81+
if err != nil {
82+
t.Error(err)
83+
}
84+
85+
if playlist.Id != 2 {
86+
t.Errorf("Invalid id - %d, Expected %d", playlist.Id, 1)
87+
}
88+
89+
if len(playlist.Items) != 2 {
90+
t.Errorf("Invalid len(items) - %d, Expected %d", len(playlist.Items), 2)
91+
}
92+
}
93+
94+
func TestDeletePlaylist(t *testing.T) {
95+
server, client := gapiTestTools(200, "")
96+
defer server.Close()
97+
98+
err := client.DeletePlaylist(1)
99+
if err != nil {
100+
t.Error(err)
101+
}
102+
}

0 commit comments

Comments
 (0)