diff --git a/handlers/book_test.go b/handlers/book_test.go index 21cf871..a1abe34 100644 --- a/handlers/book_test.go +++ b/handlers/book_test.go @@ -22,18 +22,37 @@ func TestUploadBook(t *testing.T) { writer := multipart.NewWriter(body) // Add form fields - writer.WriteField("book_name", "Test Book") - writer.WriteField("cost", "10.50") - writer.WriteField("price", "15.99") - writer.WriteField("quantity", "100") - writer.WriteField("publisher_author", "Test Publisher") - writer.WriteField("category", "Fiction") + 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, _ := writer.CreateFormFile("image", "test.png") - part.Write([]byte("fake image data")) + 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) + } - writer.Close() + 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()) @@ -55,8 +74,12 @@ func TestUploadBook_ValidationErrors(t *testing.T) { // Test missing required field body := &bytes.Buffer{} writer := multipart.NewWriter(body) - writer.WriteField("book_name", "") // Empty book name - writer.Close() + 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()) diff --git a/handlers/stationery_test.go b/handlers/stationery_test.go index 1c1333e..c5d6df9 100644 --- a/handlers/stationery_test.go +++ b/handlers/stationery_test.go @@ -22,18 +22,37 @@ func TestUploadStationery(t *testing.T) { 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") + 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, _ := writer.CreateFormFile("image", "test.png") - part.Write([]byte("fake image data")) + 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) + } - writer.Close() + 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()) @@ -55,8 +74,12 @@ func TestUploadStationery_ValidationErrors(t *testing.T) { // Test missing required field body := &bytes.Buffer{} writer := multipart.NewWriter(body) - writer.WriteField("stationery_name", "") // Empty stationery name - writer.Close() + 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()) diff --git a/main.go b/main.go index 11bc0f2..0c6a396 100644 --- a/main.go +++ b/main.go @@ -26,7 +26,7 @@ func main() { if err != nil { log.Fatalf("Failed to connect to database: %v", err) } - defer services.CloseDB() + // Note: CloseDB is called explicitly in graceful shutdown, not in defer log.Println("Database connected successfully") // Initialize Firebase diff --git a/middleware/error_handler.go b/middleware/error_handler.go index 399792e..7ad4c44 100644 --- a/middleware/error_handler.go +++ b/middleware/error_handler.go @@ -43,23 +43,25 @@ func ErrorHandler(c *fiber.Ctx) error { // RecoverHandler recovers from panics and returns a proper error response func RecoverHandler() fiber.Handler { return func(c *fiber.Ctx) error { - defer func() { - if r := recover(); r != nil { - // Log panic with context - log.Printf("Panic recovered: %v | Method: %s | Path: %s | IP: %s", - r, - c.Method(), - c.Path(), - c.IP(), - ) + defer func() { + if r := recover(); r != nil { + // Log panic with context + log.Printf("Panic recovered: %v | Method: %s | Path: %s | IP: %s", + r, + c.Method(), + c.Path(), + c.IP(), + ) - // Return error response - c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ - "success": false, - "error": "Internal Server Error", - }) - } - }() + // Return error response + if err := c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "success": false, + "error": "Internal Server Error", + }); err != nil { + log.Printf("Failed to send error response: %v", err) + } + } + }() return c.Next() }