55 lines
1.3 KiB
Go
55 lines
1.3 KiB
Go
package apperrorsx
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
func TestPublicDetail(t *testing.T) {
|
|
tests := []struct {
|
|
status int
|
|
want string
|
|
}{
|
|
{http.StatusBadRequest, "invalid request"},
|
|
{http.StatusUnauthorized, "unauthorized"},
|
|
{http.StatusForbidden, "forbidden"},
|
|
{http.StatusNotFound, "not found"},
|
|
{http.StatusConflict, "conflict"},
|
|
{http.StatusUnprocessableEntity, "validation failed"},
|
|
{http.StatusTooManyRequests, "too many requests"},
|
|
{http.StatusInternalServerError, "an internal error occurred"},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
if got := PublicDetail(tc.status); got != tc.want {
|
|
t.Fatalf("status %d: expected %q, got %q", tc.status, tc.want, got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestWriteSanitizesDetail(t *testing.T) {
|
|
app := fiber.New()
|
|
app.Get("/", func(c *fiber.Ctx) error {
|
|
err := New(ErrInternal)
|
|
err.Message = "raw database message"
|
|
return Write(c, err)
|
|
})
|
|
|
|
req, _ := http.NewRequest(http.MethodGet, "/", nil)
|
|
resp, err := app.Test(req)
|
|
if err != nil {
|
|
t.Fatalf("app.Test: %v", err)
|
|
}
|
|
body, _ := io.ReadAll(resp.Body)
|
|
if bytes.Contains(body, []byte("raw database message")) {
|
|
t.Fatalf("expected sanitized detail, got %s", string(body))
|
|
}
|
|
if !bytes.Contains(body, []byte(`"detail":"an internal error occurred"`)) {
|
|
t.Fatalf("expected generic detail, got %s", string(body))
|
|
}
|
|
}
|