Files
admin 1db56d6741
All checks were successful
Run Tests / Run Go Tests (push) Successful in 2m24s
Run Tests / Lint Code (push) Successful in 3m36s
Fix lint errors: add error checks for errcheck linter
- Add error check for JSON response in panic handler
- Remove duplicate defer CloseDB() call (handled in shutdown)
- Add error checks for all WriteField() calls in test files
- Add error checks for CreateFormFile() and Write() calls
- Fix golangci-lint Go 1.25 compatibility by installing from source
2025-11-21 15:55:12 +03:00

96 lines
2.6 KiB
Go

package handlers
import (
"bytes"
"mime/multipart"
"net/http/httptest"
"testing"
"github.com/gofiber/fiber/v2"
)
func TestUploadBook(t *testing.T) {
// This test requires database and Firebase to be initialized
// Skip if not available
t.Skip("Skipping UploadBook test - requires database and Firebase")
app := fiber.New()
app.Post("/api/books", UploadBook)
// Create multipart form with test data
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
// Add form fields
if err := writer.WriteField("book_name", "Test Book"); err != nil {
t.Fatalf("Failed to write field: %v", err)
}
if err := writer.WriteField("cost", "10.50"); err != nil {
t.Fatalf("Failed to write field: %v", err)
}
if err := writer.WriteField("price", "15.99"); err != nil {
t.Fatalf("Failed to write field: %v", err)
}
if err := writer.WriteField("quantity", "100"); err != nil {
t.Fatalf("Failed to write field: %v", err)
}
if err := writer.WriteField("publisher_author", "Test Publisher"); err != nil {
t.Fatalf("Failed to write field: %v", err)
}
if err := writer.WriteField("category", "Fiction"); err != nil {
t.Fatalf("Failed to write field: %v", err)
}
// Add image file
part, err := writer.CreateFormFile("image", "test.png")
if err != nil {
t.Fatalf("Failed to create form file: %v", err)
}
if _, err := part.Write([]byte("fake image data")); err != nil {
t.Fatalf("Failed to write image data: %v", err)
}
if err := writer.Close(); err != nil {
t.Fatalf("Failed to close writer: %v", err)
}
req := httptest.NewRequest("POST", "/api/books", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
resp, err := app.Test(req)
if err != nil {
t.Fatalf("Test request failed: %v", err)
}
if resp.StatusCode != fiber.StatusCreated {
t.Errorf("Expected status %d, got %d", fiber.StatusCreated, resp.StatusCode)
}
}
func TestUploadBook_ValidationErrors(t *testing.T) {
app := fiber.New()
app.Post("/api/books", UploadBook)
// Test missing required field
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
if err := writer.WriteField("book_name", ""); err != nil { // Empty book name
t.Fatalf("Failed to write field: %v", err)
}
if err := writer.Close(); err != nil {
t.Fatalf("Failed to close writer: %v", err)
}
req := httptest.NewRequest("POST", "/api/books", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
resp, err := app.Test(req)
if err != nil {
t.Fatalf("Test request failed: %v", err)
}
if resp.StatusCode != fiber.StatusBadRequest {
t.Errorf("Expected status %d, got %d", fiber.StatusBadRequest, resp.StatusCode)
}
}