thread-master/apps/backend/internal/middleware/striperawbody_middleware_te...

34 lines
1.1 KiB
Go

package middleware
import (
"bytes"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/require"
)
func TestStripeRawBodyPreservesPayloadAndSignature(t *testing.T) {
payload := []byte("{\n \"exact\": \"bytes\"\n}")
req := httptest.NewRequest(http.MethodPost, "/", bytes.NewReader(payload))
req.Header.Set("Stripe-Signature", "t=1,v1=abc")
rr := httptest.NewRecorder()
NewStripeRawBodyMiddleware().Handle(func(_ http.ResponseWriter, r *http.Request) {
got, sig, ok := StripeWebhookPayload(r.Context())
require.True(t, ok)
require.Equal(t, payload, got)
require.Equal(t, "t=1,v1=abc", sig)
})(rr, req)
require.Equal(t, http.StatusOK, rr.Code)
}
func TestStripeRawBodyRejectsOverOneMiB(t *testing.T) {
req := httptest.NewRequest(http.MethodPost, "/", bytes.NewReader(make([]byte, stripeWebhookMaxBytes+1)))
rr := httptest.NewRecorder()
called := false
NewStripeRawBodyMiddleware().Handle(func(http.ResponseWriter, *http.Request) { called = true })(rr, req)
require.False(t, called)
require.Equal(t, http.StatusRequestEntityTooLarge, rr.Code)
}