46 lines
1.8 KiB
Go
46 lines
1.8 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"testing"
|
|
)
|
|
|
|
func TestTaskClientPaths(t *testing.T) {
|
|
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
switch {
|
|
case r.Method == http.MethodPost && r.URL.Path == "/v1/gardens/4/tasks":
|
|
w.WriteHeader(http.StatusCreated)
|
|
_, _ = w.Write([]byte(`{"task":{"id":8,"garden_id":4,"title":"Gießen"}}`))
|
|
case r.Method == http.MethodGet && r.URL.Path == "/v1/gardens/4/tasks":
|
|
_, _ = w.Write([]byte(`{"tasks":[{"id":8,"garden_id":4,"title":"Gießen"}]}`))
|
|
case r.Method == http.MethodGet && r.URL.Path == "/v1/gardens/4/tasks/8":
|
|
_, _ = w.Write([]byte(`{"task":{"id":8,"garden_id":4,"title":"Gießen"}}`))
|
|
case r.Method == http.MethodPatch && r.URL.Path == "/v1/gardens/4/tasks/8":
|
|
_, _ = w.Write([]byte(`{"task":{"id":8,"garden_id":4,"title":"Gießen","version":2}}`))
|
|
case r.Method == http.MethodDelete && r.URL.Path == "/v1/gardens/4/tasks/8":
|
|
w.WriteHeader(http.StatusNoContent)
|
|
default:
|
|
http.NotFound(w, r)
|
|
}
|
|
})
|
|
apiClient := newTestClient(t, handler)
|
|
title := "Gießen"
|
|
if task, _, err := apiClient.CreateTask(context.Background(), 4, TaskInput{Title: &title}); err != nil || task.ID != 8 {
|
|
t.Fatalf("CreateTask: %+v %v", task, err)
|
|
}
|
|
if tasks, _, err := apiClient.Tasks(context.Background(), 4); err != nil || len(tasks) != 1 {
|
|
t.Fatalf("Tasks: %+v %v", tasks, err)
|
|
}
|
|
if _, _, err := apiClient.Task(context.Background(), 4, 8); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if task, _, err := apiClient.UpdateTask(context.Background(), 4, 8, TaskInput{Title: &title}); err != nil || task.Version != 2 {
|
|
t.Fatalf("UpdateTask: %+v %v", task, err)
|
|
}
|
|
if _, err := apiClient.DeleteTask(context.Background(), 4, 8); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|