@@ -0,0 +1,56 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestJournalClientAndAttachments(t *testing.T) {
|
||||
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
switch {
|
||||
case r.Method == http.MethodGet && r.URL.Path == "/v1/gardens/4/journal":
|
||||
_, _ = w.Write([]byte(`{"journal_entries":[{"id":8,"title":"Ernte"}]}`))
|
||||
case r.Method == http.MethodPost && r.URL.Path == "/v1/gardens/4/journal/8/attachments":
|
||||
if err := r.ParseMultipartForm(1024); err != nil {
|
||||
t.Error(err)
|
||||
http.Error(w, "bad multipart", 400)
|
||||
return
|
||||
}
|
||||
file, header, err := r.FormFile("file")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
http.Error(w, "missing file", 400)
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
data, _ := io.ReadAll(file)
|
||||
if header.Filename != "ernte.jpg" || string(data) != "jpeg" {
|
||||
t.Errorf("unexpected upload: %q %q", header.Filename, data)
|
||||
}
|
||||
w.WriteHeader(http.StatusCreated)
|
||||
_, _ = w.Write([]byte(`{"attachment":{"id":9,"entry_id":8,"file_name":"ernte.jpg","media_type":"image/jpeg","size":4}}`))
|
||||
case r.Method == http.MethodGet && r.URL.Path == "/v1/gardens/4/journal/8/attachments/9":
|
||||
w.Header().Set("Content-Type", "image/jpeg")
|
||||
w.Header().Set("Content-Disposition", `inline; filename="ernte.jpg"`)
|
||||
_, _ = w.Write([]byte("jpeg"))
|
||||
default:
|
||||
http.NotFound(w, r)
|
||||
}
|
||||
})
|
||||
apiClient := newTestClient(t, handler)
|
||||
entries, _, err := apiClient.JournalEntries(context.Background(), 4)
|
||||
if err != nil || len(entries) != 1 || entries[0].Title != "Ernte" {
|
||||
t.Fatalf("entries: %#v, %v", entries, err)
|
||||
}
|
||||
attachment, _, err := apiClient.UploadJournalAttachment(context.Background(), 4, 8, "ernte.jpg", "image/jpeg", []byte("jpeg"))
|
||||
if err != nil || attachment.ID != 9 {
|
||||
t.Fatalf("upload: %#v, %v", attachment, err)
|
||||
}
|
||||
download, _, err := apiClient.JournalAttachment(context.Background(), 4, 8, 9)
|
||||
if err != nil || download.FileName != "ernte.jpg" || !strings.EqualFold(string(download.Data), "jpeg") {
|
||||
t.Fatalf("download: %#v, %v", download, err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user