MyTinyTodo2/mytinytodo/remote/client_test.go

124 lines
2.6 KiB
Go

package remote
import (
"errors"
"net/http"
"net/http/httptest"
"testing"
)
func mockClient(code int, body string) (*Client, *httptest.Server) {
s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(code)
w.Write([]byte(body))
}))
return &Client{
config: &Config{
remote: s.URL,
password: "",
args: []string{},
},
http: &http.Client{},
}, s
}
func TestClientLists(t *testing.T) {
c, srv := mockClient(200, `{"list":[{"id":"1", "name":"name"}]}`)
defer srv.Close()
if l, err := c.Lists(); err != nil {
t.Fatalf("cannot lists(): %v", err)
} else if l[0] != (List{ID: "1", Name: "name"}) {
t.Fatalf("cannot parse lists(): %v", l[0])
}
}
func TestClientTasks(t *testing.T) {
c, srv := mockClient(200, `{"list":[{"id":"1", "title":"title", "compl": 1}]}`)
defer srv.Close()
if l, err := c.Tasks(List{}); err != nil {
t.Fatalf("cannot tasks(): %v", err)
} else if l[0] != (Task{ID: "1", Title: "title", Complete: 1}) {
t.Fatalf("cannot parse tasks(): %v", l[0])
}
}
func TestClientNewTask(t *testing.T) {
cases := []struct {
status int
err error
}{
{
status: http.StatusOK,
err: nil,
},
{
status: http.StatusNotFound,
err: errors.New("non 200 status on new task: 404"),
},
}
for i, c := range cases {
cli, srv := mockClient(c.status, `{}`)
defer srv.Close()
err := cli.NewTask(List{ID: "1"}, Task{Title: "a"}, "a,tag")
if (err != nil && c.err == nil) || (err == nil && c.err != nil) {
t.Errorf("[%d] new task unexpected error: got %v, want %v", i, err, c.err)
}
}
}
func TestClientCloseTask(t *testing.T) {
cases := []struct {
status int
err error
}{
{
status: http.StatusOK,
err: nil,
},
{
status: http.StatusNotFound,
err: errors.New("non 200 status on close task: 404"),
},
}
for i, c := range cases {
cli, srv := mockClient(c.status, `{}`)
defer srv.Close()
err := cli.CloseTask(Task{ID: "1"})
if (err != nil && c.err == nil) || (err == nil && c.err != nil) {
t.Errorf("[%d] new task unexpected error: got %v, want %v", i, err, c.err)
}
}
}
func TestClientOpenTask(t *testing.T) {
cases := []struct {
status int
err error
}{
{
status: http.StatusOK,
err: nil,
},
{
status: http.StatusNotFound,
err: errors.New("non 200 status on open task: 404"),
},
}
for i, c := range cases {
cli, srv := mockClient(c.status, `{}`)
defer srv.Close()
err := cli.OpenTask(Task{ID: "1"})
if (err != nil && c.err == nil) || (err == nil && c.err != nil) {
t.Errorf("[%d] new task unexpected error: got %v, want %v", i, err, c.err)
}
}
}