diff --git a/model/team.go b/model/team.go index a44220a..881b117 100644 --- a/model/team.go +++ b/model/team.go @@ -1,7 +1,7 @@ package model type Team struct { - Activate bool `json:"active"` // チームが利用可能な状態かどうか - ID string `json:"id"` // チームの一意なID - Name string `json:"name"` // チームに設定されている名前を表します。 + Active bool `json:"active"` // チームが利用可能な状態かどうか + ID string `json:"id"` // チームの一意なID + Name string `json:"name"` // チームに設定されている名前を表します。 } diff --git a/model/teams.go b/model/teams.go index a1fc2cb..d08384a 100644 --- a/model/teams.go +++ b/model/teams.go @@ -13,6 +13,6 @@ func FetchTeams(client api.Client) (teams Teams, err error) { if err != nil { return } - json.Unmarshal(body, &teams) + err = json.Unmarshal(body, &teams) return } diff --git a/model/teams_test.go b/model/teams_test.go new file mode 100644 index 0000000..faa072a --- /dev/null +++ b/model/teams_test.go @@ -0,0 +1,84 @@ +package model_test + +import ( + "fmt" + "log" + "net/http" + "net/http/httptest" + "os" + "testing" + + "github.com/minodisk/qiitactl/api" + "github.com/minodisk/qiitactl/model" +) + +func TestTeams_FetchTeams(t *testing.T) { + mux := http.NewServeMux() + mux.HandleFunc("/api/v2/teams", func(w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" { + log.Fatalf("wrong method: %s", r.Method) + } + w.Write([]byte(`[ + { + "active": true, + "id": "increments", + "name": "Increments Inc." + } + ]`)) + }) + server := httptest.NewServer(mux) + defer server.Close() + + err := os.Setenv("QIITA_ACCESS_TOKEN", "XXXXXXXXXXXX") + if err != nil { + t.Fatal(err) + } + + client, err := api.NewClient(func(subDomain, path string) (url string) { + url = fmt.Sprintf("%s%s%s", server.URL, "/api/v2", path) + return + }) + if err != nil { + t.Fatal(err) + } + + teams, err := model.FetchTeams(client) + if err != nil { + t.Fatal(err) + } + + if len(teams) != 1 { + t.Fatalf("wrong length of teams: expected %d, but actual %d", 1, len(teams)) + } + + if teams[0].Active != true || teams[0].ID != "increments" || teams[0].Name != "Increments Inc." { + t.Errorf("wrong team: %+v", teams[0]) + } +} + +func TestTeams_FetchTeamsError(t *testing.T) { + mux := http.NewServeMux() + mux.HandleFunc("/api/v2/teams", func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(503) + }) + server := httptest.NewServer(mux) + defer server.Close() + + err := os.Setenv("QIITA_ACCESS_TOKEN", "XXXXXXXXXXXX") + if err != nil { + t.Fatal(err) + } + + client, err := api.NewClient(func(subDomain, path string) (url string) { + url = fmt.Sprintf("%s%s%s", server.URL, "/api/v2", path) + return + }) + if err != nil { + t.Fatal(err) + } + + _, err = model.FetchTeams(client) + if err == nil { + t.Fatal("should occur error") + } +}