package httputil // Tests for HTTP response helpers and health status derivation. import ( "encoding/json" "net/http" "net/http/httptest" "testing" "github.com/gofiber/fiber/v3" "github.com/stretchr/testify/require" ) // TestNewPaginatedResponse verifies total page calculation in paginated responses. func TestNewPaginatedResponse(t *testing.T) { resp := NewPaginatedResponse([]string{"a"}, 1, 2, 3) require.NotNil(t, resp.Meta) require.Equal(t, 2, resp.Meta.TotalPages) } // TestHealthStatus verifies health status flips to unhealthy when any check fails. func TestHealthStatus(t *testing.T) { app := fiber.New() app.Get("/health", func(c fiber.Ctx) error { return Health(c, "service", "0.1.0", map[string]string{ "db": "ok", "cache": "down", }) }) req := httptest.NewRequest(http.MethodGet, "/health", nil) resp, err := app.Test(req) require.NoError(t, err) defer resp.Body.Close() var body HealthResponse require.NoError(t, json.NewDecoder(resp.Body).Decode(&body)) require.Equal(t, "unhealthy", body.Status) } // TestResponseHelpers verifies status codes for OK, Created, NoContent, Paginated, and Message. func TestResponseHelpers(t *testing.T) { app := fiber.New() app.Get("/ok", func(c fiber.Ctx) error { return OK(c, fiber.Map{"ok": true}) }) app.Post("/created", func(c fiber.Ctx) error { return Created(c, fiber.Map{"id": "1"}) }) app.Delete("/no-content", func(c fiber.Ctx) error { return NoContent(c) }) app.Get("/paginated", func(c fiber.Ctx) error { return Paginated(c, []string{"a"}, 1, 2, 3) }) app.Get("/message", func(c fiber.Ctx) error { return Message(c, "hello") }) req := httptest.NewRequest(http.MethodGet, "/ok", nil) resp, err := app.Test(req) require.NoError(t, err) defer resp.Body.Close() require.Equal(t, http.StatusOK, resp.StatusCode) req = httptest.NewRequest(http.MethodPost, "/created", nil) resp, err = app.Test(req) require.NoError(t, err) defer resp.Body.Close() require.Equal(t, http.StatusCreated, resp.StatusCode) req = httptest.NewRequest(http.MethodDelete, "/no-content", nil) resp, err = app.Test(req) require.NoError(t, err) defer resp.Body.Close() require.Equal(t, http.StatusNoContent, resp.StatusCode) req = httptest.NewRequest(http.MethodGet, "/paginated", nil) resp, err = app.Test(req) require.NoError(t, err) defer resp.Body.Close() require.Equal(t, http.StatusOK, resp.StatusCode) req = httptest.NewRequest(http.MethodGet, "/message", nil) resp, err = app.Test(req) require.NoError(t, err) defer resp.Body.Close() require.Equal(t, http.StatusOK, resp.StatusCode) }