bookstack-api/attachments_test.go

121 lines
3.1 KiB
Go
Raw Normal View History

package bookstack
import (
"context"
"encoding/json"
"errors"
"net/http"
"testing"
)
func TestAttachmentsService_List(t *testing.T) {
c := testClient(t, func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/api/attachments" {
t.Errorf("path = %s, want /api/attachments", r.URL.Path)
}
json.NewEncoder(w).Encode(map[string]any{
"data": []map[string]any{{"id": 1, "name": "file.pdf", "uploaded_to": 5}},
"total": 1,
})
})
attachments, err := c.Attachments.List(context.Background(), nil)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if len(attachments) != 1 {
t.Fatalf("got %d, want 1", len(attachments))
}
if attachments[0].Name != "file.pdf" {
t.Errorf("Name = %q", attachments[0].Name)
}
}
func TestAttachmentsService_Get(t *testing.T) {
c := testClient(t, func(w http.ResponseWriter, r *http.Request) {
json.NewEncoder(w).Encode(map[string]any{
"id": 1, "name": "file.pdf", "content": "https://example.com/file.pdf",
})
})
a, err := c.Attachments.Get(context.Background(), 1)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if a.Content != "https://example.com/file.pdf" {
t.Errorf("Content = %q", a.Content)
}
}
func TestAttachmentsService_Create(t *testing.T) {
c := testClient(t, func(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
t.Errorf("method = %s, want POST", r.Method)
}
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(map[string]any{
"id": 2, "name": "link.pdf", "external": true,
})
})
a, err := c.Attachments.Create(context.Background(), &AttachmentCreateRequest{
Name: "link.pdf",
UploadedTo: 5,
Link: "https://example.com/link.pdf",
})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if a.ID != 2 {
t.Errorf("ID = %d, want 2", a.ID)
}
}
func TestAttachmentsService_Update(t *testing.T) {
c := testClient(t, func(w http.ResponseWriter, r *http.Request) {
if r.Method != "PUT" {
t.Errorf("method = %s, want PUT", r.Method)
}
json.NewEncoder(w).Encode(map[string]any{
"id": 1, "name": "renamed.pdf",
})
})
a, err := c.Attachments.Update(context.Background(), 1, &AttachmentUpdateRequest{
Name: "renamed.pdf",
})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if a.Name != "renamed.pdf" {
t.Errorf("Name = %q", a.Name)
}
}
func TestAttachmentsService_Delete(t *testing.T) {
c := testClient(t, func(w http.ResponseWriter, r *http.Request) {
if r.Method != "DELETE" {
t.Errorf("method = %s, want DELETE", r.Method)
}
w.WriteHeader(http.StatusNoContent)
})
err := c.Attachments.Delete(context.Background(), 1)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
}
func TestAttachmentsService_Get_NotFound(t *testing.T) {
c := testClient(t, func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
json.NewEncoder(w).Encode(map[string]any{
"error": map[string]string{"message": "Not found"},
})
})
_, err := c.Attachments.Get(context.Background(), 999)
if !errors.Is(err, ErrNotFound) {
t.Errorf("expected ErrNotFound, got %v", err)
}
}