121 lines
3.1 KiB
Go
121 lines
3.1 KiB
Go
|
|
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)
|
||
|
|
}
|
||
|
|
}
|