package images import ( "io" "net/http" "net/http/httptest" "testing" "github.com/gofiber/fiber/v3" ) func TestImagePathHelpers(t *testing.T) { filename := "/example.png" if got := imagePublicPath(filename); got != "/uploads/example.png" { t.Fatalf("expected public path %q, got %q", "/uploads/example.png", got) } if got := imageDiskPath(filename); got != "uploads/example.png" { t.Fatalf("expected disk path %q, got %q", "uploads/example.png", got) } } func TestBuildImageURLUsesForwardedHeaders(t *testing.T) { app := fiber.New() app.Get("/image-url", func(c fiber.Ctx) error { return c.SendString(buildImageURL(c, "/uploads/example.png")) }) req := httptest.NewRequest(http.MethodGet, "/image-url", nil) req.Header.Set("X-Forwarded-Proto", "https") req.Header.Set("X-Forwarded-Host", "cdn.example.com") resp, err := app.Test(req) if err != nil { t.Fatalf("request failed: %v", err) } t.Cleanup(func() { _ = resp.Body.Close() }) body, err := io.ReadAll(resp.Body) if err != nil { t.Fatalf("failed to read response body: %v", err) } if got := string(body); got != "https://cdn.example.com/uploads/example.png" { t.Fatalf("expected forwarded image url, got %q", got) } } func TestParsePagination(t *testing.T) { cases := []struct { query string wantPage int wantLimit int }{ {"", 1, 20}, {"page=0&limit=0", 1, 20}, {"page=3&limit=50", 3, 50}, {"page=-1&limit=200", 1, 20}, } for _, tc := range cases { app := fiber.New() app.Get("/test", func(c fiber.Ctx) error { page, limit := parsePagination(c) return c.JSON(fiber.Map{"page": page, "limit": limit}) }) req := httptest.NewRequest(http.MethodGet, "/test?"+tc.query, nil) resp, err := app.Test(req) if err != nil { t.Fatalf("request failed for query %q: %v", tc.query, err) } t.Cleanup(func() { _ = resp.Body.Close() }) if resp.StatusCode != http.StatusOK { t.Fatalf("query %q: expected 200 got %d", tc.query, resp.StatusCode) } } }