34 lines
1.1 KiB
Go
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)
|
|
}
|