- 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
96 lines
2.6 KiB
Go
96 lines
2.6 KiB
Go
package handlers
|
|
|
|
import (
|
|
"bytes"
|
|
"mime/multipart"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
func TestUploadStationery(t *testing.T) {
|
|
// This test requires database and Firebase to be initialized
|
|
// Skip if not available
|
|
t.Skip("Skipping UploadStationery test - requires database and Firebase")
|
|
|
|
app := fiber.New()
|
|
app.Post("/api/stationery", UploadStationery)
|
|
|
|
// Create multipart form with test data
|
|
body := &bytes.Buffer{}
|
|
writer := multipart.NewWriter(body)
|
|
|
|
// Add form fields
|
|
if err := writer.WriteField("stationery_name", "Test Pen"); err != nil {
|
|
t.Fatalf("Failed to write field: %v", err)
|
|
}
|
|
if err := writer.WriteField("cost", "2.50"); err != nil {
|
|
t.Fatalf("Failed to write field: %v", err)
|
|
}
|
|
if err := writer.WriteField("price", "5.99"); err != nil {
|
|
t.Fatalf("Failed to write field: %v", err)
|
|
}
|
|
if err := writer.WriteField("quantity", "200"); err != nil {
|
|
t.Fatalf("Failed to write field: %v", err)
|
|
}
|
|
if err := writer.WriteField("category", "Writing"); err != nil {
|
|
t.Fatalf("Failed to write field: %v", err)
|
|
}
|
|
if err := writer.WriteField("color", "Blue"); 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/stationery", 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 TestUploadStationery_ValidationErrors(t *testing.T) {
|
|
app := fiber.New()
|
|
app.Post("/api/stationery", UploadStationery)
|
|
|
|
// Test missing required field
|
|
body := &bytes.Buffer{}
|
|
writer := multipart.NewWriter(body)
|
|
if err := writer.WriteField("stationery_name", ""); err != nil { // Empty stationery 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/stationery", 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)
|
|
}
|
|
}
|