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

Add a bunch of new APIs #16

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
208 changes: 208 additions & 0 deletions team.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
package gapi

import (
"bytes"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
)

type Team struct {
Id int64 `json:"id,omitempty"`
OrgId int64 `json:"orgId,omitempty"`
Name string `json:"name,omitempty"`
Email string `json:"email,omitempty"`
AvatarUrl string `json:"avatarUrl,omitempty"`
MemberCount int64 `json:"memberCount,omitempty"`
}

type TeamMember struct {
UserId int64 `json:"userId,omitempty"`
TeamId int64 `json:"teamId,omitempty"`
OrgId int64 `json:"orgId,omitempty"`
Login string `json:"login,omitempty"`
Email string `json:"email,omitempty"`
AvatarUrl string `json:"avatarUrl,omitempty"`
}

type TeamSearchResponse struct {
TotalCount int64 `json:"totalCount,omitempty"`
Teams []*Team `json:"teams,omitempty"`
Page int64 `json:"page,omitempty"`
PerPage int64 `json:"perPage,omitempty"`
}

type CreateTeamResponse struct {
Id int64 `json:"teamId"`
}

func (c *Client) Team(id int64) (Team, error) {
team := Team{}
Copy link

@fspijkerman fspijkerman Aug 14, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this not be?

func (c *Client) Team(id int64) (*Team, error) {
	team := &Team{}

req, err := c.newRequest("GET", fmt.Sprintf("/api/teams/%d", id), nil, nil)
if err != nil {
return team, err
}
resp, err := c.Do(req)
if err != nil {
return team, err
}
if resp.StatusCode != 200 {
return team, errors.New(resp.Status)
}
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return team, err
}
err = json.Unmarshal(data, &team)
return team, err
}

func (c *Client) Teams() ([]*Team, error) {
var list []*Team
req, err := c.newRequest("GET", "/api/teams/search", nil, nil)
if err != nil {
return list, err
}
resp, err := c.Do(req)
if err != nil {
return list, err
}
if resp.StatusCode != 200 {
return list, errors.New(resp.Status)
}

data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return list, err
}
var r TeamSearchResponse
err = json.Unmarshal(data, &r)
return r.Teams, err
}

func (c *Client) NewTeam(name string) (Team, error) {
team := Team{
Name: name,
}
data, err := json.Marshal(team)
req, err := c.newRequest("POST", "/api/teams", nil, bytes.NewBuffer(data))
if err != nil {
return team, err
}
resp, err := c.Do(req)
if err != nil {
return team, err
}
if resp.StatusCode != 200 {
data, _ = ioutil.ReadAll(resp.Body)
return team, fmt.Errorf("status: %s body: %s", resp.Status, data)
}
data, err = ioutil.ReadAll(resp.Body)
if err != nil {
return team, err
}
var r CreateTeamResponse
err = json.Unmarshal(data, &r)
if err != nil {
return team, err
}
team.Id = r.Id
return team, err
}

func (c *Client) UpdateTeam(id string, name string) error {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

id string needs to be id int64

dataMap := map[string]string{
"name": name,
}
data, err := json.Marshal(dataMap)
req, err := c.newRequest("PUT", fmt.Sprintf("/api/teams/%s", id), 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 err
}

func (c *Client) DeleteTeam(id string) error {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

id string needs to be id int64

req, err := c.newRequest("DELETE", fmt.Sprintf("/api/teams/%s", id), 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 err
}

func (c *Client) AddTeamMember(id string, userID int64) error {
dataMap := map[string]interface{}{
"userId": userID,
}
data, err := json.Marshal(dataMap)
if err != nil {
return err
}
req, err := c.newRequest("POST", fmt.Sprintf("/api/teams/%s/members", id), 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 err
}

func (c *Client) RemoveTeamMember(id string, userID int64) error {
req, err := c.newRequest("DELETE", fmt.Sprintf("/api/teams/%s/members/%d", id, userID), 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 err
}

func (c *Client) TeamMembers(id string) ([]*TeamMember, error) {
req, err := c.newRequest("GET", fmt.Sprintf("/api/teams/%s/members", id), 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
}

var list []*TeamMember
err = json.Unmarshal(data, &list)
return list, err
}
90 changes: 90 additions & 0 deletions team_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package gapi

import (
"testing"

"github.com/gobs/pretty"
)

const (
creatTeamJSON = `{"message":"Team created","teamId":2}`
getTeamJSON = `{
"id": 1,
"orgId": 1,
"name": "MyTestTeam",
"email": "",
"created": "2017-12-15T10:40:45+01:00",
"updated": "2017-12-15T10:40:45+01:00"
}`
updateTeamJSON = `{"message":"Team updated"}`
deleteTeamJSON = `{"message":"Team deleted"}`
addTeamMemberJSON = `{"message":"Member added to Team"}`
)

func TestNewTeam(t *testing.T) {
server, client := gapiTestTools(200, creatTeamJSON)
defer server.Close()

team, err := client.NewTeam("test")
if err != nil {
t.Error(err)
}

t.Log(pretty.PrettyFormat(team))

if team.Id != 2 {
t.Error("Create Team Error.")
}
}

func TestGetTeam(t *testing.T) {
server, client := gapiTestTools(200, getTeamJSON)
defer server.Close()

resp, err := client.Team(1)
if err != nil {
t.Error(err)
}

t.Log(pretty.PrettyFormat(resp))

team := Team{
Id: 1,
OrgId: 1,
Email: "",
Name: "MyTestTeam",
}
if resp != team {
t.Error("Not correctly parsing returned team.")
}
}

func TestUpdateTeam(t *testing.T) {
server, client := gapiTestTools(200, updateTeamJSON)
defer server.Close()

err := client.UpdateTeam("1", "test team 2")
if err != nil {
t.Error(err)
}
}

func TestDeleteTeam(t *testing.T) {
server, client := gapiTestTools(200, deleteTeamJSON)
defer server.Close()

err := client.DeleteTeam("1")
if err != nil {
t.Error(err)
}
}

func TestAddTeamMember(t *testing.T) {
server, client := gapiTestTools(200, addTeamMemberJSON)
defer server.Close()

err := client.AddTeamMember("1", 1)
if err != nil {
t.Error(err)
}
}