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 writer.WriteField("stationery_name", "Test Pen") writer.WriteField("cost", "2.50") writer.WriteField("price", "5.99") writer.WriteField("quantity", "200") writer.WriteField("category", "Writing") writer.WriteField("color", "Blue") // Add image file part, _ := writer.CreateFormFile("image", "test.png") part.Write([]byte("fake image data")) writer.Close() 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) writer.WriteField("stationery_name", "") // Empty stationery name writer.Close() 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) } }