From 34572dbdeaa047a1694321e009b41f8fa5fa72db Mon Sep 17 00:00:00 2001 From: matthiasng Date: Sun, 5 Jan 2020 21:05:13 +0100 Subject: [PATCH] impl playlist api --- playlist.go | 134 +++++++++++++++++++++++++++++++++++++++++++++++ playlist_test.go | 102 ++++++++++++++++++++++++++++++++++++ 2 files changed, 236 insertions(+) create mode 100644 playlist.go create mode 100644 playlist_test.go diff --git a/playlist.go b/playlist.go new file mode 100644 index 0000000..e8a3b44 --- /dev/null +++ b/playlist.go @@ -0,0 +1,134 @@ +package gapi + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io/ioutil" +) + +type PlaylistItem struct { + Type string `json:"type"` + Value string `json:"value"` + Order int `json:"order"` + Title string `json:"title"` +} + +type Playlist struct { + Id int `json:"id"` + Name string `json:"name"` + Interval string `json:"interval"` + Items []PlaylistItem `json:"items"` +} + +func (c *Client) Playlist(id int) (*Playlist, error) { + path := fmt.Sprintf("/api/playlists/%d", id) + req, err := c.newRequest("GET", path, nil, nil) + if err != nil { + return nil, err + } + + resp, err := c.Do(req) + if err != nil { + return nil, err + } + + if resp.StatusCode != 200 { + return nil, errors.New(resp.Status) + } + + data, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + playlist := &Playlist{} + + err = json.Unmarshal(data, &playlist) + if err != nil { + return nil, err + } + + return playlist, nil +} + +func (c *Client) NewPlaylist(playlist Playlist) (int, error) { + data, err := json.Marshal(playlist) + if err != nil { + return 0, err + } + + req, err := c.newRequest("POST", "/api/playlists", nil, bytes.NewBuffer(data)) + if err != nil { + return 0, err + } + + resp, err := c.Do(req) + if err != nil { + return 0, err + } + + if resp.StatusCode != 200 { + return 0, errors.New(resp.Status) + } + + data, err = ioutil.ReadAll(resp.Body) + if err != nil { + return 0, err + } + + result := struct { + Id int + }{} + + err = json.Unmarshal(data, &result) + if err != nil { + return 0, err + } + + return result.Id, nil +} + +func (c *Client) UpdatePlaylist(playlist Playlist) error { + path := fmt.Sprintf("/api/playlists/%d", playlist.Id) + data, err := json.Marshal(playlist) + if err != nil { + return err + } + + req, err := c.newRequest("PUT", path, nil, bytes.NewBuffer(data)) + if err != nil { + return err + } + + resp, err := c.Do(req) + if err != nil { + return err + } + + if resp.StatusCode != 200 { + return errors.New(resp.Status) + } + + return nil +} + +func (c *Client) DeletePlaylist(id int) error { + path := fmt.Sprintf("/api/playlists/%d", id) + req, err := c.newRequest("DELETE", path, nil, nil) + if err != nil { + return err + } + + resp, err := c.Do(req) + if err != nil { + return err + } + + if resp.StatusCode != 200 { + return errors.New(resp.Status) + } + + return nil +} diff --git a/playlist_test.go b/playlist_test.go new file mode 100644 index 0000000..89f1d61 --- /dev/null +++ b/playlist_test.go @@ -0,0 +1,102 @@ +package gapi + +import ( + "testing" +) + +const ( + createAndUpdatePlaylistResponse = ` { + "id": 1, + "name": "my playlist", + "interval": "5m" + }` + + getPlaylistResponse = `{ + "id" : 2, + "name": "my playlist", + "interval": "5m", + "orgId": "my org", + "items": [ + { + "id": 1, + "playlistId": 1, + "type": "dashboard_by_id", + "value": "3", + "order": 1, + "title":"my dasboard" + }, + { + "id": 1, + "playlistId": 1, + "type": "dashboard_by_id", + "value": "3", + "order": 1, + "title":"my dasboard" + } + ] + }` +) + +func TestPlaylistCreateAndUpdate(t *testing.T) { + server, client := gapiTestTools(200, createAndUpdatePlaylistResponse) + defer server.Close() + + playlist := Playlist{ + Name: "my playlist", + Interval: "5m", + Items: []PlaylistItem{ + PlaylistItem{}, + }, + } + + // create + id, err := client.NewPlaylist(playlist) + if err != nil { + t.Fatal(err) + } + + if id != 1 { + t.Errorf("Invalid id - %d, Expected %d", id, 1) + } + + // update + playlist.Items = append(playlist.Items, PlaylistItem{ + Type: "dashboard_by_id", + Value: "1", + Order: 1, + Title: "my dashboard", + }) + + err = client.UpdatePlaylist(playlist) + if err != nil { + t.Fatal(err) + } +} + +func TestGetPlaylist(t *testing.T) { + server, client := gapiTestTools(200, getPlaylistResponse) + defer server.Close() + + playlist, err := client.Playlist(1) + if err != nil { + t.Error(err) + } + + if playlist.Id != 2 { + t.Errorf("Invalid id - %d, Expected %d", playlist.Id, 1) + } + + if len(playlist.Items) != 2 { + t.Errorf("Invalid len(items) - %d, Expected %d", len(playlist.Items), 2) + } +} + +func TestDeletePlaylist(t *testing.T) { + server, client := gapiTestTools(200, "") + defer server.Close() + + err := client.DeletePlaylist(1) + if err != nil { + t.Error(err) + } +}