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) } }